OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/tiles/gpu_image_decode_controller.h" | 5 #include "cc/tiles/gpu_image_decode_controller.h" |
6 | 6 |
7 #include "base/memory/discardable_memory_allocator.h" | 7 #include "base/memory/discardable_memory_allocator.h" |
8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
9 #include "base/numerics/safe_math.h" | 9 #include "base/numerics/safe_math.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 } | 70 } |
71 | 71 |
72 // Overridden from Task: | 72 // Overridden from Task: |
73 void RunOnWorkerThread() override { | 73 void RunOnWorkerThread() override { |
74 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", "gpu", | 74 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", "gpu", |
75 "source_prepare_tiles_id", tracing_info_.prepare_tiles_id); | 75 "source_prepare_tiles_id", tracing_info_.prepare_tiles_id); |
76 controller_->DecodeImage(image_); | 76 controller_->DecodeImage(image_); |
77 } | 77 } |
78 | 78 |
79 // Overridden from TileTask: | 79 // Overridden from TileTask: |
80 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} | 80 void OnTaskCompleted() override { |
81 void CompleteOnOriginThread(RasterBufferProvider* provider) override { | 81 controller_->OnImageDecodeTaskCompleted(image_); |
82 controller_->DecodeTaskCompleted(image_); | |
83 } | 82 } |
84 | 83 |
85 protected: | 84 protected: |
86 ~ImageDecodeTaskImpl() override {} | 85 ~ImageDecodeTaskImpl() override {} |
87 | 86 |
88 private: | 87 private: |
89 GpuImageDecodeController* controller_; | 88 GpuImageDecodeController* controller_; |
90 DrawImage image_; | 89 DrawImage image_; |
91 const ImageDecodeController::TracingInfo tracing_info_; | 90 const ImageDecodeController::TracingInfo tracing_info_; |
92 | 91 |
(...skipping 20 matching lines...) Expand all Loading... |
113 dependencies_.push_back(std::move(decode_dependency)); | 112 dependencies_.push_back(std::move(decode_dependency)); |
114 } | 113 } |
115 | 114 |
116 // Override from Task: | 115 // Override from Task: |
117 void RunOnWorkerThread() override { | 116 void RunOnWorkerThread() override { |
118 TRACE_EVENT2("cc", "ImageUploadTaskImpl::RunOnWorkerThread", "mode", "gpu", | 117 TRACE_EVENT2("cc", "ImageUploadTaskImpl::RunOnWorkerThread", "mode", "gpu", |
119 "source_prepare_tiles_id", tracing_info_.prepare_tiles_id); | 118 "source_prepare_tiles_id", tracing_info_.prepare_tiles_id); |
120 controller_->UploadImage(image_); | 119 controller_->UploadImage(image_); |
121 } | 120 } |
122 | 121 |
123 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} | 122 // Overridden from TileTask: |
124 void CompleteOnOriginThread(RasterBufferProvider* provider) override { | 123 void OnTaskCompleted() override { |
125 controller_->UploadTaskCompleted(image_); | 124 controller_->OnImageUploadTaskCompleted(image_); |
126 } | 125 } |
127 | 126 |
128 protected: | 127 protected: |
129 ~ImageUploadTaskImpl() override {} | 128 ~ImageUploadTaskImpl() override {} |
130 | 129 |
131 private: | 130 private: |
132 GpuImageDecodeController* controller_; | 131 GpuImageDecodeController* controller_; |
133 DrawImage image_; | 132 DrawImage image_; |
134 const ImageDecodeController::TracingInfo tracing_info_; | 133 const ImageDecodeController::TracingInfo tracing_info_; |
135 | 134 |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
435 | 434 |
436 void GpuImageDecodeController::UploadImage(const DrawImage& draw_image) { | 435 void GpuImageDecodeController::UploadImage(const DrawImage& draw_image) { |
437 ContextProvider::ScopedContextLock context_lock(context_); | 436 ContextProvider::ScopedContextLock context_lock(context_); |
438 base::AutoLock lock(lock_); | 437 base::AutoLock lock(lock_); |
439 auto found = image_data_.Peek(draw_image.image()->uniqueID()); | 438 auto found = image_data_.Peek(draw_image.image()->uniqueID()); |
440 DCHECK(found != image_data_.end()); | 439 DCHECK(found != image_data_.end()); |
441 DCHECK(!found->second->is_at_raster); | 440 DCHECK(!found->second->is_at_raster); |
442 UploadImageIfNecessary(draw_image, found->second.get()); | 441 UploadImageIfNecessary(draw_image, found->second.get()); |
443 } | 442 } |
444 | 443 |
445 void GpuImageDecodeController::DecodeTaskCompleted( | 444 void GpuImageDecodeController::OnImageDecodeTaskCompleted( |
446 const DrawImage& draw_image) { | 445 const DrawImage& draw_image) { |
447 base::AutoLock lock(lock_); | 446 base::AutoLock lock(lock_); |
448 // Decode task is complete, remove it from our list of pending tasks. | 447 // Decode task is complete, remove it from our list of pending tasks. |
449 pending_image_decode_tasks_.erase(draw_image.image()->uniqueID()); | 448 pending_image_decode_tasks_.erase(draw_image.image()->uniqueID()); |
450 | 449 |
451 // While the decode task is active, we keep a ref on the decoded data. | 450 // While the decode task is active, we keep a ref on the decoded data. |
452 // Release that ref now. | 451 // Release that ref now. |
453 UnrefImageDecode(draw_image); | 452 UnrefImageDecode(draw_image); |
454 } | 453 } |
455 | 454 |
456 void GpuImageDecodeController::UploadTaskCompleted( | 455 void GpuImageDecodeController::OnImageUploadTaskCompleted( |
457 const DrawImage& draw_image) { | 456 const DrawImage& draw_image) { |
458 base::AutoLock lock(lock_); | 457 base::AutoLock lock(lock_); |
459 // Upload task is complete, remove it from our list of pending tasks. | 458 // Upload task is complete, remove it from our list of pending tasks. |
460 pending_image_upload_tasks_.erase(draw_image.image()->uniqueID()); | 459 pending_image_upload_tasks_.erase(draw_image.image()->uniqueID()); |
461 | 460 |
462 // While the upload task is active, we keep a ref on both the image it will be | 461 // While the upload task is active, we keep a ref on both the image it will be |
463 // populating, as well as the decode it needs to populate it. Release these | 462 // populating, as well as the decode it needs to populate it. Release these |
464 // refs now. | 463 // refs now. |
465 UnrefImageDecode(draw_image); | 464 UnrefImageDecode(draw_image); |
466 UnrefImageInternal(draw_image); | 465 UnrefImageInternal(draw_image); |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 void GpuImageDecodeController::SetImageDecodingFailedForTesting( | 823 void GpuImageDecodeController::SetImageDecodingFailedForTesting( |
825 const DrawImage& image) { | 824 const DrawImage& image) { |
826 base::AutoLock lock(lock_); | 825 base::AutoLock lock(lock_); |
827 auto found = image_data_.Peek(image.image()->uniqueID()); | 826 auto found = image_data_.Peek(image.image()->uniqueID()); |
828 DCHECK(found != image_data_.end()); | 827 DCHECK(found != image_data_.end()); |
829 ImageData* image_data = found->second.get(); | 828 ImageData* image_data = found->second.get(); |
830 image_data->decode.decode_failure = true; | 829 image_data->decode.decode_failure = true; |
831 } | 830 } |
832 | 831 |
833 } // namespace cc | 832 } // namespace cc |
OLD | NEW |