summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/jni
diff options
context:
space:
mode:
authorNicolas Roard <nicolasroard@google.com>2011-11-23 14:23:24 -0800
committerNicolas Roard <nicolasroard@google.com>2011-11-30 18:33:21 -0800
commit54e75f0875a8376c1119b019431921bc58295b79 (patch)
treec0863d915fdfc7651c93e679f10638c0164e6505 /Source/WebKit/android/jni
parented03bc998bd1c1a64a99ee631f3bc31466590bf1 (diff)
downloadexternal_webkit-54e75f0875a8376c1119b019431921bc58295b79.zip
external_webkit-54e75f0875a8376c1119b019431921bc58295b79.tar.gz
external_webkit-54e75f0875a8376c1119b019431921bc58295b79.tar.bz2
Fix image layer codepath
- asynchronous loading - support for tiled content using TiledTexture - fix repaint/duplication bugs - share same textures as layers - disambiguate between images by computing a CRC code - added better debugging in TilesManager/ClassTracker to track memory usage bug:5661120 bug:5572134 bug:5521718 Change-Id: Id422fb991d6233bbe4dc6e5c3c7409468b7dca98
Diffstat (limited to 'Source/WebKit/android/jni')
-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
*/