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