summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2011-12-01 07:43:52 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2011-12-01 07:43:52 -0800
commit931e90d171935ef706b6906c5867a51fc491a83d (patch)
tree4321841ab956b65cfe508bc824e7d0fc6eaaff15 /Source/WebKit/android
parent6dd76bd83b84be93653706342d235c4377b40e62 (diff)
parentf1a221194f2b0d5fd82d2e98ced94f0553c45986 (diff)
downloadexternal_webkit-931e90d171935ef706b6906c5867a51fc491a83d.zip
external_webkit-931e90d171935ef706b6906c5867a51fc491a83d.tar.gz
external_webkit-931e90d171935ef706b6906c5867a51fc491a83d.tar.bz2
am f1a22119: Merge "Fix image layer codepath" into ics-mr1
* commit 'f1a221194f2b0d5fd82d2e98ced94f0553c45986': Fix image layer codepath
Diffstat (limited to 'Source/WebKit/android')
-rw-r--r--Source/WebKit/android/jni/ViewStateSerializer.cpp24
1 files changed, 4 insertions, 20 deletions
diff --git a/Source/WebKit/android/jni/ViewStateSerializer.cpp b/Source/WebKit/android/jni/ViewStateSerializer.cpp
index 93f4375..6b473f5 100644
--- a/Source/WebKit/android/jni/ViewStateSerializer.cpp
+++ b/Source/WebKit/android/jni/ViewStateSerializer.cpp
@@ -111,11 +111,6 @@ 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;
}
@@ -297,15 +292,16 @@ 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_imageRef != 0;
+ bool hasContentsImage = layer->m_imageCRC != 0;
stream->writeBool(hasContentsImage);
if (hasContentsImage) {
SkFlattenableWriteBuffer buffer(1024);
buffer.setFlags(SkFlattenableWriteBuffer::kCrossProcess_Flag);
ImageTexture* imagetexture =
- ImagesManager::instance()->getTextureForImage(layer->m_imageRef, false);
+ ImagesManager::instance()->retainImage(layer->m_imageCRC);
if (imagetexture && imagetexture->bitmap())
imagetexture->bitmap()->flatten(buffer);
+ ImagesManager::instance()->releaseImage(layer->m_imageCRC);
stream->write32(buffer.size());
buffer.writeToStream(stream);
}
@@ -388,8 +384,7 @@ LayerAndroid* deserializeLayer(SkStream* stream)
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
+ delete imageRef;
}
bool hasRecordingPicture = stream->readBool();
if (hasRecordingPicture) {
@@ -418,17 +413,6 @@ 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
*/