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

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

Issue 2857923004: cc: Keep PaintImage in DrawImage. (Closed)
Patch Set: rebased Created 3 years, 7 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
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/image_controller.h" 5 #include "cc/tiles/image_controller.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/task_scheduler/post_task.h" 8 #include "base/task_scheduler/post_task.h"
9 #include "base/task_scheduler/task_traits.h" 9 #include "base/task_scheduler/task_traits.h"
10 #include "base/threading/thread_restrictions.h" 10 #include "base/threading/thread_restrictions.h"
11 #include "base/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
12 #include "cc/base/completion_event.h" 12 #include "cc/base/completion_event.h"
13 #include "cc/tiles/tile_task_manager.h" 13 #include "cc/tiles/tile_task_manager.h"
14 14
15 namespace cc { 15 namespace cc {
16 16
17 ImageController::ImageDecodeRequestId 17 ImageController::ImageDecodeRequestId
18 ImageController::s_next_image_decode_queue_id_ = 1; 18 ImageController::s_next_image_decode_queue_id_ = 1;
19 19
20 ImageController::ImageController( 20 ImageController::ImageController(
21 base::SequencedTaskRunner* origin_task_runner, 21 base::SequencedTaskRunner* origin_task_runner,
22 scoped_refptr<base::SequencedTaskRunner> worker_task_runner) 22 scoped_refptr<base::SequencedTaskRunner> worker_task_runner)
23 : worker_task_runner_(std::move(worker_task_runner)), 23 : worker_task_runner_(std::move(worker_task_runner)),
24 origin_task_runner_(origin_task_runner), 24 origin_task_runner_(origin_task_runner),
25 paint_image_id_(PaintImage::GetNextId()),
vmpstr 2017/05/12 22:15:42 This is something that we need to talk about I thi
Khushal 2017/05/13 02:45:50 We'll definitely need PaintImage plumbed to cc, in
vmpstr 2017/05/15 15:02:55 My concern is that it doesn't feel that we're clea
Khushal 2017/05/15 21:22:14 ImageHijackCanvas is one use-case. The other one i
25 weak_ptr_factory_(this) {} 26 weak_ptr_factory_(this) {}
26 27
27 ImageController::~ImageController() { 28 ImageController::~ImageController() {
28 StopWorkerTasks(); 29 StopWorkerTasks();
29 for (auto& request : orphaned_decode_requests_) 30 for (auto& request : orphaned_decode_requests_)
30 request.callback.Run(request.id, ImageDecodeResult::FAILURE); 31 request.callback.Run(request.id, ImageDecodeResult::FAILURE);
31 } 32 }
32 33
33 void ImageController::StopWorkerTasks() { 34 void ImageController::StopWorkerTasks() {
34 // We can't have worker threads without a cache_ or a worker_task_runner_, so 35 // We can't have worker threads without a cache_ or a worker_task_runner_, so
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 189
189 // TODO(ccameron): The target color space specified here should match the 190 // TODO(ccameron): The target color space specified here should match the
190 // target color space that will be used at rasterization time. Leave this 191 // target color space that will be used at rasterization time. Leave this
191 // unspecified now, since that will match the rasterization-time color 192 // unspecified now, since that will match the rasterization-time color
192 // space while color correct rendering is disabled. 193 // space while color correct rendering is disabled.
193 gfx::ColorSpace target_color_space; 194 gfx::ColorSpace target_color_space;
194 195
195 DCHECK(image); 196 DCHECK(image);
196 bool is_image_lazy = image->isLazyGenerated(); 197 bool is_image_lazy = image->isLazyGenerated();
197 auto image_bounds = image->bounds(); 198 auto image_bounds = image->bounds();
198 DrawImage draw_image(std::move(image), image_bounds, kNone_SkFilterQuality, 199 DrawImage draw_image(
199 SkMatrix::I(), target_color_space); 200 PaintImage(paint_image_id_,
201 sk_ref_sp(const_cast<SkImage*>(image.release()))),
202 image_bounds, kNone_SkFilterQuality, SkMatrix::I(), target_color_space);
200 203
201 // Get the tasks for this decode. 204 // Get the tasks for this decode.
202 scoped_refptr<TileTask> task; 205 scoped_refptr<TileTask> task;
203 bool need_unref = false; 206 bool need_unref = false;
204 if (is_image_lazy) { 207 if (is_image_lazy) {
205 need_unref = 208 need_unref =
206 cache_->GetOutOfRasterDecodeTaskForImageAndRef(draw_image, &task); 209 cache_->GetOutOfRasterDecodeTaskForImageAndRef(draw_image, &task);
207 } 210 }
208 // If we don't need to unref this, we don't actually have a task. 211 // If we don't need to unref this, we don't actually have a task.
209 DCHECK(need_unref || !task); 212 DCHECK(need_unref || !task);
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 ImageController::ImageDecodeRequest::ImageDecodeRequest( 377 ImageController::ImageDecodeRequest::ImageDecodeRequest(
375 const ImageDecodeRequest& other) = default; 378 const ImageDecodeRequest& other) = default;
376 ImageController::ImageDecodeRequest::~ImageDecodeRequest() = default; 379 ImageController::ImageDecodeRequest::~ImageDecodeRequest() = default;
377 380
378 ImageController::ImageDecodeRequest& ImageController::ImageDecodeRequest:: 381 ImageController::ImageDecodeRequest& ImageController::ImageDecodeRequest::
379 operator=(ImageDecodeRequest&& other) = default; 382 operator=(ImageDecodeRequest&& other) = default;
380 ImageController::ImageDecodeRequest& ImageController::ImageDecodeRequest:: 383 ImageController::ImageDecodeRequest& ImageController::ImageDecodeRequest::
381 operator=(const ImageDecodeRequest& other) = default; 384 operator=(const ImageDecodeRequest& other) = default;
382 385
383 } // namespace cc 386 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698