image_raster_worker_pool.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file.
4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "cc/resources/image_raster_worker_pool.h"
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/debug/trace_event.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/values.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/debug/traced_value.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "cc/resources/resource.h"
11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmapDevice.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace cc {
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace {
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class ImageWorkerPoolTaskImpl : public internal::WorkerPoolTask {
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public:
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  typedef base::Callback<void(bool was_canceled)> Reply;
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ImageWorkerPoolTaskImpl(internal::RasterWorkerPoolTask* task,
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                          uint8_t* buffer,
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                          int stride,
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                          const Reply& reply)
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      : task_(task),
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        buffer_(buffer),
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        stride_(stride),
28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        reply_(reply) {
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Overridden from internal::WorkerPoolTask:
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    TRACE_EVENT0("cc", "ImageWorkerPoolTaskImpl::RunOnWorkerThread");
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    if (!buffer_)
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      return;
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    task_->RunOnWorkerThread(thread_index,
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                             buffer_,
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                             task_->resource()->size(),
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                             stride_);
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void CompleteOnOriginThread() OVERRIDE {
43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    reply_.Run(!HasFinishedRunning());
44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual ~ImageWorkerPoolTaskImpl() {}
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  scoped_refptr<internal::RasterWorkerPoolTask> task_;
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  uint8_t* buffer_;
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  int stride_;
52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  const Reply reply_;
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ImageWorkerPoolTaskImpl);
55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}  // namespace
58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ImageRasterWorkerPool::ImageRasterWorkerPool(
60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ResourceProvider* resource_provider, size_t num_threads)
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    : RasterWorkerPool(resource_provider, num_threads),
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      raster_tasks_pending_(false),
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      raster_tasks_required_for_activation_pending_(false) {
64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ImageRasterWorkerPool::~ImageRasterWorkerPool() {
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  DCHECK_EQ(0u, image_tasks_.size());
68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
69868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) {
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  TRACE_EVENT0("cc", "ImageRasterWorkerPool::ScheduleTasks");
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
73868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  RasterWorkerPool::SetRasterTasks(queue);
74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (!raster_tasks_pending_)
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this);
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  raster_tasks_pending_ = true;
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  raster_tasks_required_for_activation_pending_ = true;
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  unsigned priority = 0u;
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TaskGraph graph;
83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_refptr<internal::WorkerPoolTask>
85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      new_raster_required_for_activation_finished_task(
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          CreateRasterRequiredForActivationFinishedTask());
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  internal::GraphNode* raster_required_for_activation_finished_node =
88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateGraphNodeForTask(
89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          new_raster_required_for_activation_finished_task.get(),
90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          priority++,
91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &graph);
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task(
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateRasterFinishedTask());
95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  internal::GraphNode* raster_finished_node =
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateGraphNodeForTask(new_raster_finished_task.get(),
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                             priority++,
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                             &graph);
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  for (RasterTaskVector::const_iterator it = raster_tasks().begin();
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)       it != raster_tasks().end(); ++it) {
1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    internal::RasterWorkerPoolTask* task = it->get();
103d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    DCHECK(!task->HasCompleted());
104d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    DCHECK(!task->WasCanceled());
105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    TaskMap::iterator image_it = image_tasks_.find(task);
107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if (image_it != image_tasks_.end()) {
1087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      internal::WorkerPoolTask* image_task = image_it->second.get();
109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      CreateGraphNodeForImageTask(
110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          image_task,
111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          task->dependencies(),
112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          priority++,
113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          IsRasterTaskRequiredForActivation(task),
114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          raster_required_for_activation_finished_node,
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          raster_finished_node,
116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &graph);
117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      continue;
118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
120868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    // Acquire image for resource.
121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    resource_provider()->AcquireImage(task->resource()->id());
122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    // Map image for raster.
124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    uint8* buffer = resource_provider()->MapImage(task->resource()->id());
125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    int stride = resource_provider()->GetImageStride(task->resource()->id());
126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    scoped_refptr<internal::WorkerPoolTask> new_image_task(
128868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        new ImageWorkerPoolTaskImpl(
129868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            task,
130868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            buffer,
131868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            stride,
132868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            base::Bind(&ImageRasterWorkerPool::OnRasterTaskCompleted,
133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       base::Unretained(this),
134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       make_scoped_refptr(task))));
1357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    image_tasks_[task] = new_image_task;
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    CreateGraphNodeForImageTask(
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        new_image_task.get(),
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        task->dependencies(),
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        priority++,
140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        IsRasterTaskRequiredForActivation(task),
141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        raster_required_for_activation_finished_node,
142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        raster_finished_node,
143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        &graph);
144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
145868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  SetTaskGraph(&graph);
147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  set_raster_finished_task(new_raster_finished_task);
149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  set_raster_required_for_activation_finished_task(
150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      new_raster_required_for_activation_finished_task);
151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  TRACE_EVENT_ASYNC_STEP_INTO1(
153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "cc", "ScheduledTasks", this, "rasterizing",
154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "state", TracedValue::FromValue(StateAsValue().release()));
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
157d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)ResourceFormat ImageRasterWorkerPool::GetResourceFormat() const {
158d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Only format supported by CHROMIUM_map_image
159d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return RGBA_8888;
1603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ImageRasterWorkerPool::OnRasterTasksFinished() {
163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DCHECK(raster_tasks_pending_);
164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  raster_tasks_pending_ = false;
165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this);
1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  client()->DidFinishRunningTasks();
167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ImageRasterWorkerPool::OnRasterTasksRequiredForActivationFinished() {
170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DCHECK(raster_tasks_required_for_activation_pending_);
171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  raster_tasks_required_for_activation_pending_ = false;
1721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  TRACE_EVENT_ASYNC_STEP_INTO1(
173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "cc", "ScheduledTasks", this, "rasterizing",
174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "state", TracedValue::FromValue(StateAsValue().release()));
1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  client()->DidFinishRunningTasksRequiredForActivation();
176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
177868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ImageRasterWorkerPool::OnRasterTaskCompleted(
179868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    scoped_refptr<internal::RasterWorkerPoolTask> task,
180868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    bool was_canceled) {
181868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  TRACE_EVENT1("cc", "ImageRasterWorkerPool::OnRasterTaskCompleted",
182868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)               "was_canceled", was_canceled);
183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  DCHECK(image_tasks_.find(task.get()) != image_tasks_.end());
185868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
186868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Balanced with MapImage() call in ScheduleTasks().
187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  resource_provider()->UnmapImage(task->resource()->id());
188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  task->DidRun(was_canceled);
190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  task->WillComplete();
191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  task->CompleteOnOriginThread();
192868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  task->DidComplete();
193868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  image_tasks_.erase(task.get());
195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochscoped_ptr<base::Value> ImageRasterWorkerPool::StateAsValue() const {
198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue);
199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  state->SetBoolean("tasks_required_for_activation_pending",
201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                    raster_tasks_required_for_activation_pending_);
202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  state->Set("scheduled_state", ScheduledStateAsValue().release());
203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return state.PassAs<base::Value>();
204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static
207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ImageRasterWorkerPool::CreateGraphNodeForImageTask(
208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    internal::WorkerPoolTask* image_task,
209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const TaskVector& decode_tasks,
210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    unsigned priority,
211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    bool is_required_for_activation,
212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    internal::GraphNode* raster_required_for_activation_finished_node,
213eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    internal::GraphNode* raster_finished_node,
214eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    TaskGraph* graph) {
215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  internal::GraphNode* image_node = CreateGraphNodeForRasterTask(image_task,
216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                 decode_tasks,
217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                 priority,
218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                                                 graph);
219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  if (is_required_for_activation) {
221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    raster_required_for_activation_finished_node->add_dependency();
222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    image_node->add_dependent(raster_required_for_activation_finished_node);
223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  raster_finished_node->add_dependency();
226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  image_node->add_dependent(raster_finished_node);
227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
229868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}  // namespace cc
230