From c2726a8f623eeacf596c1a22dff0a32fdb0f61db Mon Sep 17 00:00:00 2001 From: chrox Date: Mon, 27 Oct 2014 22:03:20 +0800 Subject: [PATCH] save two blitbuffer memory allocations for crengine on each page turn One for drawbuffer at CreDocument:drawCurrentView and another for resizing of drawBuf at cre.drawCurrentPage. --- base | 2 +- frontend/document/credocument.lua | 13 +++++++++---- frontend/document/document.lua | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/base b/base index 2d733e38d..2a2c0f3c5 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 2d733e38de74b54dd6ace933a94cbc09b40fdd4d +Subproject commit 2a2c0f3c59f09d4deaeea554bb29ccb21a586da5 diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index bae09b6ad..7cbeca101 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -212,10 +212,15 @@ function CreDocument:getScreenBoxesFromPositions(pos0, pos1) end function CreDocument:drawCurrentView(target, x, y, rect, pos) - tile_bb = Blitbuffer.new(rect.w, rect.h) - self._document:drawCurrentPage(tile_bb) - target:blitFrom(tile_bb, x, y, 0, 0, rect.w, rect.h) - tile_bb:free() + if self.buffer and (self.buffer.w ~= rect.w or self.buffer.h ~= rect.h) then + self.buffer:free() + self.buffer = nil + end + if not self.buffer then + self.buffer = Blitbuffer.new(rect.w, rect.h) + end + self._document:drawCurrentPage(self.buffer) + target:blitFrom(self.buffer, x, y, 0, 0, rect.w, rect.h) end function CreDocument:drawCurrentViewByPos(target, x, y, rect, pos) diff --git a/frontend/document/document.lua b/frontend/document/document.lua index 41649fb95..535e09893 100644 --- a/frontend/document/document.lua +++ b/frontend/document/document.lua @@ -237,7 +237,7 @@ function Document:renderPage(pageno, rect, zoom, rotation, gamma, render_mode) -- prepare cache item with contained blitbuffer local tile = TileCacheItem:new{ - size = size.w * size.h / 2 + 64, -- estimation + size = size.w * size.h + 64, -- estimation excerpt = size, pageno = pageno, bb = Blitbuffer.new(size.w, size.h)