From 7d4f6a89d7e2c5d13b7d630d6348950044a5465e Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 31 Mar 2017 17:10:34 -0700 Subject: Refcount CPDF_Image all the time. Remove the old externally-counted CPDF_CountedImage type. Change-Id: Ia0b288586272da3f2daf7dfc153f08e62794321a Reviewed-on: https://pdfium-review.googlesource.com/3553 Reviewed-by: Lei Zhang Commit-Queue: Lei Zhang --- core/fpdfapi/page/cpdf_docpagedata.cpp | 43 +++++++--------------------------- 1 file changed, 9 insertions(+), 34 deletions(-) (limited to 'core/fpdfapi/page/cpdf_docpagedata.cpp') diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp index af2618286e..5789a531f0 100644 --- a/core/fpdfapi/page/cpdf_docpagedata.cpp +++ b/core/fpdfapi/page/cpdf_docpagedata.cpp @@ -113,18 +113,7 @@ void CPDF_DocPageData::Clear(bool bForceRelease) { } } - for (auto it = m_ImageMap.begin(); it != m_ImageMap.end();) { - auto curr_it = it++; - CPDF_CountedImage* pCountedImage = curr_it->second; - if (!pCountedImage->get()) - continue; - - if (bForceRelease || pCountedImage->use_count() < 2) { - delete pCountedImage->get(); - delete pCountedImage; - m_ImageMap.erase(curr_it); - } - } + m_ImageMap.clear(); } CPDF_Font* CPDF_DocPageData::GetFont(CPDF_Dictionary* pFontDict) { @@ -398,36 +387,22 @@ void CPDF_DocPageData::ReleasePattern(const CPDF_Object* pPatternObj) { pPattern->clear(); } -CPDF_Image* CPDF_DocPageData::GetImage(uint32_t dwStreamObjNum) { +CFX_RetainPtr CPDF_DocPageData::GetImage(uint32_t dwStreamObjNum) { ASSERT(dwStreamObjNum); auto it = m_ImageMap.find(dwStreamObjNum); if (it != m_ImageMap.end()) - return it->second->AddRef(); + return it->second; - CPDF_CountedImage* pCountedImage = new CPDF_CountedImage( - pdfium::MakeUnique(m_pPDFDoc, dwStreamObjNum)); - m_ImageMap[dwStreamObjNum] = pCountedImage; - return pCountedImage->AddRef(); + auto pImage = pdfium::MakeRetain(m_pPDFDoc, dwStreamObjNum); + m_ImageMap[dwStreamObjNum] = pImage; + return pImage; } -void CPDF_DocPageData::ReleaseImage(uint32_t dwStreamObjNum) { +void CPDF_DocPageData::MaybePurgeImage(uint32_t dwStreamObjNum) { ASSERT(dwStreamObjNum); auto it = m_ImageMap.find(dwStreamObjNum); - if (it == m_ImageMap.end()) - return; - - CPDF_CountedImage* pCountedImage = it->second; - if (!pCountedImage) - return; - - pCountedImage->RemoveRef(); - if (pCountedImage->use_count() > 1) - return; - - // We have item only in m_ImageMap cache. Clean it. - delete pCountedImage->get(); - delete pCountedImage; - m_ImageMap.erase(it); + if (it != m_ImageMap.end() && it->second->HasOneRef()) + m_ImageMap.erase(it); } CPDF_IccProfile* CPDF_DocPageData::GetIccProfile( -- cgit v1.2.3