Chromium Code Reviews| 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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 103 ImageUploadTaskImpl(GpuImageDecodeController* controller, | 103 ImageUploadTaskImpl(GpuImageDecodeController* controller, |
| 104 const DrawImage& draw_image, | 104 const DrawImage& draw_image, |
| 105 scoped_refptr<TileTask> decode_dependency, | 105 scoped_refptr<TileTask> decode_dependency, |
| 106 uint64_t source_prepare_tiles_id) | 106 uint64_t source_prepare_tiles_id) |
| 107 : TileTask(false), | 107 : TileTask(false), |
| 108 controller_(controller), | 108 controller_(controller), |
| 109 image_(draw_image), | 109 image_(draw_image), |
| 110 image_ref_(draw_image.image()), | 110 image_ref_(draw_image.image()), |
| 111 source_prepare_tiles_id_(source_prepare_tiles_id) { | 111 source_prepare_tiles_id_(source_prepare_tiles_id) { |
| 112 DCHECK(!SkipImage(draw_image)); | 112 DCHECK(!SkipImage(draw_image)); |
| 113 dependencies_.push_back(std::move(decode_dependency)); | 113 // If an image is already decoded and locked, we will not generate a |
| 114 // decode task. | |
| 115 if (decode_dependency) | |
|
prashant.n
2016/04/21 21:57:51
Add DCHECK(decode_dependency) here.
ericrk
2016/04/21 23:06:39
We can have legitimate cases where an upload task
| |
| 116 dependencies_.push_back(std::move(decode_dependency)); | |
| 114 } | 117 } |
| 115 | 118 |
| 116 // Override from Task: | 119 // Override from Task: |
| 117 void RunOnWorkerThread() override { | 120 void RunOnWorkerThread() override { |
| 118 TRACE_EVENT2("cc", "ImageUploadTaskImpl::RunOnWorkerThread", "mode", "gpu", | 121 TRACE_EVENT2("cc", "ImageUploadTaskImpl::RunOnWorkerThread", "mode", "gpu", |
| 119 "source_prepare_tiles_id", source_prepare_tiles_id_); | 122 "source_prepare_tiles_id", source_prepare_tiles_id_); |
| 120 controller_->UploadImage(image_); | 123 controller_->UploadImage(image_); |
| 121 } | 124 } |
| 122 | 125 |
| 123 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} | 126 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 234 | 237 |
| 235 // If we had to create new image data, add it to our map now that we know it | 238 // If we had to create new image data, add it to our map now that we know it |
| 236 // will fit. | 239 // will fit. |
| 237 if (new_data) | 240 if (new_data) |
| 238 found = image_data_.Put(image_id, std::move(new_data)); | 241 found = image_data_.Put(image_id, std::move(new_data)); |
| 239 | 242 |
| 240 // Ref image and create a upload and decode tasks. We will release this ref | 243 // Ref image and create a upload and decode tasks. We will release this ref |
| 241 // in UploadTaskCompleted. | 244 // in UploadTaskCompleted. |
| 242 RefImage(draw_image); | 245 RefImage(draw_image); |
| 243 existing_task = make_scoped_refptr(new ImageUploadTaskImpl( | 246 existing_task = make_scoped_refptr(new ImageUploadTaskImpl( |
| 244 this, draw_image, GetImageDecodeTaskAndRef(draw_image, prepare_tiles_id), | 247 this, draw_image, GetImageDecodeTaskAndRef(draw_image, prepare_tiles_id), |
|
prashant.n
2016/04/21 21:57:51
Should we check here
decode_task = GetImageDecode
ericrk
2016/04/21 23:06:39
We actually still need the upload task. In this ca
| |
| 245 prepare_tiles_id)); | 248 prepare_tiles_id)); |
| 246 | 249 |
| 247 // Ref the image again - this ref is owned by the caller, and it is their | 250 // Ref the image again - this ref is owned by the caller, and it is their |
| 248 // responsibility to release it by calling UnrefImage. | 251 // responsibility to release it by calling UnrefImage. |
| 249 RefImage(draw_image); | 252 RefImage(draw_image); |
| 250 *task = existing_task; | 253 *task = existing_task; |
| 251 return true; | 254 return true; |
| 252 } | 255 } |
| 253 | 256 |
| 254 void GpuImageDecodeController::UnrefImage(const DrawImage& draw_image) { | 257 void GpuImageDecodeController::UnrefImage(const DrawImage& draw_image) { |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 737 } | 740 } |
| 738 | 741 |
| 739 SkImageInfo GpuImageDecodeController::CreateImageInfoForDrawImage( | 742 SkImageInfo GpuImageDecodeController::CreateImageInfoForDrawImage( |
| 740 const DrawImage& draw_image) const { | 743 const DrawImage& draw_image) const { |
| 741 return SkImageInfo::Make( | 744 return SkImageInfo::Make( |
| 742 draw_image.image()->width(), draw_image.image()->height(), | 745 draw_image.image()->width(), draw_image.image()->height(), |
| 743 ResourceFormatToClosestSkColorType(format_), kPremul_SkAlphaType); | 746 ResourceFormatToClosestSkColorType(format_), kPremul_SkAlphaType); |
| 744 } | 747 } |
| 745 | 748 |
| 746 } // namespace cc | 749 } // namespace cc |
| OLD | NEW |