OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/picture_layer.h" | 5 #include "cc/layers/picture_layer.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/trace_event/trace_event.h" | 8 #include "base/trace_event/trace_event.h" |
9 #include "cc/layers/content_layer_client.h" | 9 #include "cc/layers/content_layer_client.h" |
10 #include "cc/layers/picture_layer_impl.h" | 10 #include "cc/layers/picture_layer_impl.h" |
11 #include "cc/paint/paint_record.h" | 11 #include "cc/paint/paint_record.h" |
12 #include "cc/playback/recording_source.h" | 12 #include "cc/playback/recording_source.h" |
13 #include "cc/trees/layer_tree_host.h" | 13 #include "cc/trees/layer_tree_host.h" |
14 #include "cc/trees/layer_tree_impl.h" | 14 #include "cc/trees/layer_tree_impl.h" |
15 #include "ui/gfx/geometry/rect_conversions.h" | 15 #include "ui/gfx/geometry/rect_conversions.h" |
16 | 16 |
17 namespace cc { | 17 namespace cc { |
18 | 18 |
19 PictureLayer::PictureLayerInputs::PictureLayerInputs() = default; | 19 PictureLayer::PictureLayerInputs::PictureLayerInputs() = default; |
20 | 20 |
21 PictureLayer::PictureLayerInputs::~PictureLayerInputs() = default; | 21 PictureLayer::PictureLayerInputs::~PictureLayerInputs() = default; |
22 | 22 |
23 scoped_refptr<PictureLayer> PictureLayer::Create(ContentLayerClient* client) { | 23 scoped_refptr<PictureLayer> PictureLayer::Create(ContentLayerClient* client) { |
24 return make_scoped_refptr(new PictureLayer(client)); | 24 return make_scoped_refptr(new PictureLayer(client)); |
25 } | 25 } |
26 | 26 |
27 PictureLayer::PictureLayer(ContentLayerClient* client) | 27 PictureLayer::PictureLayer(ContentLayerClient* client) |
28 : instrumentation_object_tracker_(id()), | 28 : instrumentation_object_tracker_(id()), |
29 update_source_frame_number_(-1), | 29 update_source_frame_number_(-1), |
30 is_mask_(false) { | 30 mask_type_(Layer::LayerMaskType::NOT_MASK) { |
31 picture_layer_inputs_.client = client; | 31 picture_layer_inputs_.client = client; |
32 } | 32 } |
33 | 33 |
34 PictureLayer::PictureLayer(ContentLayerClient* client, | 34 PictureLayer::PictureLayer(ContentLayerClient* client, |
35 std::unique_ptr<RecordingSource> source) | 35 std::unique_ptr<RecordingSource> source) |
36 : PictureLayer(client) { | 36 : PictureLayer(client) { |
37 recording_source_ = std::move(source); | 37 recording_source_ = std::move(source); |
38 } | 38 } |
39 | 39 |
40 PictureLayer::~PictureLayer() { | 40 PictureLayer::~PictureLayer() { |
41 } | 41 } |
42 | 42 |
43 std::unique_ptr<LayerImpl> PictureLayer::CreateLayerImpl( | 43 std::unique_ptr<LayerImpl> PictureLayer::CreateLayerImpl( |
44 LayerTreeImpl* tree_impl) { | 44 LayerTreeImpl* tree_impl) { |
45 return PictureLayerImpl::Create(tree_impl, id(), is_mask_); | 45 return PictureLayerImpl::Create(tree_impl, id(), mask_type_); |
46 } | 46 } |
47 | 47 |
48 void PictureLayer::PushPropertiesTo(LayerImpl* base_layer) { | 48 void PictureLayer::PushPropertiesTo(LayerImpl* base_layer) { |
49 Layer::PushPropertiesTo(base_layer); | 49 Layer::PushPropertiesTo(base_layer); |
50 TRACE_EVENT0("cc", "PictureLayer::PushPropertiesTo"); | 50 TRACE_EVENT0("cc", "PictureLayer::PushPropertiesTo"); |
51 PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer); | 51 PictureLayerImpl* layer_impl = static_cast<PictureLayerImpl*>(base_layer); |
52 // TODO(danakj): Make is_mask_ a constructor parameter for PictureLayer. | 52 // TODO(danakj): Make mask_type_ a constructor parameter for PictureLayer. |
53 DCHECK_EQ(layer_impl->is_mask(), is_mask_); | 53 DCHECK_EQ(layer_impl->mask_type(), mask_type()); |
54 DropRecordingSourceContentIfInvalid(); | 54 DropRecordingSourceContentIfInvalid(); |
55 | 55 |
56 layer_impl->SetNearestNeighbor(picture_layer_inputs_.nearest_neighbor); | 56 layer_impl->SetNearestNeighbor(picture_layer_inputs_.nearest_neighbor); |
57 | 57 |
58 // Preserve lcd text settings from the current raster source. | 58 // Preserve lcd text settings from the current raster source. |
59 bool can_use_lcd_text = layer_impl->RasterSourceUsesLCDText(); | 59 bool can_use_lcd_text = layer_impl->RasterSourceUsesLCDText(); |
60 scoped_refptr<RasterSource> raster_source = | 60 scoped_refptr<RasterSource> raster_source = |
61 recording_source_->CreateRasterSource(can_use_lcd_text); | 61 recording_source_->CreateRasterSource(can_use_lcd_text); |
62 layer_impl->set_gpu_raster_max_texture_size( | 62 layer_impl->set_gpu_raster_max_texture_size( |
63 layer_tree_host()->device_viewport_size()); | 63 layer_tree_host()->device_viewport_size()); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 SetNeedsPushProperties(); | 130 SetNeedsPushProperties(); |
131 } else { | 131 } else { |
132 // If this invalidation did not affect the recording source, then it can be | 132 // If this invalidation did not affect the recording source, then it can be |
133 // cleared as an optimization. | 133 // cleared as an optimization. |
134 last_updated_invalidation_.Clear(); | 134 last_updated_invalidation_.Clear(); |
135 } | 135 } |
136 | 136 |
137 return updated; | 137 return updated; |
138 } | 138 } |
139 | 139 |
140 void PictureLayer::SetIsMask(bool is_mask) { | 140 void PictureLayer::SetLayerMaskType(Layer::LayerMaskType mask_type) { |
141 is_mask_ = is_mask; | 141 mask_type_ = mask_type; |
142 } | 142 } |
143 | 143 |
144 sk_sp<SkPicture> PictureLayer::GetPicture() const { | 144 sk_sp<SkPicture> PictureLayer::GetPicture() const { |
145 // We could either flatten the RecordingSource into a single SkPicture, or | 145 // We could either flatten the RecordingSource into a single SkPicture, or |
146 // paint a fresh one depending on what we intend to do with it. For now we | 146 // paint a fresh one depending on what we intend to do with it. For now we |
147 // just paint a fresh one to get consistent results. | 147 // just paint a fresh one to get consistent results. |
148 if (!DrawsContent()) | 148 if (!DrawsContent()) |
149 return nullptr; | 149 return nullptr; |
150 | 150 |
151 gfx::Size layer_size = bounds(); | 151 gfx::Size layer_size = bounds(); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 picture_layer_inputs_.display_list = nullptr; | 226 picture_layer_inputs_.display_list = nullptr; |
227 picture_layer_inputs_.painter_reported_memory_usage = 0; | 227 picture_layer_inputs_.painter_reported_memory_usage = 0; |
228 } | 228 } |
229 } | 229 } |
230 | 230 |
231 const DisplayItemList* PictureLayer::GetDisplayItemList() { | 231 const DisplayItemList* PictureLayer::GetDisplayItemList() { |
232 return picture_layer_inputs_.display_list.get(); | 232 return picture_layer_inputs_.display_list.get(); |
233 } | 233 } |
234 | 234 |
235 } // namespace cc | 235 } // namespace cc |
OLD | NEW |