| 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 |