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 | |
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
-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; }; |