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