mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Ought to be faster than our naive array-based approach. Especially for the glyph cache, which has a solid amount of elements, and is mostly cache hits. (There are few things worse for performance in Lua than table.remove @ !tail and table.insert @ !tail, which this was full of :/). DocCache: New module that's now an actual Cache instance instead of a weird hack. Replaces "Cache" (the instance) as used across Document & co. Only Cache instance with on-disk persistence. ImageCache: Update to new Cache. GlyphCache: Update to new Cache. Also, actually free glyph bbs on eviction.
25 lines
870 B
Lua
25 lines
870 B
Lua
--[[
|
|
"Global" LRU cache used by Document & friends.
|
|
--]]
|
|
|
|
local Cache = require("cache")
|
|
local CanvasContext = require("document/canvascontext")
|
|
local DataStorage = require("datastorage")
|
|
|
|
local function calcCacheMemSize()
|
|
local min = DGLOBAL_CACHE_SIZE_MINIMUM
|
|
local max = DGLOBAL_CACHE_SIZE_MAXIMUM
|
|
local calc = Cache:_calcFreeMem() * (DGLOBAL_CACHE_FREE_PROPORTION or 0)
|
|
return math.min(max, math.max(min, calc))
|
|
end
|
|
|
|
local DocCache = Cache:new{
|
|
size = calcCacheMemSize(),
|
|
-- Average item size is a screen's worth of bitmap, mixed with a few much smaller tables (pgdim, pglinks, etc.), hence the / 3
|
|
avg_itemsize = math.floor(CanvasContext:getWidth() * CanvasContext:getHeight() * (CanvasContext.is_color_rendering_enabled and 4 or 1) / 3),
|
|
disk_cache = true,
|
|
cache_path = DataStorage:getDataDir() .. "/cache/",
|
|
}
|
|
|
|
return DocCache
|