Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(337)

Unified Diff: cc/layers/picture_layer.cc

Issue 1982893002: [blimp] Add SkPicture caching support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge origin/master Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698