diff options
| author | Nicolas Roard <nicolasroard@google.com> | 2011-12-01 07:43:52 -0800 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2011-12-01 07:43:52 -0800 |
| commit | 931e90d171935ef706b6906c5867a51fc491a83d (patch) | |
| tree | 4321841ab956b65cfe508bc824e7d0fc6eaaff15 /Source/WebKit/android | |
| parent | 6dd76bd83b84be93653706342d235c4377b40e62 (diff) | |
| parent | f1a221194f2b0d5fd82d2e98ced94f0553c45986 (diff) | |
| download | external_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.cpp | 24 |
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 */ |
