diff options
author | Nicolas Roard <nicolasroard@google.com> | 2011-08-11 11:51:35 -0700 |
---|---|---|
committer | Nicolas Roard <nicolasroard@google.com> | 2011-08-11 11:51:35 -0700 |
commit | 1fe3cbe7473b7d14fc68a27fe22ed61bd4b3d707 (patch) | |
tree | d6d027fedf2d8b78bed27c087b6a01b16ed583bb /Source/WebCore/platform/graphics/android/PaintedSurface.cpp | |
parent | 4930744a9233f8d2518ca0ed96956a5b603c7b15 (diff) | |
download | external_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.cpp | 8 |
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() { |