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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 } | 69 } |
70 | 70 |
71 // Overridden from Task: | 71 // Overridden from Task: |
72 void RunOnWorkerThread() override { | 72 void RunOnWorkerThread() override { |
73 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", "gpu", | 73 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", "gpu", |
74 "source_prepare_tiles_id", tracing_info_.prepare_tiles_id); | 74 "source_prepare_tiles_id", tracing_info_.prepare_tiles_id); |
75 controller_->DecodeImage(image_); | 75 controller_->DecodeImage(image_); |
76 } | 76 } |
77 | 77 |
78 // Overridden from TileTask: | 78 // Overridden from TileTask: |
79 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} | 79 void OnTaskCompleted() override { |
80 void CompleteOnOriginThread(RasterBufferProvider* provider) override { | 80 controller_->OnImageDecodeTaskCompleted(image_); |
81 controller_->DecodeTaskCompleted(image_); | |
82 } | 81 } |
83 | 82 |
84 protected: | 83 protected: |
85 ~ImageDecodeTaskImpl() override {} | 84 ~ImageDecodeTaskImpl() override {} |
86 | 85 |
87 private: | 86 private: |
88 GpuImageDecodeController* controller_; | 87 GpuImageDecodeController* controller_; |
89 DrawImage image_; | 88 DrawImage image_; |
90 const ImageDecodeController::TracingInfo tracing_info_; | 89 const ImageDecodeController::TracingInfo tracing_info_; |
91 | 90 |
(...skipping 20 matching lines...) Expand all Loading... |
112 dependencies_.push_back(std::move(decode_dependency)); | 111 dependencies_.push_back(std::move(decode_dependency)); |
113 } | 112 } |
114 | 113 |
115 // Override from Task: | 114 // Override from Task: |
116 void RunOnWorkerThread() override { | 115 void RunOnWorkerThread() override { |
117 TRACE_EVENT2("cc", "ImageUploadTaskImpl::RunOnWorkerThread", "mode", "gpu", | 116 TRACE_EVENT2("cc", "ImageUploadTaskImpl::RunOnWorkerThread", "mode", "gpu", |
118 "source_prepare_tiles_id", tracing_info_.prepare_tiles_id); | 117 "source_prepare_tiles_id", tracing_info_.prepare_tiles_id); |
119 controller_->UploadImage(image_); | 118 controller_->UploadImage(image_); |
120 } | 119 } |
121 | 120 |
122 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} | 121 // Overridden from TileTask: |
123 void CompleteOnOriginThread(RasterBufferProvider* provider) override { | 122 void OnTaskCompleted() override { |
124 controller_->UploadTaskCompleted(image_); | 123 controller_->OnImageUploadTaskCompleted(image_); |
125 } | 124 } |
126 | 125 |
127 protected: | 126 protected: |
128 ~ImageUploadTaskImpl() override {} | 127 ~ImageUploadTaskImpl() override {} |
129 | 128 |
130 private: | 129 private: |
131 GpuImageDecodeController* controller_; | 130 GpuImageDecodeController* controller_; |
132 DrawImage image_; | 131 DrawImage image_; |
133 const ImageDecodeController::TracingInfo tracing_info_; | 132 const ImageDecodeController::TracingInfo tracing_info_; |
134 | 133 |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 | 435 |
437 void GpuImageDecodeController::UploadImage(const DrawImage& draw_image) { | 436 void GpuImageDecodeController::UploadImage(const DrawImage& draw_image) { |
438 ContextProvider::ScopedContextLock context_lock(context_); | 437 ContextProvider::ScopedContextLock context_lock(context_); |
439 base::AutoLock lock(lock_); | 438 base::AutoLock lock(lock_); |
440 auto found = image_data_.Peek(draw_image.image()->uniqueID()); | 439 auto found = image_data_.Peek(draw_image.image()->uniqueID()); |
441 DCHECK(found != image_data_.end()); | 440 DCHECK(found != image_data_.end()); |
442 DCHECK(!found->second->is_at_raster); | 441 DCHECK(!found->second->is_at_raster); |
443 UploadImageIfNecessary(draw_image, found->second.get()); | 442 UploadImageIfNecessary(draw_image, found->second.get()); |
444 } | 443 } |
445 | 444 |
446 void GpuImageDecodeController::DecodeTaskCompleted( | 445 void GpuImageDecodeController::OnImageDecodeTaskCompleted( |
447 const DrawImage& draw_image) { | 446 const DrawImage& draw_image) { |
448 base::AutoLock lock(lock_); | 447 base::AutoLock lock(lock_); |
449 // Decode task is complete, remove it from our list of pending tasks. | 448 // Decode task is complete, remove it from our list of pending tasks. |
450 pending_image_decode_tasks_.erase(draw_image.image()->uniqueID()); | 449 pending_image_decode_tasks_.erase(draw_image.image()->uniqueID()); |
451 | 450 |
452 // While the decode task is active, we keep a ref on the decoded data. | 451 // While the decode task is active, we keep a ref on the decoded data. |
453 // Release that ref now. | 452 // Release that ref now. |
454 UnrefImageDecode(draw_image); | 453 UnrefImageDecode(draw_image); |
455 } | 454 } |
456 | 455 |
457 void GpuImageDecodeController::UploadTaskCompleted( | 456 void GpuImageDecodeController::OnImageUploadTaskCompleted( |
458 const DrawImage& draw_image) { | 457 const DrawImage& draw_image) { |
459 base::AutoLock lock(lock_); | 458 base::AutoLock lock(lock_); |
460 // Upload task is complete, remove it from our list of pending tasks. | 459 // Upload task is complete, remove it from our list of pending tasks. |
461 pending_image_upload_tasks_.erase(draw_image.image()->uniqueID()); | 460 pending_image_upload_tasks_.erase(draw_image.image()->uniqueID()); |
462 | 461 |
463 // While the upload task is active, we keep a ref on both the image it will be | 462 // While the upload task is active, we keep a ref on both the image it will be |
464 // populating, as well as the decode it needs to populate it. Release these | 463 // populating, as well as the decode it needs to populate it. Release these |
465 // refs now. | 464 // refs now. |
466 UnrefImageDecode(draw_image); | 465 UnrefImageDecode(draw_image); |
467 UnrefImageInternal(draw_image); | 466 UnrefImageInternal(draw_image); |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
858 bool GpuImageDecodeController::DiscardableIsLockedForTesting( | 857 bool GpuImageDecodeController::DiscardableIsLockedForTesting( |
859 const DrawImage& image) { | 858 const DrawImage& image) { |
860 base::AutoLock lock(lock_); | 859 base::AutoLock lock(lock_); |
861 auto found = image_data_.Peek(image.image()->uniqueID()); | 860 auto found = image_data_.Peek(image.image()->uniqueID()); |
862 DCHECK(found != image_data_.end()); | 861 DCHECK(found != image_data_.end()); |
863 ImageData* image_data = found->second.get(); | 862 ImageData* image_data = found->second.get(); |
864 return image_data->decode.is_locked; | 863 return image_data->decode.is_locked; |
865 } | 864 } |
866 | 865 |
867 } // namespace cc | 866 } // namespace cc |
OLD | NEW |