summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/jni/ViewStateSerializer.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2011-10-04 16:04:01 -0700
committerJohn Reck <jreck@google.com>2011-10-04 16:04:01 -0700
commit2c1def4fa6e745a5f5e8d1cafd7b7f49ec571e1d (patch)
treebc68f616455c0289b626bacb644464de717e4c05 /Source/WebKit/android/jni/ViewStateSerializer.cpp
parent834546469c79df0516956f90f5e0a9100ba1fcd5 (diff)
downloadexternal_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.cpp32
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
*/