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

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

Issue 1854513002: cc: Add RasterSource::PlaybackSettings for finer control of raster. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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/raster_source.h ('k') | cc/playback/raster_source_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/raster_source.h" 5 #include "cc/playback/raster_source.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/thread_task_runner_handle.h" 10 #include "base/thread_task_runner_handle.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 } 79 }
80 80
81 RasterSource::~RasterSource() { 81 RasterSource::~RasterSource() {
82 // For MemoryDumpProvider deregistration to work correctly, this must happen 82 // For MemoryDumpProvider deregistration to work correctly, this must happen
83 // on the same thread that the RasterSource was created on. 83 // on the same thread that the RasterSource was created on.
84 DCHECK(memory_dump_thread_checker_.CalledOnValidThread()); 84 DCHECK(memory_dump_thread_checker_.CalledOnValidThread());
85 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( 85 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
86 this); 86 this);
87 } 87 }
88 88
89 void RasterSource::PlaybackToSharedCanvas(SkCanvas* raster_canvas,
90 const gfx::Rect& canvas_rect,
91 float contents_scale,
92 bool include_images) const {
93 // TODO(vmpstr): This can be improved by plumbing whether the tile itself has
94 // discardable images. This way we would only pay for the hijack canvas if the
95 // tile actually needed it.
96 if (!include_images) {
97 SkipImageCanvas canvas(raster_canvas);
98 RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale);
99 } else if (display_list_->MayHaveDiscardableImages()) {
100 const SkImageInfo& info = raster_canvas->imageInfo();
101 ImageHijackCanvas canvas(info.width(), info.height(),
102 image_decode_controller_);
103 canvas.addCanvas(raster_canvas);
104
105 RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale);
106 } else {
107 RasterCommon(raster_canvas, nullptr, canvas_rect, canvas_rect,
108 contents_scale);
109 }
110 }
111
112 void RasterSource::RasterForAnalysis(skia::AnalysisCanvas* canvas,
113 const gfx::Rect& canvas_rect,
114 float contents_scale) const {
115 RasterCommon(canvas, canvas, canvas_rect, canvas_rect, contents_scale);
116 }
117
118 void RasterSource::PlaybackToCanvas(SkCanvas* raster_canvas, 89 void RasterSource::PlaybackToCanvas(SkCanvas* raster_canvas,
119 const gfx::Rect& canvas_bitmap_rect, 90 const gfx::Rect& canvas_bitmap_rect,
120 const gfx::Rect& canvas_playback_rect, 91 const gfx::Rect& canvas_playback_rect,
121 float contents_scale, 92 float contents_scale,
122 bool include_images) const { 93 const PlaybackSettings& settings) const {
123 PrepareForPlaybackToCanvas(raster_canvas, canvas_bitmap_rect, 94 if (!settings.playback_to_shared_canvas) {
124 canvas_playback_rect, contents_scale); 95 PrepareForPlaybackToCanvas(raster_canvas, canvas_bitmap_rect,
96 canvas_playback_rect, contents_scale);
97 }
125 98
126 if (!include_images) { 99 if (settings.skip_images) {
127 SkipImageCanvas canvas(raster_canvas); 100 SkipImageCanvas canvas(raster_canvas);
128 RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect, 101 RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect,
129 contents_scale); 102 contents_scale);
130 } else if (display_list_->MayHaveDiscardableImages()) { 103 } else if (settings.use_image_hijack_canvas &&
104 display_list_->MayHaveDiscardableImages()) {
131 const SkImageInfo& info = raster_canvas->imageInfo(); 105 const SkImageInfo& info = raster_canvas->imageInfo();
132 ImageHijackCanvas canvas(info.width(), info.height(), 106 ImageHijackCanvas canvas(info.width(), info.height(),
133 image_decode_controller_); 107 image_decode_controller_);
134 canvas.addCanvas(raster_canvas); 108 canvas.addCanvas(raster_canvas);
109
135 RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect, 110 RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect,
136 contents_scale); 111 contents_scale);
137 } else { 112 } else {
138 RasterCommon(raster_canvas, nullptr, canvas_bitmap_rect, 113 RasterCommon(raster_canvas, nullptr, canvas_bitmap_rect,
139 canvas_playback_rect, contents_scale); 114 canvas_playback_rect, contents_scale);
140 } 115 }
141 } 116 }
142 117
143 void RasterSource::PrepareForPlaybackToCanvas( 118 void RasterSource::PrepareForPlaybackToCanvas(
144 SkCanvas* canvas, 119 SkCanvas* canvas,
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 bool RasterSource::PerformSolidColorAnalysis(const gfx::Rect& content_rect, 250 bool RasterSource::PerformSolidColorAnalysis(const gfx::Rect& content_rect,
276 float contents_scale, 251 float contents_scale,
277 SkColor* color) const { 252 SkColor* color) const {
278 TRACE_EVENT0("cc", "RasterSource::PerformSolidColorAnalysis"); 253 TRACE_EVENT0("cc", "RasterSource::PerformSolidColorAnalysis");
279 254
280 gfx::Rect layer_rect = 255 gfx::Rect layer_rect =
281 gfx::ScaleToEnclosingRect(content_rect, 1.0f / contents_scale); 256 gfx::ScaleToEnclosingRect(content_rect, 1.0f / contents_scale);
282 257
283 layer_rect.Intersect(gfx::Rect(size_)); 258 layer_rect.Intersect(gfx::Rect(size_));
284 skia::AnalysisCanvas canvas(layer_rect.width(), layer_rect.height()); 259 skia::AnalysisCanvas canvas(layer_rect.width(), layer_rect.height());
285 RasterForAnalysis(&canvas, layer_rect, 1.0f); 260 RasterCommon(&canvas, &canvas, layer_rect, layer_rect, 1.0f);
286 return canvas.GetColorIfSolid(color); 261 return canvas.GetColorIfSolid(color);
287 } 262 }
288 263
289 void RasterSource::GetDiscardableImagesInRect( 264 void RasterSource::GetDiscardableImagesInRect(
290 const gfx::Rect& layer_rect, 265 const gfx::Rect& layer_rect,
291 float raster_scale, 266 float raster_scale,
292 std::vector<DrawImage>* images) const { 267 std::vector<DrawImage>* images) const {
293 DCHECK_EQ(0u, images->size()); 268 DCHECK_EQ(0u, images->size());
294 display_list_->GetDiscardableImagesInRect(layer_rect, raster_scale, images); 269 display_list_->GetDiscardableImagesInRect(layer_rect, raster_scale, images);
295 } 270 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 base::StringPrintf("cc/display_lists/raster_source_%p", this); 341 base::StringPrintf("cc/display_lists/raster_source_%p", this);
367 base::trace_event::MemoryAllocatorDump* dump = 342 base::trace_event::MemoryAllocatorDump* dump =
368 pmd->CreateAllocatorDump(dump_name); 343 pmd->CreateAllocatorDump(dump_name);
369 dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, 344 dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,
370 base::trace_event::MemoryAllocatorDump::kUnitsBytes, 345 base::trace_event::MemoryAllocatorDump::kUnitsBytes,
371 memory_usage); 346 memory_usage);
372 } 347 }
373 return true; 348 return true;
374 } 349 }
375 350
351 RasterSource::PlaybackSettings::PlaybackSettings()
352 : playback_to_shared_canvas(false),
353 skip_images(false),
354 use_image_hijack_canvas(true) {}
355
376 } // namespace cc 356 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/raster_source.h ('k') | cc/playback/raster_source_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698