diff options
author | Nicolas Roard <nicolasroard@google.com> | 2011-11-14 09:48:20 -0800 |
---|---|---|
committer | Nicolas Roard <nicolasroard@google.com> | 2011-11-14 11:47:23 -0800 |
commit | 4c64d282bac19cea4612c86ed79803ad09abb5fb (patch) | |
tree | 9ba6ac3c52359b0c859c01b2e35530493836ddbc /Source/WebCore | |
parent | 7c2e38b61270efe55f065d765228ace66b54f169 (diff) | |
download | external_webkit-4c64d282bac19cea4612c86ed79803ad09abb5fb.zip external_webkit-4c64d282bac19cea4612c86ed79803ad09abb5fb.tar.gz external_webkit-4c64d282bac19cea4612c86ed79803ad09abb5fb.tar.bz2 |
Use a single shared bitmap instead of one per BaseTile.
CL https://android-git.corp.google.com/g/#/c/148708/ uncovered an
existing memory leak on BaseTile. As we now keep the bitmap around,
this triggers an OOM.
We still need to track down the BaseTile leak, but at least with
this CL we won't OOM (and it's also using less memory...)
bug:5613031
Change-Id: Iac56d3b5c408b5e3e87c0f621e227bd3f4e37c3d
Diffstat (limited to 'Source/WebCore')
-rw-r--r-- | Source/WebCore/platform/graphics/android/RasterRenderer.cpp | 23 | ||||
-rw-r--r-- | Source/WebCore/platform/graphics/android/RasterRenderer.h | 2 |
2 files changed, 15 insertions, 10 deletions
diff --git a/Source/WebCore/platform/graphics/android/RasterRenderer.cpp b/Source/WebCore/platform/graphics/android/RasterRenderer.cpp index 8bf6fcc..0c92de4 100644 --- a/Source/WebCore/platform/graphics/android/RasterRenderer.cpp +++ b/Source/WebCore/platform/graphics/android/RasterRenderer.cpp @@ -65,15 +65,20 @@ static const String TAGS[] = { TAG_UPDATE_TEXTURE, }; +SkBitmap* RasterRenderer::g_bitmap = 0; + RasterRenderer::RasterRenderer() : BaseRenderer(BaseRenderer::Raster) { #ifdef DEBUG_COUNT ClassTracker::instance()->increment("RasterRenderer"); #endif - m_bitmap.setConfig(SkBitmap::kARGB_8888_Config, - TilesManager::instance()->tileWidth(), - TilesManager::instance()->tileHeight()); - m_bitmap.allocPixels(); + if (!g_bitmap) { + g_bitmap = new SkBitmap(); + g_bitmap->setConfig(SkBitmap::kARGB_8888_Config, + TilesManager::instance()->tileWidth(), + TilesManager::instance()->tileHeight()); + g_bitmap->allocPixels(); + } } RasterRenderer::~RasterRenderer() @@ -89,14 +94,14 @@ void RasterRenderer::setupCanvas(const TileRenderInfo& renderInfo, SkCanvas* can m_perfMon.start(TAG_CREATE_BITMAP); if (renderInfo.baseTile->isLayerTile()) { - m_bitmap.setIsOpaque(false); - m_bitmap.eraseARGB(0, 0, 0, 0); + g_bitmap->setIsOpaque(false); + g_bitmap->eraseARGB(0, 0, 0, 0); } else { - m_bitmap.setIsOpaque(true); - m_bitmap.eraseARGB(255, 255, 255, 255); + g_bitmap->setIsOpaque(true); + g_bitmap->eraseARGB(255, 255, 255, 255); } - SkDevice* device = new SkDevice(NULL, m_bitmap, false); + SkDevice* device = new SkDevice(NULL, *g_bitmap, false); if (renderInfo.measurePerf) { m_perfMon.stop(TAG_CREATE_BITMAP); diff --git a/Source/WebCore/platform/graphics/android/RasterRenderer.h b/Source/WebCore/platform/graphics/android/RasterRenderer.h index 69dfaf8..96b3f58 100644 --- a/Source/WebCore/platform/graphics/android/RasterRenderer.h +++ b/Source/WebCore/platform/graphics/android/RasterRenderer.h @@ -52,7 +52,7 @@ protected: virtual const String* getPerformanceTags(int& tagCount); private: - SkBitmap m_bitmap; + static SkBitmap* g_bitmap; }; |