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

Side by Side Diff: cc/raster/tile_task_worker_pool.cc

Issue 1470113002: Move TaskGraph creation to TileManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pinchfix
Patch Set: feedback Created 5 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
« no previous file with comments | « cc/raster/tile_task_worker_pool.h ('k') | cc/raster/tile_task_worker_pool_perftest.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/raster/tile_task_worker_pool.h" 5 #include "cc/raster/tile_task_worker_pool.h"
6 6
7 #include <algorithm>
8
9 #include "base/trace_event/trace_event.h" 7 #include "base/trace_event/trace_event.h"
10 #include "cc/playback/display_list_raster_source.h" 8 #include "cc/playback/display_list_raster_source.h"
11 #include "skia/ext/refptr.h" 9 #include "skia/ext/refptr.h"
12 #include "third_party/skia/include/core/SkCanvas.h" 10 #include "third_party/skia/include/core/SkCanvas.h"
13 #include "third_party/skia/include/core/SkDrawFilter.h" 11 #include "third_party/skia/include/core/SkDrawFilter.h"
14 #include "third_party/skia/include/core/SkSurface.h" 12 #include "third_party/skia/include/core/SkSurface.h"
15 13
16 namespace cc { 14 namespace cc {
17 namespace {
18
19 class TaskSetFinishedTaskImpl : public TileTask {
20 public:
21 explicit TaskSetFinishedTaskImpl(
22 base::SequencedTaskRunner* task_runner,
23 const base::Closure& on_task_set_finished_callback)
24 : task_runner_(task_runner),
25 on_task_set_finished_callback_(on_task_set_finished_callback) {}
26
27 // Overridden from Task:
28 void RunOnWorkerThread() override {
29 TRACE_EVENT0("cc", "TaskSetFinishedTaskImpl::RunOnWorkerThread");
30 TaskSetFinished();
31 }
32
33 // Overridden from TileTask:
34 void ScheduleOnOriginThread(TileTaskClient* client) override {}
35 void CompleteOnOriginThread(TileTaskClient* client) override {}
36
37 protected:
38 ~TaskSetFinishedTaskImpl() override {}
39
40 void TaskSetFinished() {
41 task_runner_->PostTask(FROM_HERE, on_task_set_finished_callback_);
42 }
43
44 private:
45 scoped_refptr<base::SequencedTaskRunner> task_runner_;
46 const base::Closure on_task_set_finished_callback_;
47
48 DISALLOW_COPY_AND_ASSIGN(TaskSetFinishedTaskImpl);
49 };
50
51 } // namespace
52
53 // This allows a micro benchmark system to run tasks with highest priority,
54 // since it should finish as quickly as possible.
55 size_t TileTaskWorkerPool::kBenchmarkTaskPriority = 0u;
56 // Task priorities that make sure task set finished tasks run before any
57 // other remaining tasks. This is combined with the task set type to ensure
58 // proper prioritization ordering between task set types.
59 size_t TileTaskWorkerPool::kTaskSetFinishedTaskPriorityBase = 1u;
60 // For correctness, |kTileTaskPriorityBase| must be greater than
61 // |kTaskSetFinishedTaskPriorityBase + kNumberOfTaskSets|.
62 size_t TileTaskWorkerPool::kTileTaskPriorityBase = 10u;
63 15
64 TileTaskWorkerPool::TileTaskWorkerPool() {} 16 TileTaskWorkerPool::TileTaskWorkerPool() {}
65 17
66 TileTaskWorkerPool::~TileTaskWorkerPool() {} 18 TileTaskWorkerPool::~TileTaskWorkerPool() {}
67 19
68 // static 20 // static
69 scoped_refptr<TileTask> TileTaskWorkerPool::CreateTaskSetFinishedTask(
70 base::SequencedTaskRunner* task_runner,
71 const base::Closure& on_task_set_finished_callback) {
72 return make_scoped_refptr(
73 new TaskSetFinishedTaskImpl(task_runner, on_task_set_finished_callback));
74 }
75
76 // static
77 void TileTaskWorkerPool::ScheduleTasksOnOriginThread(TileTaskClient* client, 21 void TileTaskWorkerPool::ScheduleTasksOnOriginThread(TileTaskClient* client,
78 TaskGraph* graph) { 22 TaskGraph* graph) {
79 TRACE_EVENT0("cc", "TileTaskWorkerPool::ScheduleTasksOnOriginThread"); 23 TRACE_EVENT0("cc", "TileTaskWorkerPool::ScheduleTasksOnOriginThread");
80 24
81 for (TaskGraph::Node::Vector::iterator it = graph->nodes.begin(); 25 for (TaskGraph::Node::Vector::iterator it = graph->nodes.begin();
82 it != graph->nodes.end(); ++it) { 26 it != graph->nodes.end(); ++it) {
83 TaskGraph::Node& node = *it; 27 TaskGraph::Node& node = *it;
84 TileTask* task = static_cast<TileTask*>(node.task); 28 TileTask* task = static_cast<TileTask*>(node.task);
85 29
86 if (!task->HasBeenScheduled()) { 30 if (!task->HasBeenScheduled()) {
87 task->WillSchedule(); 31 task->WillSchedule();
88 task->ScheduleOnOriginThread(client); 32 task->ScheduleOnOriginThread(client);
89 task->DidSchedule(); 33 task->DidSchedule();
90 } 34 }
91 } 35 }
92 } 36 }
93 37
94 // static
95 void TileTaskWorkerPool::InsertNodeForTask(TaskGraph* graph,
96 TileTask* task,
97 size_t priority,
98 size_t dependencies) {
99 DCHECK(std::find_if(graph->nodes.begin(), graph->nodes.end(),
100 [task](const TaskGraph::Node& node) {
101 return node.task == task;
102 }) == graph->nodes.end());
103 graph->nodes.push_back(TaskGraph::Node(task, priority, dependencies));
104 }
105
106 // static
107 void TileTaskWorkerPool::InsertNodesForRasterTask(
108 TaskGraph* graph,
109 RasterTask* raster_task,
110 const ImageDecodeTask::Vector& decode_tasks,
111 size_t priority) {
112 size_t dependencies = 0u;
113
114 // Insert image decode tasks.
115 for (ImageDecodeTask::Vector::const_iterator it = decode_tasks.begin();
116 it != decode_tasks.end(); ++it) {
117 ImageDecodeTask* decode_task = it->get();
118
119 // Skip if already decoded.
120 if (decode_task->HasCompleted())
121 continue;
122
123 dependencies++;
124
125 // Add decode task if it doesn't already exists in graph.
126 TaskGraph::Node::Vector::iterator decode_it =
127 std::find_if(graph->nodes.begin(), graph->nodes.end(),
128 [decode_task](const TaskGraph::Node& node) {
129 return node.task == decode_task;
130 });
131 if (decode_it == graph->nodes.end())
132 InsertNodeForTask(graph, decode_task, priority, 0u);
133
134 graph->edges.push_back(TaskGraph::Edge(decode_task, raster_task));
135 }
136
137 InsertNodeForTask(graph, raster_task, priority, dependencies);
138 }
139
140 static bool IsSupportedPlaybackToMemoryFormat(ResourceFormat format) { 38 static bool IsSupportedPlaybackToMemoryFormat(ResourceFormat format) {
141 switch (format) { 39 switch (format) {
142 case RGBA_4444: 40 case RGBA_4444:
143 case RGBA_8888: 41 case RGBA_8888:
144 case BGRA_8888: 42 case BGRA_8888:
145 return true; 43 return true;
146 case ALPHA_8: 44 case ALPHA_8:
147 case LUMINANCE_8: 45 case LUMINANCE_8:
148 case RGB_565: 46 case RGB_565:
149 case ETC1: 47 case ETC1:
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 123
226 SkImageInfo dst_info = 124 SkImageInfo dst_info =
227 SkImageInfo::Make(info.width(), info.height(), buffer_color_type, 125 SkImageInfo::Make(info.width(), info.height(), buffer_color_type,
228 info.alphaType(), info.profileType()); 126 info.alphaType(), info.profileType());
229 bool rv = canvas->readPixels(dst_info, memory, stride, 0, 0); 127 bool rv = canvas->readPixels(dst_info, memory, stride, 0, 0);
230 DCHECK(rv); 128 DCHECK(rv);
231 } 129 }
232 } 130 }
233 131
234 } // namespace cc 132 } // namespace cc
OLDNEW
« no previous file with comments | « cc/raster/tile_task_worker_pool.h ('k') | cc/raster/tile_task_worker_pool_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698