summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2011-11-14 09:48:20 -0800
committerNicolas Roard <nicolasroard@google.com>2011-11-14 11:47:23 -0800
commit4c64d282bac19cea4612c86ed79803ad09abb5fb (patch)
tree9ba6ac3c52359b0c859c01b2e35530493836ddbc
parent7c2e38b61270efe55f065d765228ace66b54f169 (diff)
downloadexternal_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.cpp23
-rw-r--r--Source/WebCore/platform/graphics/android/RasterRenderer.h2
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;
};