Chromium Code Reviews| Index: cc/layers/picture_layer.cc |
| diff --git a/cc/layers/picture_layer.cc b/cc/layers/picture_layer.cc |
| index 526c7a498e72a2b52e3eb70014116f7cd66fa74f..04c1f6af2f00a804f254a01df8a55a334f666ef9 100644 |
| --- a/cc/layers/picture_layer.cc |
| +++ b/cc/layers/picture_layer.cc |
| @@ -179,9 +179,22 @@ 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. |
| + scoped_refptr<const DisplayItemList> display_list = |
|
vmpstr
2016/06/24 18:58:32
i think you can
const scoped_refptr<const Displa
nyquist
2016/06/24 20:31:23
Done.
|
| + 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 +214,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); |