| 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/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" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 std::vector<DrawImage> images, | 171 std::vector<DrawImage> images, |
| 172 const ImageDecodeCache::TracingInfo& tracing_info) { | 172 const ImageDecodeCache::TracingInfo& tracing_info) { |
| 173 std::vector<scoped_refptr<TileTask>> new_tasks; | 173 std::vector<scoped_refptr<TileTask>> new_tasks; |
| 174 GetTasksForImagesAndRef(&images, &new_tasks, tracing_info); | 174 GetTasksForImagesAndRef(&images, &new_tasks, tracing_info); |
| 175 UnrefImages(predecode_locked_images_); | 175 UnrefImages(predecode_locked_images_); |
| 176 predecode_locked_images_ = std::move(images); | 176 predecode_locked_images_ = std::move(images); |
| 177 return new_tasks; | 177 return new_tasks; |
| 178 } | 178 } |
| 179 | 179 |
| 180 ImageController::ImageDecodeRequestId ImageController::QueueImageDecode( | 180 ImageController::ImageDecodeRequestId ImageController::QueueImageDecode( |
| 181 sk_sp<const SkImage> image, | 181 const PaintImage& image, |
| 182 const ImageDecodedCallback& callback) { | 182 const ImageDecodedCallback& callback) { |
| 183 // We must not receive any image requests if we have no worker. | 183 // We must not receive any image requests if we have no worker. |
| 184 CHECK(worker_task_runner_); | 184 CHECK(worker_task_runner_); |
| 185 | 185 |
| 186 // Generate the next id. | 186 // Generate the next id. |
| 187 ImageDecodeRequestId id = s_next_image_decode_queue_id_++; | 187 ImageDecodeRequestId id = s_next_image_decode_queue_id_++; |
| 188 | 188 |
| 189 // TODO(ccameron): The target color space specified here should match the | 189 // TODO(ccameron): The target color space specified here should match the |
| 190 // target color space that will be used at rasterization time. Leave this | 190 // target color space that will be used at rasterization time. Leave this |
| 191 // unspecified now, since that will match the rasterization-time color | 191 // unspecified now, since that will match the rasterization-time color |
| 192 // space while color correct rendering is disabled. | 192 // space while color correct rendering is disabled. |
| 193 gfx::ColorSpace target_color_space; | 193 gfx::ColorSpace target_color_space; |
| 194 | 194 |
| 195 DCHECK(image); | 195 DCHECK(image); |
| 196 bool is_image_lazy = image->isLazyGenerated(); | 196 bool is_image_lazy = image.sk_image()->isLazyGenerated(); |
| 197 auto image_bounds = image->bounds(); | 197 auto image_bounds = image.sk_image()->bounds(); |
| 198 // TODO(khushalsagar): Eliminate the use of an incorrect id here and have all | 198 DrawImage draw_image(PaintImage(image), image_bounds, kNone_SkFilterQuality, |
| 199 // call-sites provide PaintImage to the ImageController. | 199 SkMatrix::I(), target_color_space); |
| 200 DrawImage draw_image( | |
| 201 PaintImage(PaintImage::kUnknownStableId, | |
| 202 sk_sp<SkImage>(const_cast<SkImage*>(image.release()))), | |
| 203 image_bounds, kNone_SkFilterQuality, SkMatrix::I(), target_color_space); | |
| 204 | 200 |
| 205 // Get the tasks for this decode. | 201 // Get the tasks for this decode. |
| 206 scoped_refptr<TileTask> task; | 202 scoped_refptr<TileTask> task; |
| 207 bool need_unref = false; | 203 bool need_unref = false; |
| 208 if (is_image_lazy) { | 204 if (is_image_lazy) { |
| 209 need_unref = | 205 need_unref = |
| 210 cache_->GetOutOfRasterDecodeTaskForImageAndRef(draw_image, &task); | 206 cache_->GetOutOfRasterDecodeTaskForImageAndRef(draw_image, &task); |
| 211 } | 207 } |
| 212 // If we don't need to unref this, we don't actually have a task. | 208 // If we don't need to unref this, we don't actually have a task. |
| 213 DCHECK(need_unref || !task); | 209 DCHECK(need_unref || !task); |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 ImageController::ImageDecodeRequest::ImageDecodeRequest( | 374 ImageController::ImageDecodeRequest::ImageDecodeRequest( |
| 379 const ImageDecodeRequest& other) = default; | 375 const ImageDecodeRequest& other) = default; |
| 380 ImageController::ImageDecodeRequest::~ImageDecodeRequest() = default; | 376 ImageController::ImageDecodeRequest::~ImageDecodeRequest() = default; |
| 381 | 377 |
| 382 ImageController::ImageDecodeRequest& ImageController::ImageDecodeRequest:: | 378 ImageController::ImageDecodeRequest& ImageController::ImageDecodeRequest:: |
| 383 operator=(ImageDecodeRequest&& other) = default; | 379 operator=(ImageDecodeRequest&& other) = default; |
| 384 ImageController::ImageDecodeRequest& ImageController::ImageDecodeRequest:: | 380 ImageController::ImageDecodeRequest& ImageController::ImageDecodeRequest:: |
| 385 operator=(const ImageDecodeRequest& other) = default; | 381 operator=(const ImageDecodeRequest& other) = default; |
| 386 | 382 |
| 387 } // namespace cc | 383 } // namespace cc |
| OLD | NEW |