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 |