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

Side by Side Diff: cc/playback/display_item_list.cc

Issue 1982893002: [blimp] Add SkPicture caching support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments from vmpstr, including adding //cc/blimp Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « cc/playback/display_item_list.h ('k') | cc/playback/display_item_list_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/playback/display_item_list.h" 5 #include "cc/playback/display_item_list.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 10
(...skipping 11 matching lines...) Expand all
22 #include "cc/playback/largest_display_item.h" 22 #include "cc/playback/largest_display_item.h"
23 #include "cc/proto/display_item.pb.h" 23 #include "cc/proto/display_item.pb.h"
24 #include "cc/proto/gfx_conversions.h" 24 #include "cc/proto/gfx_conversions.h"
25 #include "third_party/skia/include/core/SkCanvas.h" 25 #include "third_party/skia/include/core/SkCanvas.h"
26 #include "third_party/skia/include/core/SkPictureRecorder.h" 26 #include "third_party/skia/include/core/SkPictureRecorder.h"
27 #include "third_party/skia/include/utils/SkPictureUtils.h" 27 #include "third_party/skia/include/utils/SkPictureUtils.h"
28 #include "ui/gfx/geometry/rect.h" 28 #include "ui/gfx/geometry/rect.h"
29 #include "ui/gfx/skia_util.h" 29 #include "ui/gfx/skia_util.h"
30 30
31 namespace cc { 31 namespace cc {
32 class ImageSerializationProcessor;
33 32
34 namespace { 33 namespace {
35 34
36 // We don't perform per-layer solid color analysis when there are too many skia 35 // We don't perform per-layer solid color analysis when there are too many skia
37 // operations. 36 // operations.
38 const int kOpCountThatIsOkToAnalyze = 10; 37 const int kOpCountThatIsOkToAnalyze = 10;
39 38
40 bool DisplayItemsTracingEnabled() { 39 bool DisplayItemsTracingEnabled() {
41 bool tracing_enabled; 40 bool tracing_enabled;
42 TRACE_EVENT_CATEGORY_GROUP_ENABLED( 41 TRACE_EVENT_CATEGORY_GROUP_ENABLED(
43 TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items"), &tracing_enabled); 42 TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items"), &tracing_enabled);
44 return tracing_enabled; 43 return tracing_enabled;
45 } 44 }
46 45
47 const int kDefaultNumDisplayItemsToReserve = 100; 46 const int kDefaultNumDisplayItemsToReserve = 100;
48 47
49 } // namespace 48 } // namespace
50 49
51 scoped_refptr<DisplayItemList> DisplayItemList::Create( 50 scoped_refptr<DisplayItemList> DisplayItemList::Create(
52 const gfx::Rect& layer_rect, 51 const gfx::Rect& layer_rect,
53 const DisplayItemListSettings& settings) { 52 const DisplayItemListSettings& settings) {
54 return make_scoped_refptr(new DisplayItemList( 53 return make_scoped_refptr(new DisplayItemList(
55 layer_rect, settings, 54 layer_rect, settings,
56 !settings.use_cached_picture || DisplayItemsTracingEnabled())); 55 !settings.use_cached_picture || DisplayItemsTracingEnabled()));
57 } 56 }
58 57
59 scoped_refptr<DisplayItemList> DisplayItemList::CreateFromProto( 58 scoped_refptr<DisplayItemList> DisplayItemList::CreateFromProto(
60 const proto::DisplayItemList& proto, 59 const proto::DisplayItemList& proto,
61 ImageSerializationProcessor* image_serialization_processor) { 60 ClientPictureCache* client_picture_cache,
61 std::vector<uint32_t>* used_engine_picture_ids) {
62 gfx::Rect layer_rect = ProtoToRect(proto.layer_rect()); 62 gfx::Rect layer_rect = ProtoToRect(proto.layer_rect());
63 scoped_refptr<DisplayItemList> list = 63 scoped_refptr<DisplayItemList> list =
64 DisplayItemList::Create(ProtoToRect(proto.layer_rect()), 64 DisplayItemList::Create(ProtoToRect(proto.layer_rect()),
65 DisplayItemListSettings(proto.settings())); 65 DisplayItemListSettings(proto.settings()));
66 66
67 for (int i = 0; i < proto.items_size(); i++) { 67 for (int i = 0; i < proto.items_size(); i++) {
68 const proto::DisplayItem& item_proto = proto.items(i); 68 const proto::DisplayItem& item_proto = proto.items(i);
69 DisplayItemProtoFactory::AllocateAndConstruct( 69 DisplayItemProtoFactory::AllocateAndConstruct(
70 layer_rect, list.get(), item_proto, image_serialization_processor); 70 layer_rect, list.get(), item_proto, client_picture_cache,
71 used_engine_picture_ids);
71 } 72 }
72 73
73 list->Finalize(); 74 list->Finalize();
74 75
75 return list; 76 return list;
76 } 77 }
77 78
78 DisplayItemList::DisplayItemList(gfx::Rect layer_rect, 79 DisplayItemList::DisplayItemList(gfx::Rect layer_rect,
79 const DisplayItemListSettings& settings, 80 const DisplayItemListSettings& settings,
80 bool retain_individual_display_items) 81 bool retain_individual_display_items)
(...skipping 12 matching lines...) Expand all
93 SkCanvas* canvas = recorder_->beginRecording( 94 SkCanvas* canvas = recorder_->beginRecording(
94 layer_rect_.width(), layer_rect_.height(), &factory); 95 layer_rect_.width(), layer_rect_.height(), &factory);
95 canvas->translate(-layer_rect_.x(), -layer_rect_.y()); 96 canvas->translate(-layer_rect_.x(), -layer_rect_.y());
96 canvas->clipRect(gfx::RectToSkRect(layer_rect_)); 97 canvas->clipRect(gfx::RectToSkRect(layer_rect_));
97 } 98 }
98 } 99 }
99 100
100 DisplayItemList::~DisplayItemList() { 101 DisplayItemList::~DisplayItemList() {
101 } 102 }
102 103
103 void DisplayItemList::ToProtobuf( 104 void DisplayItemList::ToProtobuf(proto::DisplayItemList* proto) {
104 proto::DisplayItemList* proto,
105 ImageSerializationProcessor* image_serialization_processor) {
106 // The flattened SkPicture approach is going away, and the proto 105 // The flattened SkPicture approach is going away, and the proto
107 // doesn't currently support serializing that flattened picture. 106 // doesn't currently support serializing that flattened picture.
108 DCHECK(retain_individual_display_items_); 107 DCHECK(retain_individual_display_items_);
109 108
110 RectToProto(layer_rect_, proto->mutable_layer_rect()); 109 RectToProto(layer_rect_, proto->mutable_layer_rect());
111 settings_.ToProtobuf(proto->mutable_settings()); 110 settings_.ToProtobuf(proto->mutable_settings());
112 111
113 DCHECK_EQ(0, proto->items_size()); 112 DCHECK_EQ(0, proto->items_size());
114 for (const auto& item : items_) 113 for (const auto& item : items_)
115 item.ToProtobuf(proto->add_items(), image_serialization_processor); 114 item.ToProtobuf(proto->add_items());
116 } 115 }
117 116
118 void DisplayItemList::Raster(SkCanvas* canvas, 117 void DisplayItemList::Raster(SkCanvas* canvas,
119 SkPicture::AbortCallback* callback, 118 SkPicture::AbortCallback* callback,
120 const gfx::Rect& canvas_target_playback_rect, 119 const gfx::Rect& canvas_target_playback_rect,
121 float contents_scale) const { 120 float contents_scale) const {
122 canvas->save(); 121 canvas->save();
123 122
124 if (!canvas_target_playback_rect.IsEmpty()) { 123 if (!canvas_target_playback_rect.IsEmpty()) {
125 // canvas_target_playback_rect is specified in device space. We can't 124 // canvas_target_playback_rect is specified in device space. We can't
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 } 316 }
318 317
319 void DisplayItemList::GetDiscardableImagesInRect( 318 void DisplayItemList::GetDiscardableImagesInRect(
320 const gfx::Rect& rect, 319 const gfx::Rect& rect,
321 float raster_scale, 320 float raster_scale,
322 std::vector<DrawImage>* images) { 321 std::vector<DrawImage>* images) {
323 image_map_.GetDiscardableImagesInRect(rect, raster_scale, images); 322 image_map_.GetDiscardableImagesInRect(rect, raster_scale, images);
324 } 323 }
325 324
326 } // namespace cc 325 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/display_item_list.h ('k') | cc/playback/display_item_list_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698