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

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

Issue 1854723002: cc: Simplify task and its derived classes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Corrected scope of dependencies. 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
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 "cc/debug/devtools_instrumentation.h" 7 #include "cc/debug/devtools_instrumentation.h"
8 #include "cc/raster/tile_task_runner.h" 8 #include "cc/raster/tile_task_runner.h"
9 #include "skia/ext/refptr.h" 9 #include "skia/ext/refptr.h"
10 10
11 namespace cc { 11 namespace cc {
12 12
13 class ImageDecodeTaskImpl : public ImageDecodeTask { 13 class ImageDecodeTaskImpl : public Task {
14 public: 14 public:
15 ImageDecodeTaskImpl(GpuImageDecodeController* controller, 15 ImageDecodeTaskImpl(GpuImageDecodeController* controller,
16 const DrawImage& image, 16 const DrawImage& image,
17 uint64_t source_prepare_tiles_id) 17 uint64_t source_prepare_tiles_id)
18 : controller_(controller), 18 : controller_(controller),
19 image_(image), 19 image_(image),
20 image_ref_(skia::SharePtr(image.image())), 20 image_ref_(skia::SharePtr(image.image())),
21 source_prepare_tiles_id_(source_prepare_tiles_id) {} 21 source_prepare_tiles_id_(source_prepare_tiles_id) {}
22 22
23 // Overridden from Task: 23 // Overridden from Task:
24 void ScheduleOnOriginThread() override {}
25 void CompleteOnOriginThread() override {
26 controller_->RemovePendingTaskForImage(image_);
27 }
24 void RunOnWorkerThread() override { 28 void RunOnWorkerThread() override {
25 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", "gpu", 29 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", "gpu",
26 "source_prepare_tiles_id", source_prepare_tiles_id_); 30 "source_prepare_tiles_id", source_prepare_tiles_id_);
27 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( 31 devtools_instrumentation::ScopedImageDecodeTask image_decode_task(
28 image_ref_.get()); 32 image_ref_.get());
29 controller_->DecodeImage(image_); 33 controller_->DecodeImage(image_);
30 } 34 }
31 35
32 // Overridden from TileTask:
33 void ScheduleOnOriginThread(TileTaskClient* client) override {}
34 void CompleteOnOriginThread(TileTaskClient* client) override {
35 controller_->RemovePendingTaskForImage(image_);
36 }
37
38 protected: 36 protected:
39 ~ImageDecodeTaskImpl() override {} 37 ~ImageDecodeTaskImpl() override {}
40 38
41 private: 39 private:
42 GpuImageDecodeController* controller_; 40 GpuImageDecodeController* controller_;
43 DrawImage image_; 41 DrawImage image_;
44 skia::RefPtr<const SkImage> image_ref_; 42 skia::RefPtr<const SkImage> image_ref_;
45 uint64_t source_prepare_tiles_id_; 43 uint64_t source_prepare_tiles_id_;
46 44
47 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl); 45 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl);
48 }; 46 };
49 47
50 GpuImageDecodeController::GpuImageDecodeController() {} 48 GpuImageDecodeController::GpuImageDecodeController() {}
51 49
52 GpuImageDecodeController::~GpuImageDecodeController() {} 50 GpuImageDecodeController::~GpuImageDecodeController() {}
53 51
54 bool GpuImageDecodeController::GetTaskForImageAndRef( 52 bool GpuImageDecodeController::GetTaskForImageAndRef(
55 const DrawImage& image, 53 const DrawImage& image,
56 uint64_t prepare_tiles_id, 54 uint64_t prepare_tiles_id,
57 scoped_refptr<ImageDecodeTask>* task) { 55 scoped_refptr<Task>* task) {
58 auto image_id = image.image()->uniqueID(); 56 auto image_id = image.image()->uniqueID();
59 base::AutoLock lock(lock_); 57 base::AutoLock lock(lock_);
60 if (prerolled_images_.count(image_id) != 0) { 58 if (prerolled_images_.count(image_id) != 0) {
61 *task = nullptr; 59 *task = nullptr;
62 return false; 60 return false;
63 } 61 }
64 62
65 scoped_refptr<ImageDecodeTask>& existing_task = 63 scoped_refptr<Task>& existing_task = pending_image_tasks_[image_id];
66 pending_image_tasks_[image_id];
67 if (!existing_task) { 64 if (!existing_task) {
68 existing_task = make_scoped_refptr( 65 existing_task = make_scoped_refptr(
69 new ImageDecodeTaskImpl(this, image, prepare_tiles_id)); 66 new ImageDecodeTaskImpl(this, image, prepare_tiles_id));
70 } 67 }
71 *task = existing_task; 68 *task = existing_task;
72 return false; 69 return false;
73 } 70 }
74 71
75 void GpuImageDecodeController::UnrefImage(const DrawImage& image) { 72 void GpuImageDecodeController::UnrefImage(const DrawImage& image) {
76 NOTREACHED(); 73 NOTREACHED();
(...skipping 16 matching lines...) Expand all
93 prerolled_images_.insert(image.image()->uniqueID()); 90 prerolled_images_.insert(image.image()->uniqueID());
94 } 91 }
95 92
96 void GpuImageDecodeController::RemovePendingTaskForImage( 93 void GpuImageDecodeController::RemovePendingTaskForImage(
97 const DrawImage& image) { 94 const DrawImage& image) {
98 base::AutoLock lock(lock_); 95 base::AutoLock lock(lock_);
99 pending_image_tasks_.erase(image.image()->uniqueID()); 96 pending_image_tasks_.erase(image.image()->uniqueID());
100 } 97 }
101 98
102 } // namespace cc 99 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698