Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(265)

Side by Side Diff: cc/tiles/gpu_image_decode_controller.cc

Issue 1910663002: Fix ImageUploadTaskImpl with null dependencies. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@skskp
Patch Set: feedback Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cc/tiles/gpu_image_decode_controller_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | cc/tiles/gpu_image_decode_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698