Chromium Code Reviews| Index: cc/playback/drawing_display_item.cc |
| diff --git a/cc/playback/drawing_display_item.cc b/cc/playback/drawing_display_item.cc |
| index 8bf18b3efdc1cff6264354fce62f565c30c88098..747aba090d09f1ea1af5a0b3283374e8b57ebd89 100644 |
| --- a/cc/playback/drawing_display_item.cc |
| +++ b/cc/playback/drawing_display_item.cc |
| @@ -15,6 +15,7 @@ |
| #include "cc/debug/picture_debug_util.h" |
| #include "cc/proto/display_item.pb.h" |
| #include "cc/proto/image_serialization_processor.h" |
| +#include "cc/proto/picture_cache.h" |
| #include "third_party/skia/include/core/SkCanvas.h" |
| #include "third_party/skia/include/core/SkData.h" |
| #include "third_party/skia/include/core/SkMatrix.h" |
| @@ -33,17 +34,18 @@ DrawingDisplayItem::DrawingDisplayItem(sk_sp<const SkPicture> picture) { |
| DrawingDisplayItem::DrawingDisplayItem( |
| const proto::DisplayItem& proto, |
| - ImageSerializationProcessor* image_serialization_processor) { |
| + ClientPictureCache* client_picture_cache) { |
| DCHECK_EQ(proto::DisplayItem::Type_Drawing, proto.type()); |
| + DCHECK(client_picture_cache); |
| - sk_sp<SkPicture> picture; |
| const proto::DrawingDisplayItem& details = proto.drawing_item(); |
| - if (details.has_picture()) { |
| - SkMemoryStream stream(details.picture().data(), details.picture().size()); |
| + DCHECK(details.has_id()); |
| + const proto::SkPictureID& sk_picture_id = details.id(); |
| + DCHECK(sk_picture_id.has_unique_id()); |
| - picture = SkPicture::MakeFromStream( |
| - &stream, image_serialization_processor->GetPixelDeserializer()); |
| - } |
| + uint32_t unique_id = sk_picture_id.unique_id(); |
| + sk_sp<const SkPicture> picture = client_picture_cache->GetPicture(unique_id); |
| + DCHECK(picture); |
| SetNew(std::move(picture)); |
| } |
| @@ -59,26 +61,27 @@ void DrawingDisplayItem::SetNew(sk_sp<const SkPicture> picture) { |
| picture_ = std::move(picture); |
| } |
| -void DrawingDisplayItem::ToProtobuf( |
| - proto::DisplayItem* proto, |
| - ImageSerializationProcessor* image_serialization_processor) const { |
| +void DrawingDisplayItem::ToProtobuf(proto::DisplayItem* proto) const { |
| TRACE_EVENT0("cc.remote", "DrawingDisplayItem::ToProtobuf"); |
| proto->set_type(proto::DisplayItem::Type_Drawing); |
| - proto::DrawingDisplayItem* details = proto->mutable_drawing_item(); |
| - |
| - // Just use skia's serialize() method for now. |
| - if (picture_) { |
| - TRACE_EVENT0("cc.remote", |
| - "DrawingDisplayItem::ToProtobuf SkPicture::Serialize"); |
| - SkDynamicMemoryWStream stream; |
| - picture_->serialize(&stream, |
| - image_serialization_processor->GetPixelSerializer()); |
| - if (stream.bytesWritten() > 0) { |
| - SkAutoDataUnref data(stream.copyToData()); |
| - details->set_picture(data->data(), data->size()); |
| - } |
| - } |
| + if (!picture_) |
| + return; |
| + |
| + proto->mutable_drawing_item()->mutable_id()->set_unique_id( |
| + picture_->uniqueID()); |
| +} |
| + |
| +void DrawingDisplayItem::MarkForRegistrationEngine( |
| + EnginePictureCache* engine_picture_cache) const { |
| + if (picture_ && engine_picture_cache) |
|
vmpstr
2016/06/16 22:09:59
Maybe just expose picture_?
nyquist
2016/06/24 11:11:14
Done.
|
| + engine_picture_cache->MarkPictureForRegistration(picture_.get()); |
| +} |
| + |
| +void DrawingDisplayItem::MarkForUnregistrationEngine( |
| + EnginePictureCache* engine_picture_cache) const { |
| + if (picture_ && engine_picture_cache) |
| + engine_picture_cache->MarkPictureForUnregistration(picture_.get()); |
| } |
| void DrawingDisplayItem::Raster(SkCanvas* canvas, |