diff --git a/frontend/document/document.lua b/frontend/document/document.lua index c77de744d..a0c5cd2c7 100644 --- a/frontend/document/document.lua +++ b/frontend/document/document.lua @@ -228,11 +228,16 @@ end function Document:renderPage(pageno, rect, zoom, rotation, gamma, render_mode) local hash = self:getFullPageHash(pageno, zoom, rotation, gamma, render_mode) + local hash_excerpt = hash.."|"..tostring(rect) + + local tile = Cache:check(hash, TileCacheItem) or Cache:check(hash_excerpt) + if tile then return tile end + local page_size = self:getPageDimensions(pageno, zoom, rotation) -- this will be the size we actually render local size = page_size -- we prefer to render the full page, if it fits into cache - if not Cache:willAccept(size.w * size.h / 2) then + if not Cache:willAccept(size.w * size.h + 64) then -- whole page won't fit into cache DEBUG("rendering only part of the page") -- TODO: figure out how to better segment the page @@ -242,7 +247,7 @@ function Document:renderPage(pageno, rect, zoom, rotation, gamma, render_mode) return end -- only render required part - hash = self:getFullPageHash(pageno, zoom, rotation, gamma, render_mode).."|"..tostring(rect) + hash = hash_excerpt size = rect end @@ -286,11 +291,8 @@ end -- a hint for the cache engine to paint a full page to the cache -- TODO: this should trigger a background operation function Document:hintPage(pageno, zoom, rotation, gamma, render_mode) - local hash_full_page = self:getFullPageHash(pageno, zoom, rotation, gamma, render_mode) - if not Cache:check(hash_full_page, TileCacheItem) then - DEBUG("hinting page", pageno) - self:renderPage(pageno, nil, zoom, rotation, gamma, render_mode) - end + DEBUG("hinting page", pageno) + self:renderPage(pageno, nil, zoom, rotation, gamma, render_mode) end --[[ @@ -302,16 +304,7 @@ Draw page content to blitbuffer. @rect: visible_area inside document page --]] function Document:drawPage(target, x, y, rect, pageno, zoom, rotation, gamma, render_mode) - local hash_full_page = self:getFullPageHash(pageno, zoom, rotation, gamma, render_mode) - local hash_excerpt = hash_full_page.."|"..tostring(rect) - local tile = Cache:check(hash_full_page, TileCacheItem) - if not tile then - tile = Cache:check(hash_excerpt) - if not tile then - DEBUG("rendering") - tile = self:renderPage(pageno, rect, zoom, rotation, gamma, render_mode) - end - end + local tile = self:renderPage(pageno, rect, zoom, rotation, gamma, render_mode) DEBUG("now painting", tile, rect) target:blitFrom(tile.bb, x, y,