diff options
| author | Nicolas Roard <nicolasroard@google.com> | 2011-11-23 14:23:24 -0800 |
|---|---|---|
| committer | Nicolas Roard <nicolasroard@google.com> | 2011-11-30 18:33:21 -0800 |
| commit | 54e75f0875a8376c1119b019431921bc58295b79 (patch) | |
| tree | c0863d915fdfc7651c93e679f10638c0164e6505 /Source/WebKit/android/jni | |
| parent | ed03bc998bd1c1a64a99ee631f3bc31466590bf1 (diff) | |
| download | external_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.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 */ |
