summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/PaintedSurface.cpp
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2011-08-11 11:51:35 -0700
committerNicolas Roard <nicolasroard@google.com>2011-08-11 11:51:35 -0700
commit1fe3cbe7473b7d14fc68a27fe22ed61bd4b3d707 (patch)
treed6d027fedf2d8b78bed27c087b6a01b16ed583bb /Source/WebCore/platform/graphics/android/PaintedSurface.cpp
parent4930744a9233f8d2518ca0ed96956a5b603c7b15 (diff)
downloadexternal_webkit-1fe3cbe7473b7d14fc68a27fe22ed61bd4b3d707.zip
external_webkit-1fe3cbe7473b7d14fc68a27fe22ed61bd4b3d707.tar.gz
external_webkit-1fe3cbe7473b7d14fc68a27fe22ed61bd4b3d707.tar.bz2
Fix crash issue with drawing
retain layers as needed bug:4177062 Change-Id: Ifd8d493c8ed3b13eedece260136be873f6701fed
Diffstat (limited to 'Source/WebCore/platform/graphics/android/PaintedSurface.cpp')
-rw-r--r--Source/WebCore/platform/graphics/android/PaintedSurface.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/Source/WebCore/platform/graphics/android/PaintedSurface.cpp b/Source/WebCore/platform/graphics/android/PaintedSurface.cpp
index fe7044c..fd4475b 100644
--- a/Source/WebCore/platform/graphics/android/PaintedSurface.cpp
+++ b/Source/WebCore/platform/graphics/android/PaintedSurface.cpp
@@ -60,6 +60,7 @@ void PaintedSurface::removeLayer(LayerAndroid* layer)
android::Mutex::Autolock lock(m_layerLock);
if (m_layer != layer)
return;
+ SkSafeUnref(m_layer);
m_layer = 0;
}
@@ -72,6 +73,8 @@ void PaintedSurface::replaceLayer(LayerAndroid* layer)
if (m_layer && layer->uniqueId() != m_layer->uniqueId())
return;
+ SkSafeRef(layer);
+ SkSafeUnref(m_layer);
m_layer = layer;
}
@@ -140,6 +143,7 @@ bool PaintedSurface::paint(BaseTile* tile, SkCanvas* canvas, unsigned int* pictu
{
m_layerLock.lock();
LayerAndroid* layer = m_layer;
+ SkSafeRef(layer);
m_layerLock.unlock();
if (!layer)
@@ -148,6 +152,7 @@ bool PaintedSurface::paint(BaseTile* tile, SkCanvas* canvas, unsigned int* pictu
layer->contentDraw(canvas);
m_pictureUsed = layer->pictureUsed();
*pictureUsed = m_pictureUsed;
+ SkSafeUnref(layer);
return true;
}
@@ -156,10 +161,13 @@ void PaintedSurface::paintExtra(SkCanvas* canvas)
{
m_layerLock.lock();
LayerAndroid* layer = m_layer;
+ SkSafeRef(layer);
m_layerLock.unlock();
if (layer)
layer->extraDraw(canvas);
+
+ SkSafeUnref(layer);
}
float PaintedSurface::opacity() {