OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |