| OLD | NEW |
| 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/resources/raster_worker_pool.h" | 5 #include "cc/resources/raster_worker_pool.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/debug/trace_event_synthetic_delay.h" | 9 #include "base/debug/trace_event_synthetic_delay.h" |
| 10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 Analyze(picture_pile_->GetCloneForDrawingOnThread(thread_index)); | 105 Analyze(picture_pile_->GetCloneForDrawingOnThread(thread_index)); |
| 106 if (!canvas_ || analysis_.is_solid_color) | 106 if (!canvas_ || analysis_.is_solid_color) |
| 107 return; | 107 return; |
| 108 Raster(picture_pile_->GetCloneForDrawingOnThread(thread_index)); | 108 Raster(picture_pile_->GetCloneForDrawingOnThread(thread_index)); |
| 109 } | 109 } |
| 110 | 110 |
| 111 // Overridden from internal::WorkerPoolTask: | 111 // Overridden from internal::WorkerPoolTask: |
| 112 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) | 112 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) |
| 113 OVERRIDE { | 113 OVERRIDE { |
| 114 DCHECK(!canvas_); | 114 DCHECK(!canvas_); |
| 115 canvas_ = client->AcquireCanvasForRaster(this); | 115 canvas_ = client->AcquireCanvasForRaster(this, resource()); |
| 116 } | 116 } |
| 117 virtual void RunOnOriginThread() OVERRIDE { | 117 virtual void RunOnOriginThread() OVERRIDE { |
| 118 TRACE_EVENT0("cc", "RasterWorkerPoolTaskImpl::RunOnOriginThread"); | 118 TRACE_EVENT0("cc", "RasterWorkerPoolTaskImpl::RunOnOriginThread"); |
| 119 | 119 |
| 120 Analyze(picture_pile_); | 120 Analyze(picture_pile_); |
| 121 if (!canvas_ || analysis_.is_solid_color) | 121 if (!canvas_ || analysis_.is_solid_color) |
| 122 return; | 122 return; |
| 123 // TODO(alokp): Use a trace macro to push/pop markers. | 123 // TODO(alokp): Use a trace macro to push/pop markers. |
| 124 // Using push/pop functions directly incurs cost to evaluate function | 124 // Using push/pop functions directly incurs cost to evaluate function |
| 125 // arguments even when tracing is disabled. | 125 // arguments even when tracing is disabled. |
| 126 DCHECK(context_provider_); | 126 DCHECK(context_provider_); |
| 127 context_provider_->ContextGL()->PushGroupMarkerEXT( | 127 context_provider_->ContextGL()->PushGroupMarkerEXT( |
| 128 0, | 128 0, |
| 129 base::StringPrintf( | 129 base::StringPrintf( |
| 130 "Raster-%d-%d-%p", source_frame_number_, layer_id_, tile_id_) | 130 "Raster-%d-%d-%p", source_frame_number_, layer_id_, tile_id_) |
| 131 .c_str()); | 131 .c_str()); |
| 132 Raster(picture_pile_); | 132 Raster(picture_pile_); |
| 133 context_provider_->ContextGL()->PopGroupMarkerEXT(); | 133 context_provider_->ContextGL()->PopGroupMarkerEXT(); |
| 134 } | 134 } |
| 135 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) | 135 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) |
| 136 OVERRIDE { | 136 OVERRIDE { |
| 137 canvas_ = NULL; | 137 canvas_ = NULL; |
| 138 client->OnRasterCompleted(this, analysis_); | 138 client->ReleaseCanvasForRaster(this, resource()); |
| 139 } | 139 } |
| 140 virtual void RunReplyOnOriginThread() OVERRIDE { | 140 virtual void RunReplyOnOriginThread() OVERRIDE { |
| 141 DCHECK(!canvas_); | 141 DCHECK(!canvas_); |
| 142 reply_.Run(analysis_, !HasFinishedRunning()); | 142 reply_.Run(analysis_, !HasFinishedRunning()); |
| 143 } | 143 } |
| 144 | 144 |
| 145 protected: | 145 protected: |
| 146 virtual ~RasterWorkerPoolTaskImpl() { DCHECK(!canvas_); } | 146 virtual ~RasterWorkerPoolTaskImpl() { DCHECK(!canvas_); } |
| 147 | 147 |
| 148 private: | 148 private: |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 } | 263 } |
| 264 | 264 |
| 265 // Overridden from internal::WorkerPoolTask: | 265 // Overridden from internal::WorkerPoolTask: |
| 266 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) | 266 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) |
| 267 OVERRIDE {} | 267 OVERRIDE {} |
| 268 virtual void RunOnOriginThread() OVERRIDE { | 268 virtual void RunOnOriginThread() OVERRIDE { |
| 269 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnOriginThread"); | 269 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnOriginThread"); |
| 270 Decode(); | 270 Decode(); |
| 271 } | 271 } |
| 272 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) | 272 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) |
| 273 OVERRIDE { | 273 OVERRIDE {} |
| 274 client->OnImageDecodeCompleted(this); | |
| 275 } | |
| 276 virtual void RunReplyOnOriginThread() OVERRIDE { | 274 virtual void RunReplyOnOriginThread() OVERRIDE { |
| 277 reply_.Run(!HasFinishedRunning()); | 275 reply_.Run(!HasFinishedRunning()); |
| 278 } | 276 } |
| 279 | 277 |
| 280 protected: | 278 protected: |
| 281 virtual ~ImageDecodeWorkerPoolTaskImpl() {} | 279 virtual ~ImageDecodeWorkerPoolTaskImpl() {} |
| 282 | 280 |
| 283 private: | 281 private: |
| 284 void Decode() { | 282 void Decode() { |
| 285 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( | 283 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 if (decode_it == graph->nodes.end()) | 690 if (decode_it == graph->nodes.end()) |
| 693 InsertNodeForTask(graph, decode_task, priority, 0u); | 691 InsertNodeForTask(graph, decode_task, priority, 0u); |
| 694 | 692 |
| 695 graph->edges.push_back(internal::TaskGraph::Edge(decode_task, raster_task)); | 693 graph->edges.push_back(internal::TaskGraph::Edge(decode_task, raster_task)); |
| 696 } | 694 } |
| 697 | 695 |
| 698 InsertNodeForTask(graph, raster_task, priority, dependencies); | 696 InsertNodeForTask(graph, raster_task, priority, dependencies); |
| 699 } | 697 } |
| 700 | 698 |
| 701 } // namespace cc | 699 } // namespace cc |
| OLD | NEW |