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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp

Issue 2868283003: [SPv2] Renaming and refactor about raster invalidation tracking (Closed)
Patch Set: - Created 3 years, 7 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "platform/graphics/compositing/PaintArtifactCompositor.h" 5 #include "platform/graphics/compositing/PaintArtifactCompositor.h"
6 6
7 #include "cc/layers/content_layer_client.h" 7 #include "cc/layers/content_layer_client.h"
8 #include "cc/layers/layer.h" 8 #include "cc/layers/layer.h"
9 #include "cc/layers/picture_layer.h" 9 #include "cc/layers/picture_layer.h"
10 #include "cc/paint/display_item_list.h" 10 #include "cc/paint/display_item_list.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 return 0; 84 return 0;
85 } 85 }
86 86
87 void ResetTrackedRasterInvalidations() { 87 void ResetTrackedRasterInvalidations() {
88 RasterInvalidationTracking* tracking = 88 RasterInvalidationTracking* tracking =
89 CcLayersRasterInvalidationTrackingMap().Find(cc_picture_layer_.get()); 89 CcLayersRasterInvalidationTrackingMap().Find(cc_picture_layer_.get());
90 if (!tracking) 90 if (!tracking)
91 return; 91 return;
92 92
93 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) 93 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled())
94 tracking->tracked_raster_invalidations.clear(); 94 tracking->invalidations.clear();
95 else 95 else
96 CcLayersRasterInvalidationTrackingMap().Remove(cc_picture_layer_.get()); 96 CcLayersRasterInvalidationTrackingMap().Remove(cc_picture_layer_.get());
97 } 97 }
98 98
99 bool HasTrackedRasterInvalidations() const { 99 bool HasTrackedRasterInvalidations() const {
100 RasterInvalidationTracking* tracking = 100 RasterInvalidationTracking* tracking =
101 CcLayersRasterInvalidationTrackingMap().Find(cc_picture_layer_.get()); 101 CcLayersRasterInvalidationTrackingMap().Find(cc_picture_layer_.get());
102 if (tracking) 102 if (tracking)
103 return !tracking->tracked_raster_invalidations.IsEmpty(); 103 return !tracking->invalidations.IsEmpty();
104 return false; 104 return false;
105 } 105 }
106 106
107 void SetNeedsDisplayRect(const gfx::Rect& rect, 107 void SetNeedsDisplayRect(const gfx::Rect& rect) {
108 RasterInvalidationInfo* raster_invalidation_info) {
109 cc_picture_layer_->SetNeedsDisplayRect(rect); 108 cc_picture_layer_->SetNeedsDisplayRect(rect);
109 }
110 110
111 if (!raster_invalidation_info || rect.IsEmpty()) 111 void AddTrackedRasterInvalidations(
112 const RasterInvalidationTracking& tracking) {
113 auto& cc_tracking =
114 CcLayersRasterInvalidationTrackingMap().Add(cc_picture_layer_.get());
115 cc_tracking.invalidations.AppendVector(tracking.invalidations);
116
117 if (!RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled())
112 return; 118 return;
113 119 for (const auto& info : tracking.invalidations) {
114 RasterInvalidationTracking& tracking =
115 CcLayersRasterInvalidationTrackingMap().Add(cc_picture_layer_.get());
116
117 tracking.tracked_raster_invalidations.push_back(*raster_invalidation_info);
118
119 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) {
120 // TODO(crbug.com/496260): Some antialiasing effects overflow the paint 120 // TODO(crbug.com/496260): Some antialiasing effects overflow the paint
121 // invalidation rect. 121 // invalidation rect.
122 IntRect r = raster_invalidation_info->rect; 122 IntRect r = info.rect;
123 r.Inflate(1); 123 r.Inflate(1);
124 tracking.raster_invalidation_region_since_last_paint.Unite(r); 124 cc_tracking.invalidation_region_since_last_paint.Unite(r);
125 } 125 }
126 } 126 }
127 127
128 std::unique_ptr<JSONObject> LayerAsJSON(LayerTreeFlags flags) { 128 std::unique_ptr<JSONObject> LayerAsJSON(LayerTreeFlags flags) {
129 std::unique_ptr<JSONObject> json = JSONObject::Create(); 129 std::unique_ptr<JSONObject> json = JSONObject::Create();
130 json->SetString("name", debug_name_); 130 json->SetString("name", debug_name_);
131 IntSize bounds(cc_picture_layer_->bounds().width(), 131 IntSize bounds(cc_picture_layer_->bounds().width(),
132 cc_picture_layer_->bounds().height()); 132 cc_picture_layer_->bounds().height());
133 if (!bounds.IsEmpty()) 133 if (!bounds.IsEmpty())
134 json->SetArray("bounds", SizeAsJSONArray(bounds)); 134 json->SetArray("bounds", SizeAsJSONArray(bounds));
(...skipping 29 matching lines...) Expand all
164 gfx::Rect paintable_region_; 164 gfx::Rect paintable_region_;
165 Vector<std::unique_ptr<JSONArray>> paint_chunk_debug_data_; 165 Vector<std::unique_ptr<JSONArray>> paint_chunk_debug_data_;
166 }; 166 };
167 167
168 PaintArtifactCompositor::PaintArtifactCompositor() { 168 PaintArtifactCompositor::PaintArtifactCompositor() {
169 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) 169 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled())
170 return; 170 return;
171 root_layer_ = cc::Layer::Create(); 171 root_layer_ = cc::Layer::Create();
172 web_layer_ = Platform::Current()->CompositorSupport()->CreateLayerFromCCLayer( 172 web_layer_ = Platform::Current()->CompositorSupport()->CreateLayerFromCCLayer(
173 root_layer_.get()); 173 root_layer_.get());
174 is_tracking_raster_invalidations_ = false;
175 } 174 }
176 175
177 PaintArtifactCompositor::~PaintArtifactCompositor() {} 176 PaintArtifactCompositor::~PaintArtifactCompositor() {}
178 177
179 void PaintArtifactCompositor::SetTracksRasterInvalidations(
180 bool tracks_paint_invalidations) {
181 ResetTrackedRasterInvalidations();
182 is_tracking_raster_invalidations_ = tracks_paint_invalidations;
183 }
184
185 void PaintArtifactCompositor::ResetTrackedRasterInvalidations() { 178 void PaintArtifactCompositor::ResetTrackedRasterInvalidations() {
186 for (auto& client : content_layer_clients_) 179 for (auto& client : content_layer_clients_)
187 client->ResetTrackedRasterInvalidations(); 180 client->ResetTrackedRasterInvalidations();
188 } 181 }
189 182
190 bool PaintArtifactCompositor::HasTrackedRasterInvalidations() const { 183 bool PaintArtifactCompositor::HasTrackedRasterInvalidations() const {
191 for (auto& client : content_layer_clients_) { 184 for (auto& client : content_layer_clients_) {
192 if (client->HasTrackedRasterInvalidations()) 185 if (client->HasTrackedRasterInvalidations())
193 return true; 186 return true;
194 } 187 }
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 gfx::Rect(cc_combined_bounds.size())); 275 gfx::Rect(cc_combined_bounds.size()));
283 276
284 scoped_refptr<cc::PictureLayer> cc_picture_layer = 277 scoped_refptr<cc::PictureLayer> cc_picture_layer =
285 content_layer_client->CcPictureLayer(); 278 content_layer_client->CcPictureLayer();
286 cc_picture_layer->SetBounds(cc_combined_bounds.size()); 279 cc_picture_layer->SetBounds(cc_combined_bounds.size());
287 cc_picture_layer->SetIsDrawable(true); 280 cc_picture_layer->SetIsDrawable(true);
288 cc_picture_layer->SetContentsOpaque(pending_layer.known_to_be_opaque); 281 cc_picture_layer->SetContentsOpaque(pending_layer.known_to_be_opaque);
289 content_layer_client->ClearPaintChunkDebugData(); 282 content_layer_client->ClearPaintChunkDebugData();
290 283
291 for (const auto& paint_chunk : pending_layer.paint_chunks) { 284 for (const auto& paint_chunk : pending_layer.paint_chunks) {
292 RasterInvalidationTracking* raster_tracking =
293 tracking_map ? tracking_map->Find(paint_chunk) : nullptr;
294 DCHECK(!raster_tracking ||
295 raster_tracking->tracked_raster_invalidations.size() ==
296 paint_chunk->raster_invalidation_rects.size());
297
298 if (store_debug_info) { 285 if (store_debug_info) {
299 content_layer_client->AddPaintChunkDebugData( 286 content_layer_client->AddPaintChunkDebugData(
300 paint_artifact.GetDisplayItemList().SubsequenceAsJSON( 287 paint_artifact.GetDisplayItemList().SubsequenceAsJSON(
301 paint_chunk->begin_index, paint_chunk->end_index, 288 paint_chunk->begin_index, paint_chunk->end_index,
302 DisplayItemList::kSkipNonDrawings | 289 DisplayItemList::kSkipNonDrawings |
303 DisplayItemList::kShownOnlyDisplayItemTypes)); 290 DisplayItemList::kShownOnlyDisplayItemTypes));
304 } 291 }
305 292
306 for (unsigned index = 0; 293 for (const auto& r : paint_chunk->raster_invalidation_rects) {
307 index < paint_chunk->raster_invalidation_rects.size(); ++index) { 294 IntRect rect(EnclosingIntRect(r));
308 IntRect rect(
309 EnclosingIntRect(paint_chunk->raster_invalidation_rects[index]));
310 gfx::Rect cc_invalidation_rect(rect.X(), rect.Y(), 295 gfx::Rect cc_invalidation_rect(rect.X(), rect.Y(),
311 std::max(0, rect.Width()), 296 std::max(0, rect.Width()),
312 std::max(0, rect.Height())); 297 std::max(0, rect.Height()));
313 if (cc_invalidation_rect.IsEmpty()) 298 if (cc_invalidation_rect.IsEmpty())
314 continue; 299 continue;
315 // Raster paintChunk.rasterInvalidationRects is in the space of the 300 // Raster paintChunk.rasterInvalidationRects is in the space of the
316 // containing transform node, so need to subtract off the layer offset. 301 // containing transform node, so need to subtract off the layer offset.
317 cc_invalidation_rect.Offset(-cc_combined_bounds.OffsetFromOrigin()); 302 cc_invalidation_rect.Offset(-cc_combined_bounds.OffsetFromOrigin());
318 content_layer_client->SetNeedsDisplayRect( 303 content_layer_client->SetNeedsDisplayRect(cc_invalidation_rect);
319 cc_invalidation_rect,
320 raster_tracking
321 ? &raster_tracking->tracked_raster_invalidations[index]
322 : nullptr);
323 } 304 }
305
306 if (auto* raster_tracking =
307 tracking_map ? tracking_map->Find(paint_chunk) : nullptr)
308 content_layer_client->AddTrackedRasterInvalidations(*raster_tracking);
324 } 309 }
325 310
326 new_content_layer_clients.push_back(std::move(content_layer_client)); 311 new_content_layer_clients.push_back(std::move(content_layer_client));
327 return cc_picture_layer; 312 return cc_picture_layer;
328 } 313 }
329 314
330 PaintArtifactCompositor::PendingLayer::PendingLayer( 315 PaintArtifactCompositor::PendingLayer::PendingLayer(
331 const PaintChunk& first_paint_chunk, 316 const PaintChunk& first_paint_chunk,
332 bool chunk_is_foreign) 317 bool chunk_is_foreign)
333 : bounds(first_paint_chunk.bounds), 318 : bounds(first_paint_chunk.bounds),
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 #ifndef NDEBUG 682 #ifndef NDEBUG
698 void PaintArtifactCompositor::ShowDebugData() { 683 void PaintArtifactCompositor::ShowDebugData() {
699 LOG(ERROR) << LayersAsJSON(kLayerTreeIncludesDebugInfo) 684 LOG(ERROR) << LayersAsJSON(kLayerTreeIncludesDebugInfo)
700 ->ToPrettyJSONString() 685 ->ToPrettyJSONString()
701 .Utf8() 686 .Utf8()
702 .data(); 687 .data();
703 } 688 }
704 #endif 689 #endif
705 690
706 } // namespace blink 691 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698