diff options
author | John Reck <jreck@google.com> | 2011-10-04 16:04:01 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2011-10-04 16:04:01 -0700 |
commit | 2c1def4fa6e745a5f5e8d1cafd7b7f49ec571e1d (patch) | |
tree | bc68f616455c0289b626bacb644464de717e4c05 /Source/WebKit/android/jni/ViewStateSerializer.cpp | |
parent | 834546469c79df0516956f90f5e0a9100ba1fcd5 (diff) | |
download | external_webkit-2c1def4fa6e745a5f5e8d1cafd7b7f49ec571e1d.zip external_webkit-2c1def4fa6e745a5f5e8d1cafd7b7f49ec571e1d.tar.gz external_webkit-2c1def4fa6e745a5f5e8d1cafd7b7f49ec571e1d.tar.bz2 |
Remove m_contentsImage usage
Bug: 5410522
Change-Id: Id8457715665dbd51761900011beba57b7f634fff
Diffstat (limited to 'Source/WebKit/android/jni/ViewStateSerializer.cpp')
-rw-r--r-- | Source/WebKit/android/jni/ViewStateSerializer.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/Source/WebKit/android/jni/ViewStateSerializer.cpp b/Source/WebKit/android/jni/ViewStateSerializer.cpp index b3556c3..c896637 100644 --- a/Source/WebKit/android/jni/ViewStateSerializer.cpp +++ b/Source/WebKit/android/jni/ViewStateSerializer.cpp @@ -32,6 +32,7 @@ #include "PictureSet.h" #include "ScrollableLayerAndroid.h" #include "SkPicture.h" +#include "TilesManager.h" #include <JNIUtility.h> #include <JNIHelp.h> @@ -109,6 +110,11 @@ static BaseLayerAndroid* nativeDeserializeViewState(JNIEnv* env, jobject, jobjec if (childLayer) layer->addChild(childLayer); } + // Now double back and delete any imageRefs + for (int i = 0; i < layer->countChildren(); i++) { + LayerAndroid* childLayer = static_cast<LayerAndroid*>(layer->getChild(i)); + cleanupImageRefs(childLayer); + } delete stream; return layer; } @@ -290,12 +296,15 @@ void serializeLayer(LayerAndroid* layer, SkWStream* stream) stream->writeBool(layer->m_preserves3D); stream->writeScalar(layer->m_anchorPointZ); stream->writeScalar(layer->m_drawOpacity); - bool hasContentsImage = layer->m_contentsImage != 0; + bool hasContentsImage = layer->m_imageRef != 0; stream->writeBool(hasContentsImage); if (hasContentsImage) { SkFlattenableWriteBuffer buffer(1024); buffer.setFlags(SkFlattenableWriteBuffer::kCrossProcess_Flag); - layer->m_contentsImage->flatten(buffer); + ImageTexture* imagetexture = + TilesManager::instance()->getTextureForImage(layer->m_imageRef, false); + if (imagetexture && imagetexture->bitmap()) + imagetexture->bitmap()->flatten(buffer); stream->write32(buffer.size()); buffer.writeToStream(stream); } @@ -374,8 +383,12 @@ LayerAndroid* deserializeLayer(SkStream* stream) SkAutoMalloc storage(size); stream->read(storage.get(), size); SkFlattenableReadBuffer buffer(storage.get(), size); - layer->m_contentsImage = new SkBitmap(); - layer->m_contentsImage->unflatten(buffer); + SkBitmap contentsImage; + contentsImage.unflatten(buffer); + SkBitmapRef* imageRef = new SkBitmapRef(contentsImage); + layer->setContentsImage(imageRef); + // We delay deleting the imageRef until after deserialization to make + // sure we have unique keys } bool hasRecordingPicture = stream->readBool(); if (hasRecordingPicture) { @@ -404,6 +417,17 @@ LayerAndroid* deserializeLayer(SkStream* stream) return layer; } +void cleanupImageRefs(LayerAndroid* layer) +{ + if (!layer) + return; + int count = layer->countChildren(); + for (int i = 0; i < count; i++) + cleanupImageRefs(layer->getChild(i)); + if (layer->m_imageRef) + delete layer->m_imageRef; +} + /* * JNI registration */ |