Index: cc/layers/picture_layer.cc |
diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc |
index 526c7a498e72a2b52e3eb70014116f7cd66fa74f..7eddc388fdac5d977031bab52beb3edd61e4d55d 100644 |
--- a/cc/layers/picture_layer.cc |
+++ b/cc/layers/picture_layer.cc |
@@ -179,9 +179,21 @@ void PictureLayer::LayerSpecificPropertiesToProto( |
DropRecordingSourceContentIfInvalid(); |
proto::PictureLayerProperties* picture = proto->mutable_picture(); |
- recording_source_->ToProtobuf( |
- picture->mutable_recording_source(), |
- layer_tree_host()->image_serialization_processor()); |
+ recording_source_->ToProtobuf(picture->mutable_recording_source()); |
+ |
+ // Add all SkPicture items to the picture cache. |
+ const DisplayItemList* display_list = recording_source_->GetDisplayItemList(); |
+ if (display_list) { |
+ for (auto it = display_list->begin(); it != display_list->end(); ++it) { |
+ sk_sp<const SkPicture> picture = it->GetPicture(); |
+ // Only DrawingDisplayItems have SkPictures. |
+ if (!picture) |
+ continue; |
+ |
+ layer_tree_host()->engine_picture_cache()->MarkUsed(picture.get()); |
+ } |
+ } |
+ |
RegionToProto(last_updated_invalidation_, picture->mutable_invalidation()); |
picture->set_is_mask(is_mask_); |
picture->set_nearest_neighbor(nearest_neighbor_); |
@@ -201,9 +213,14 @@ void PictureLayer::FromLayerSpecificPropertiesProto( |
if (!recording_source_) |
recording_source_.reset(new RecordingSource); |
- recording_source_->FromProtobuf( |
- picture.recording_source(), |
- layer_tree_host()->image_serialization_processor()); |
+ std::vector<uint32_t> used_engine_picture_ids; |
+ recording_source_->FromProtobuf(picture.recording_source(), |
+ layer_tree_host()->client_picture_cache(), |
+ &used_engine_picture_ids); |
+ |
+ // Inform picture cache about which SkPictures are now in use. |
+ for (uint32_t engine_picture_id : used_engine_picture_ids) |
+ layer_tree_host()->client_picture_cache()->MarkUsed(engine_picture_id); |
Region new_invalidation = RegionFromProto(picture.invalidation()); |
last_updated_invalidation_.Swap(&new_invalidation); |