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: cc/playback/display_list_raster_source.cc

Issue 1839143004: Limit image filtering during scale animations 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/display_list_raster_source.h ('k') | cc/playback/image_hijack_canvas.h » ('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_list_raster_source.h" 5 #include "cc/playback/display_list_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 29 matching lines...) Expand all
40 requires_clear_(other->requires_clear_), 40 requires_clear_(other->requires_clear_),
41 can_use_lcd_text_(can_use_lcd_text), 41 can_use_lcd_text_(can_use_lcd_text),
42 is_solid_color_(other->is_solid_color_), 42 is_solid_color_(other->is_solid_color_),
43 solid_color_(other->solid_color_), 43 solid_color_(other->solid_color_),
44 recorded_viewport_(other->recorded_viewport_), 44 recorded_viewport_(other->recorded_viewport_),
45 size_(other->size_), 45 size_(other->size_),
46 clear_canvas_with_debug_color_(other->clear_canvas_with_debug_color_), 46 clear_canvas_with_debug_color_(other->clear_canvas_with_debug_color_),
47 slow_down_raster_scale_factor_for_debug_( 47 slow_down_raster_scale_factor_for_debug_(
48 other->slow_down_raster_scale_factor_for_debug_), 48 other->slow_down_raster_scale_factor_for_debug_),
49 should_attempt_to_use_distance_field_text_(false), 49 should_attempt_to_use_distance_field_text_(false),
50 image_decode_controller_(nullptr) { 50 image_decode_controller_(nullptr),
51 image_scaling_optimization_(ImageScalingOptimization::Static) {
51 // In certain cases, ThreadTaskRunnerHandle isn't set (Android Webview). 52 // In certain cases, ThreadTaskRunnerHandle isn't set (Android Webview).
52 // Don't register a dump provider in these cases. 53 // Don't register a dump provider in these cases.
53 // TODO(ericrk): Get this working in Android Webview. crbug.com/517156 54 // TODO(ericrk): Get this working in Android Webview. crbug.com/517156
54 if (base::ThreadTaskRunnerHandle::IsSet()) { 55 if (base::ThreadTaskRunnerHandle::IsSet()) {
55 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( 56 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
56 this, "cc::DisplayListRasterSource", 57 this, "cc::DisplayListRasterSource",
57 base::ThreadTaskRunnerHandle::Get()); 58 base::ThreadTaskRunnerHandle::Get());
58 } 59 }
59 } 60 }
60 61
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 float contents_scale, 101 float contents_scale,
101 bool include_images) const { 102 bool include_images) const {
102 // TODO(vmpstr): This can be improved by plumbing whether the tile itself has 103 // TODO(vmpstr): This can be improved by plumbing whether the tile itself has
103 // discardable images. This way we would only pay for the hijack canvas if the 104 // discardable images. This way we would only pay for the hijack canvas if the
104 // tile actually needed it. 105 // tile actually needed it.
105 if (!include_images) { 106 if (!include_images) {
106 SkipImageCanvas canvas(raster_canvas); 107 SkipImageCanvas canvas(raster_canvas);
107 RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale); 108 RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale);
108 } else if (display_list_->MayHaveDiscardableImages()) { 109 } else if (display_list_->MayHaveDiscardableImages()) {
109 const SkImageInfo& info = raster_canvas->imageInfo(); 110 const SkImageInfo& info = raster_canvas->imageInfo();
111 const SkFilterQuality max_quality =
112 image_scaling_optimization_ == ImageScalingOptimization::Static
113 ? kHigh_SkFilterQuality
114 : kMedium_SkFilterQuality;
110 ImageHijackCanvas canvas(info.width(), info.height(), 115 ImageHijackCanvas canvas(info.width(), info.height(),
111 image_decode_controller_); 116 image_decode_controller_, max_quality);
112 canvas.addCanvas(raster_canvas); 117 canvas.addCanvas(raster_canvas);
113 118
114 RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale); 119 RasterCommon(&canvas, nullptr, canvas_rect, canvas_rect, contents_scale);
115 } else { 120 } else {
116 RasterCommon(raster_canvas, nullptr, canvas_rect, canvas_rect, 121 RasterCommon(raster_canvas, nullptr, canvas_rect, canvas_rect,
117 contents_scale); 122 contents_scale);
118 } 123 }
119 } 124 }
120 125
121 void DisplayListRasterSource::RasterForAnalysis(skia::AnalysisCanvas* canvas, 126 void DisplayListRasterSource::RasterForAnalysis(skia::AnalysisCanvas* canvas,
(...skipping 10 matching lines...) Expand all
132 bool include_images) const { 137 bool include_images) const {
133 PrepareForPlaybackToCanvas(raster_canvas, canvas_bitmap_rect, 138 PrepareForPlaybackToCanvas(raster_canvas, canvas_bitmap_rect,
134 canvas_playback_rect, contents_scale); 139 canvas_playback_rect, contents_scale);
135 140
136 if (!include_images) { 141 if (!include_images) {
137 SkipImageCanvas canvas(raster_canvas); 142 SkipImageCanvas canvas(raster_canvas);
138 RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect, 143 RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect,
139 contents_scale); 144 contents_scale);
140 } else if (display_list_->MayHaveDiscardableImages()) { 145 } else if (display_list_->MayHaveDiscardableImages()) {
141 const SkImageInfo& info = raster_canvas->imageInfo(); 146 const SkImageInfo& info = raster_canvas->imageInfo();
147 const SkFilterQuality max_quality =
148 image_scaling_optimization_ == ImageScalingOptimization::Static
149 ? kHigh_SkFilterQuality
150 : kMedium_SkFilterQuality;
142 ImageHijackCanvas canvas(info.width(), info.height(), 151 ImageHijackCanvas canvas(info.width(), info.height(),
143 image_decode_controller_); 152 image_decode_controller_, max_quality);
144 canvas.addCanvas(raster_canvas); 153 canvas.addCanvas(raster_canvas);
145 RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect, 154 RasterCommon(&canvas, nullptr, canvas_bitmap_rect, canvas_playback_rect,
146 contents_scale); 155 contents_scale);
147 } else { 156 } else {
148 RasterCommon(raster_canvas, nullptr, canvas_bitmap_rect, 157 RasterCommon(raster_canvas, nullptr, canvas_bitmap_rect,
149 canvas_playback_rect, contents_scale); 158 canvas_playback_rect, contents_scale);
150 } 159 }
151 } 160 }
152 161
153 void DisplayListRasterSource::PrepareForPlaybackToCanvas( 162 void DisplayListRasterSource::PrepareForPlaybackToCanvas(
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 return scoped_refptr<DisplayListRasterSource>( 373 return scoped_refptr<DisplayListRasterSource>(
365 new DisplayListRasterSource(this, can_use_lcd_text)); 374 new DisplayListRasterSource(this, can_use_lcd_text));
366 } 375 }
367 376
368 void DisplayListRasterSource::SetImageDecodeController( 377 void DisplayListRasterSource::SetImageDecodeController(
369 ImageDecodeController* image_decode_controller) { 378 ImageDecodeController* image_decode_controller) {
370 DCHECK(image_decode_controller); 379 DCHECK(image_decode_controller);
371 image_decode_controller_ = image_decode_controller; 380 image_decode_controller_ = image_decode_controller;
372 } 381 }
373 382
383 void DisplayListRasterSource::SetImageScalingOptimization(
384 ImageScalingOptimization opt) {
385 image_scaling_optimization_ = opt;
386 }
387
374 bool DisplayListRasterSource::OnMemoryDump( 388 bool DisplayListRasterSource::OnMemoryDump(
375 const base::trace_event::MemoryDumpArgs& args, 389 const base::trace_event::MemoryDumpArgs& args,
376 base::trace_event::ProcessMemoryDump* pmd) { 390 base::trace_event::ProcessMemoryDump* pmd) {
377 DCHECK(memory_dump_thread_checker_.CalledOnValidThread()); 391 DCHECK(memory_dump_thread_checker_.CalledOnValidThread());
378 392
379 uint64_t memory_usage = GetPictureMemoryUsage(); 393 uint64_t memory_usage = GetPictureMemoryUsage();
380 if (memory_usage > 0) { 394 if (memory_usage > 0) {
381 std::string dump_name = base::StringPrintf( 395 std::string dump_name = base::StringPrintf(
382 "cc/display_lists/display_list_raster_source_%p", this); 396 "cc/display_lists/display_list_raster_source_%p", this);
383 base::trace_event::MemoryAllocatorDump* dump = 397 base::trace_event::MemoryAllocatorDump* dump =
384 pmd->CreateAllocatorDump(dump_name); 398 pmd->CreateAllocatorDump(dump_name);
385 dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, 399 dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize,
386 base::trace_event::MemoryAllocatorDump::kUnitsBytes, 400 base::trace_event::MemoryAllocatorDump::kUnitsBytes,
387 memory_usage); 401 memory_usage);
388 } 402 }
389 return true; 403 return true;
390 } 404 }
391 405
392 } // namespace cc 406 } // namespace cc
OLDNEW
« no previous file with comments | « cc/playback/display_list_raster_source.h ('k') | cc/playback/image_hijack_canvas.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698