From f3e0d44cc4cd12aec3acf38369edf4bc3516b5fc Mon Sep 17 00:00:00 2001 From: chrox Date: Thu, 7 Apr 2016 23:28:52 +0800 Subject: [PATCH] disable jit on some modules on android to make koreader on Android more stable and with these opt params: ``` require("jit.opt").start("sizemcode=64","maxmcode=64", "hotloop=10000") ``` The strategy here is that we only use precious mcode memory (jitting) on deep loops like the several blitting methods in blitbuffer.lua and the pixel-copying methods in mupdf.lua. So that a small amount of mcode memory (64KB) allocated when koreader is launched in the android.lua is enough for the program and it won't need to jit other parts of lua code and thus won't allocate mcode memory any more which by our observation will be harder and harder as we run koreader. --- frontend/cache.lua | 4 ++++ frontend/ui/rendertext.lua | 4 ++++ frontend/ui/widget/container/inputcontainer.lua | 4 ++++ frontend/ui/widget/container/widgetcontainer.lua | 4 ++++ platform/android/luajit-launcher | 2 +- 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/frontend/cache.lua b/frontend/cache.lua index 099696687..6366c9ce9 100644 --- a/frontend/cache.lua +++ b/frontend/cache.lua @@ -6,6 +6,10 @@ local lfs = require("libs/libkoreader-lfs") local DataStorage = require("datastorage") local DEBUG = require("dbg") +if require("device"):isAndroid() then + require("jit").off(true, true) +end + local function calcFreeMem() local meminfo = io.open("/proc/meminfo", "r") local freemem = 0 diff --git a/frontend/ui/rendertext.lua b/frontend/ui/rendertext.lua index 13674f451..773de8d9d 100644 --- a/frontend/ui/rendertext.lua +++ b/frontend/ui/rendertext.lua @@ -8,6 +8,10 @@ local CacheItem = require("cacheitem") local BlitBuffer = require("ffi/blitbuffer") local DEBUG = require("dbg") +if require("device"):isAndroid() then + require("jit").off(true, true) +end + --[[ @TODO: all these functions should probably be methods on Face objects ]]-- diff --git a/frontend/ui/widget/container/inputcontainer.lua b/frontend/ui/widget/container/inputcontainer.lua index f44a9fa60..615fcc39c 100644 --- a/frontend/ui/widget/container/inputcontainer.lua +++ b/frontend/ui/widget/container/inputcontainer.lua @@ -5,6 +5,10 @@ local Geom = require("ui/geometry") local Event = require("ui/event") local _ = require("gettext") +if require("device"):isAndroid() then + require("jit").off(true, true) +end + --[[ an InputContainer is an WidgetContainer that handles input events diff --git a/frontend/ui/widget/container/widgetcontainer.lua b/frontend/ui/widget/container/widgetcontainer.lua index e99132176..88a6068d2 100644 --- a/frontend/ui/widget/container/widgetcontainer.lua +++ b/frontend/ui/widget/container/widgetcontainer.lua @@ -1,6 +1,10 @@ local Geom = require("ui/geometry") local Widget = require("ui/widget/widget") +if require("device"):isAndroid() then + require("jit").off(true, true) +end + --[[ WidgetContainer is a container for another Widget --]] diff --git a/platform/android/luajit-launcher b/platform/android/luajit-launcher index caca2fd84..e3560e777 160000 --- a/platform/android/luajit-launcher +++ b/platform/android/luajit-launcher @@ -1 +1 @@ -Subproject commit caca2fd844d90a4828f60c7bb1003702d4936472 +Subproject commit e3560e777558efbb1dc913250024afa7ecb40868