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

Side by Side Diff: cc/resources/bitmap_tile_task_worker_pool.cc

Issue 786583002: cc: Renaming Rasterizer and RasterWorkerPool interfaces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test. Update include files alphabetic orders. Created 6 years 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/resources/bitmap_raster_worker_pool.h" 5 #include "cc/resources/bitmap_tile_task_worker_pool.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/debug/trace_event_argument.h" 10 #include "base/debug/trace_event_argument.h"
11 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
12 #include "cc/debug/traced_value.h" 12 #include "cc/debug/traced_value.h"
13 #include "cc/resources/raster_buffer.h" 13 #include "cc/resources/raster_buffer.h"
14 #include "cc/resources/raster_source.h" 14 #include "cc/resources/raster_source.h"
15 #include "cc/resources/resource.h" 15 #include "cc/resources/resource.h"
16 16
17 namespace cc { 17 namespace cc {
18 namespace { 18 namespace {
19 19
20 class RasterBufferImpl : public RasterBuffer { 20 class RasterBufferImpl : public RasterBuffer {
21 public: 21 public:
22 RasterBufferImpl(ResourceProvider* resource_provider, 22 RasterBufferImpl(ResourceProvider* resource_provider,
23 const Resource* resource) 23 const Resource* resource)
24 : lock_(resource_provider, resource->id()), resource_(resource) {} 24 : lock_(resource_provider, resource->id()), resource_(resource) {}
25 25
26 // Overridden from RasterBuffer: 26 // Overridden from RasterBuffer:
27 void Playback(const RasterSource* raster_source, 27 void Playback(const RasterSource* raster_source,
28 const gfx::Rect& rect, 28 const gfx::Rect& rect,
29 float scale) override { 29 float scale) override {
30 RasterWorkerPool::PlaybackToMemory(lock_.sk_bitmap().getPixels(), 30 TileTaskWorkerPool::PlaybackToMemory(lock_.sk_bitmap().getPixels(),
31 resource_->format(), resource_->size(), 31 resource_->format(), resource_->size(),
32 0, raster_source, rect, scale); 32 0, raster_source, rect, scale);
33 } 33 }
34 34
35 private: 35 private:
36 ResourceProvider::ScopedWriteLockSoftware lock_; 36 ResourceProvider::ScopedWriteLockSoftware lock_;
37 const Resource* resource_; 37 const Resource* resource_;
38 38
39 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); 39 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl);
40 }; 40 };
41 41
42 } // namespace 42 } // namespace
43 43
44 // static 44 // static
45 scoped_ptr<RasterWorkerPool> BitmapRasterWorkerPool::Create( 45 scoped_ptr<TileTaskWorkerPool> BitmapTileTaskWorkerPool::Create(
46 base::SequencedTaskRunner* task_runner, 46 base::SequencedTaskRunner* task_runner,
47 TaskGraphRunner* task_graph_runner, 47 TaskGraphRunner* task_graph_runner,
48 ResourceProvider* resource_provider) { 48 ResourceProvider* resource_provider) {
49 return make_scoped_ptr<RasterWorkerPool>(new BitmapRasterWorkerPool( 49 return make_scoped_ptr<TileTaskWorkerPool>(new BitmapTileTaskWorkerPool(
50 task_runner, task_graph_runner, resource_provider)); 50 task_runner, task_graph_runner, resource_provider));
51 } 51 }
52 52
53 BitmapRasterWorkerPool::BitmapRasterWorkerPool( 53 BitmapTileTaskWorkerPool::BitmapTileTaskWorkerPool(
54 base::SequencedTaskRunner* task_runner, 54 base::SequencedTaskRunner* task_runner,
55 TaskGraphRunner* task_graph_runner, 55 TaskGraphRunner* task_graph_runner,
56 ResourceProvider* resource_provider) 56 ResourceProvider* resource_provider)
57 : task_runner_(task_runner), 57 : task_runner_(task_runner),
58 task_graph_runner_(task_graph_runner), 58 task_graph_runner_(task_graph_runner),
59 namespace_token_(task_graph_runner->GetNamespaceToken()), 59 namespace_token_(task_graph_runner->GetNamespaceToken()),
60 resource_provider_(resource_provider), 60 resource_provider_(resource_provider),
61 raster_finished_weak_ptr_factory_(this) { 61 task_set_finished_weak_ptr_factory_(this) {
62 } 62 }
63 63
64 BitmapRasterWorkerPool::~BitmapRasterWorkerPool() { 64 BitmapTileTaskWorkerPool::~BitmapTileTaskWorkerPool() {
65 } 65 }
66 66
67 Rasterizer* BitmapRasterWorkerPool::AsRasterizer() { 67 TileTaskRunner* BitmapTileTaskWorkerPool::AsTileTaskRunner() {
68 return this; 68 return this;
69 } 69 }
70 70
71 void BitmapRasterWorkerPool::SetClient(RasterizerClient* client) { 71 void BitmapTileTaskWorkerPool::SetClient(TileTaskRunnerClient* client) {
72 client_ = client; 72 client_ = client;
73 } 73 }
74 74
75 void BitmapRasterWorkerPool::Shutdown() { 75 void BitmapTileTaskWorkerPool::Shutdown() {
76 TRACE_EVENT0("cc", "BitmapRasterWorkerPool::Shutdown"); 76 TRACE_EVENT0("cc", "BitmapTileTaskWorkerPool::Shutdown");
77 77
78 TaskGraph empty; 78 TaskGraph empty;
79 task_graph_runner_->ScheduleTasks(namespace_token_, &empty); 79 task_graph_runner_->ScheduleTasks(namespace_token_, &empty);
80 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_); 80 task_graph_runner_->WaitForTasksToFinishRunning(namespace_token_);
81 } 81 }
82 82
83 void BitmapRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { 83 void BitmapTileTaskWorkerPool::ScheduleTasks(TileTaskQueue* queue) {
84 TRACE_EVENT0("cc", "BitmapRasterWorkerPool::ScheduleTasks"); 84 TRACE_EVENT0("cc", "BitmapTileTaskWorkerPool::ScheduleTasks");
85 85
86 if (raster_pending_.none()) 86 if (tasks_pending_.none())
87 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this); 87 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this);
88 88
89 // Mark all task sets as pending. 89 // Mark all task sets as pending.
90 raster_pending_.set(); 90 tasks_pending_.set();
91 91
92 unsigned priority = kRasterTaskPriorityBase; 92 unsigned priority = kTileTaskPriorityBase;
93 93
94 graph_.Reset(); 94 graph_.Reset();
95 95
96 // Cancel existing OnRasterFinished callbacks. 96 // Cancel existing OnTaskSetFinished callbacks.
97 raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); 97 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs();
98 98
99 scoped_refptr<RasterizerTask> new_raster_finished_tasks[kNumberOfTaskSets]; 99 scoped_refptr<TileTask> new_task_set_finished_tasks[kNumberOfTaskSets];
100 100
101 size_t task_count[kNumberOfTaskSets] = {0}; 101 size_t task_count[kNumberOfTaskSets] = {0};
102 102
103 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) { 103 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
104 new_raster_finished_tasks[task_set] = CreateRasterFinishedTask( 104 new_task_set_finished_tasks[task_set] = CreateTaskSetFinishedTask(
105 task_runner_.get(), 105 task_runner_.get(),
106 base::Bind(&BitmapRasterWorkerPool::OnRasterFinished, 106 base::Bind(&BitmapTileTaskWorkerPool::OnTaskSetFinished,
107 raster_finished_weak_ptr_factory_.GetWeakPtr(), 107 task_set_finished_weak_ptr_factory_.GetWeakPtr(), task_set));
108 task_set));
109 } 108 }
110 109
111 for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin(); 110 for (TileTaskQueue::Item::Vector::const_iterator it = queue->items.begin();
112 it != queue->items.end(); 111 it != queue->items.end(); ++it) {
113 ++it) { 112 const TileTaskQueue::Item& item = *it;
114 const RasterTaskQueue::Item& item = *it;
115 RasterTask* task = item.task; 113 RasterTask* task = item.task;
116 DCHECK(!task->HasCompleted()); 114 DCHECK(!task->HasCompleted());
117 115
118 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) { 116 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
119 if (!item.task_sets[task_set]) 117 if (!item.task_sets[task_set])
120 continue; 118 continue;
121 119
122 ++task_count[task_set]; 120 ++task_count[task_set];
123 121
124 graph_.edges.push_back( 122 graph_.edges.push_back(
125 TaskGraph::Edge(task, new_raster_finished_tasks[task_set].get())); 123 TaskGraph::Edge(task, new_task_set_finished_tasks[task_set].get()));
126 } 124 }
127 125
128 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++); 126 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++);
129 } 127 }
130 128
131 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) { 129 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) {
132 InsertNodeForTask(&graph_, 130 InsertNodeForTask(&graph_, new_task_set_finished_tasks[task_set].get(),
133 new_raster_finished_tasks[task_set].get(), 131 kTaskSetFinishedTaskPriority, task_count[task_set]);
134 kRasterFinishedTaskPriority,
135 task_count[task_set]);
136 } 132 }
137 133
138 ScheduleTasksOnOriginThread(this, &graph_); 134 ScheduleTasksOnOriginThread(this, &graph_);
139 task_graph_runner_->ScheduleTasks(namespace_token_, &graph_); 135 task_graph_runner_->ScheduleTasks(namespace_token_, &graph_);
140 136
141 std::copy(new_raster_finished_tasks, 137 std::copy(new_task_set_finished_tasks,
142 new_raster_finished_tasks + kNumberOfTaskSets, 138 new_task_set_finished_tasks + kNumberOfTaskSets,
143 raster_finished_tasks_); 139 task_set_finished_tasks_);
144 140
145 TRACE_EVENT_ASYNC_STEP_INTO1( 141 TRACE_EVENT_ASYNC_STEP_INTO1("cc", "ScheduledTasks", this, "running", "state",
146 "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue()); 142 StateAsValue());
147 } 143 }
148 144
149 void BitmapRasterWorkerPool::CheckForCompletedTasks() { 145 void BitmapTileTaskWorkerPool::CheckForCompletedTasks() {
150 TRACE_EVENT0("cc", "BitmapRasterWorkerPool::CheckForCompletedTasks"); 146 TRACE_EVENT0("cc", "BitmapTileTaskWorkerPool::CheckForCompletedTasks");
151 147
152 task_graph_runner_->CollectCompletedTasks(namespace_token_, 148 task_graph_runner_->CollectCompletedTasks(namespace_token_,
153 &completed_tasks_); 149 &completed_tasks_);
154 for (Task::Vector::const_iterator it = completed_tasks_.begin(); 150 for (Task::Vector::const_iterator it = completed_tasks_.begin();
155 it != completed_tasks_.end(); 151 it != completed_tasks_.end(); ++it) {
156 ++it) { 152 TileTask* task = static_cast<TileTask*>(it->get());
157 RasterizerTask* task = static_cast<RasterizerTask*>(it->get());
158 153
159 task->WillComplete(); 154 task->WillComplete();
160 task->CompleteOnOriginThread(this); 155 task->CompleteOnOriginThread(this);
161 task->DidComplete(); 156 task->DidComplete();
162 157
163 task->RunReplyOnOriginThread(); 158 task->RunReplyOnOriginThread();
164 } 159 }
165 completed_tasks_.clear(); 160 completed_tasks_.clear();
166 } 161 }
167 162
168 scoped_ptr<RasterBuffer> BitmapRasterWorkerPool::AcquireBufferForRaster( 163 scoped_ptr<RasterBuffer> BitmapTileTaskWorkerPool::AcquireBufferForRaster(
169 const Resource* resource) { 164 const Resource* resource) {
170 return make_scoped_ptr<RasterBuffer>( 165 return make_scoped_ptr<RasterBuffer>(
171 new RasterBufferImpl(resource_provider_, resource)); 166 new RasterBufferImpl(resource_provider_, resource));
172 } 167 }
173 168
174 void BitmapRasterWorkerPool::ReleaseBufferForRaster( 169 void BitmapTileTaskWorkerPool::ReleaseBufferForRaster(
175 scoped_ptr<RasterBuffer> buffer) { 170 scoped_ptr<RasterBuffer> buffer) {
176 // Nothing to do here. RasterBufferImpl destructor cleans up after itself. 171 // Nothing to do here. RasterBufferImpl destructor cleans up after itself.
177 } 172 }
178 173
179 void BitmapRasterWorkerPool::OnRasterFinished(TaskSet task_set) { 174 void BitmapTileTaskWorkerPool::OnTaskSetFinished(TaskSet task_set) {
180 TRACE_EVENT1( 175 TRACE_EVENT1("cc", "BitmapTileTaskWorkerPool::OnTaskSetFinished", "task_set",
181 "cc", "BitmapRasterWorkerPool::OnRasterFinished", "task_set", task_set); 176 task_set);
182 177
183 DCHECK(raster_pending_[task_set]); 178 DCHECK(tasks_pending_[task_set]);
184 raster_pending_[task_set] = false; 179 tasks_pending_[task_set] = false;
185 if (raster_pending_.any()) { 180 if (tasks_pending_.any()) {
186 TRACE_EVENT_ASYNC_STEP_INTO1( 181 TRACE_EVENT_ASYNC_STEP_INTO1("cc", "ScheduledTasks", this, "running",
187 "cc", "ScheduledTasks", this, "rasterizing", "state", StateAsValue()); 182 "state", StateAsValue());
188 } else { 183 } else {
189 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); 184 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this);
190 } 185 }
191 client_->DidFinishRunningTasks(task_set); 186 client_->DidFinishRunningTileTasks(task_set);
192 } 187 }
193 188
194 scoped_refptr<base::debug::ConvertableToTraceFormat> 189 scoped_refptr<base::debug::ConvertableToTraceFormat>
195 BitmapRasterWorkerPool::StateAsValue() const { 190 BitmapTileTaskWorkerPool::StateAsValue() const {
196 scoped_refptr<base::debug::TracedValue> state = 191 scoped_refptr<base::debug::TracedValue> state =
197 new base::debug::TracedValue(); 192 new base::debug::TracedValue();
198 193
199 state->BeginArray("tasks_pending"); 194 state->BeginArray("tasks_pending");
200 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set) 195 for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; ++task_set)
201 state->AppendBoolean(raster_pending_[task_set]); 196 state->AppendBoolean(tasks_pending_[task_set]);
202 state->EndArray(); 197 state->EndArray();
203 return state; 198 return state;
204 } 199 }
205 200
206 } // namespace cc 201 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698