From 9e4fca796e2711fcd311b1203b75fdd7f737c9b5 Mon Sep 17 00:00:00 2001 From: npm Date: Wed, 23 Nov 2016 07:49:00 -0800 Subject: Avoid cloning in CPDF_ImageCacheEntry::ContinueGetCachedBitmap We are always cloning when the bitmap size is bounded by some constant, and we are always cloning the mask. Instead, just assign pointers. BUG=pdfium:633 Review-Url: https://codereview.chromium.org/2518063005 --- core/fpdfapi/render/fpdf_render_cache.cpp | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) (limited to 'core/fpdfapi/render/fpdf_render_cache.cpp') diff --git a/core/fpdfapi/render/fpdf_render_cache.cpp b/core/fpdfapi/render/fpdf_render_cache.cpp index a91d2ba8d0..9f663525ec 100644 --- a/core/fpdfapi/render/fpdf_render_cache.cpp +++ b/core/fpdfapi/render/fpdf_render_cache.cpp @@ -292,29 +292,21 @@ int CPDF_ImageCacheEntry::StartGetCachedBitmap(CPDF_Dictionary* pFormResources, ContinueGetCachedBitmap(); return 0; } + void CPDF_ImageCacheEntry::ContinueGetCachedBitmap() { m_MatteColor = ((CPDF_DIBSource*)m_pCurBitmap)->GetMatteColor(); m_pCurMask = ((CPDF_DIBSource*)m_pCurBitmap)->DetachMask(); CPDF_RenderContext* pContext = m_pRenderStatus->GetContext(); CPDF_PageRenderCache* pPageRenderCache = pContext->GetPageCache(); m_dwTimeCount = pPageRenderCache->GetTimeCount(); - if (m_pCurBitmap->GetPitch() * m_pCurBitmap->GetHeight() < - FPDF_HUGE_IMAGE_SIZE) { - m_pCachedBitmap = m_pCurBitmap->Clone(); - delete m_pCurBitmap; - m_pCurBitmap = nullptr; - } else { - m_pCachedBitmap = m_pCurBitmap; - } - if (m_pCurMask) { - m_pCachedMask = m_pCurMask->Clone(); - delete m_pCurMask; - m_pCurMask = nullptr; - } - m_pCurBitmap = m_pCachedBitmap; - m_pCurMask = m_pCachedMask; + m_pCachedBitmap = m_pCurBitmap; + if (m_pCurMask) + m_pCachedMask = m_pCurMask; + else + m_pCurMask = m_pCachedMask; CalcSize(); } + int CPDF_ImageCacheEntry::Continue(IFX_Pause* pPause) { int ret = ((CPDF_DIBSource*)m_pCurBitmap)->ContinueLoadDIBSource(pPause); if (ret == 2) { -- cgit v1.2.3