Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/gpu_tile_task_worker_pool.h" | 5 #include "cc/resources/gpu_tile_task_worker_pool.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
| 10 #include "cc/resources/gpu_rasterizer.h" | 10 #include "cc/resources/gpu_rasterizer.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 ->worker_context_provider(); | 38 ->worker_context_provider(); |
| 39 | 39 |
| 40 // The context lock must be held while accessing the context on a | 40 // The context lock must be held while accessing the context on a |
| 41 // worker thread. | 41 // worker thread. |
| 42 base::AutoLock context_lock(*context_provider->GetLock()); | 42 base::AutoLock context_lock(*context_provider->GetLock()); |
| 43 | 43 |
| 44 // Allow this worker thread to bind to context_provider. | 44 // Allow this worker thread to bind to context_provider. |
| 45 context_provider->DetachFromThread(); | 45 context_provider->DetachFromThread(); |
| 46 | 46 |
| 47 // Rasterize source into resource. | 47 // Rasterize source into resource. |
| 48 rasterizer_->RasterizeSource(true, &lock_, raster_source, rect, scale); | 48 rasterizer_->RasterizeSource(&lock_, raster_source, rect, scale); |
| 49 | 49 |
| 50 // Barrier to sync worker context output to cc context. | 50 // Barrier to sync worker context output to cc context. |
| 51 context_provider->ContextGL()->OrderingBarrierCHROMIUM(); | 51 context_provider->ContextGL()->OrderingBarrierCHROMIUM(); |
| 52 | 52 |
| 53 // Allow compositor thread to bind to context_provider. | 53 // Allow compositor thread to bind to context_provider. |
| 54 context_provider->DetachFromThread(); | 54 context_provider->DetachFromThread(); |
| 55 } | 55 } |
| 56 | 56 |
| 57 private: | 57 private: |
| 58 GpuRasterizer* rasterizer_; | 58 GpuRasterizer* rasterizer_; |
| 59 ResourceProvider::ScopedWriteLockGr lock_; | 59 ResourceProvider::ScopedWriteLockGr lock_; |
| 60 const Resource* resource_; | 60 const Resource* resource_; |
| 61 | 61 |
| 62 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); | 62 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); |
| 63 }; | 63 }; |
| 64 | 64 |
| 65 } // namespace | 65 } // namespace |
| 66 | 66 |
| 67 // static | 67 // static |
| 68 scoped_ptr<TileTaskWorkerPool> GpuTileTaskWorkerPool::Create( | 68 scoped_ptr<TileTaskWorkerPool> GpuTileTaskWorkerPool::Create( |
| 69 base::SequencedTaskRunner* task_runner, | 69 base::SequencedTaskRunner* task_runner, |
| 70 TaskGraphRunner* task_graph_runner, | 70 TaskGraphRunner* task_graph_runner, |
| 71 GpuRasterizer* rasterizer) { | 71 ContextProvider* context_provider, |
| 72 return make_scoped_ptr<TileTaskWorkerPool>( | 72 ResourceProvider* resource_provider, |
| 73 new GpuTileTaskWorkerPool(task_runner, task_graph_runner, rasterizer)); | 73 bool use_distance_field_text, |
| 74 int gpu_rasterization_msaa_sample_count) { | |
| 75 return make_scoped_ptr<TileTaskWorkerPool>(new GpuTileTaskWorkerPool( | |
| 76 task_runner, task_graph_runner, context_provider, resource_provider, | |
| 77 use_distance_field_text, gpu_rasterization_msaa_sample_count)); | |
| 74 } | 78 } |
| 75 | 79 |
| 76 GpuTileTaskWorkerPool::GpuTileTaskWorkerPool( | 80 GpuTileTaskWorkerPool::GpuTileTaskWorkerPool( |
| 77 base::SequencedTaskRunner* task_runner, | 81 base::SequencedTaskRunner* task_runner, |
| 78 TaskGraphRunner* task_graph_runner, | 82 TaskGraphRunner* task_graph_runner, |
| 79 GpuRasterizer* rasterizer) | 83 ContextProvider* context_provider, |
| 84 ResourceProvider* resource_provider, | |
| 85 bool use_distance_field_text, | |
| 86 int gpu_rasterization_msaa_sample_count) | |
| 80 : task_runner_(task_runner), | 87 : task_runner_(task_runner), |
| 81 task_graph_runner_(task_graph_runner), | 88 task_graph_runner_(task_graph_runner), |
| 82 namespace_token_(task_graph_runner_->GetNamespaceToken()), | 89 namespace_token_(task_graph_runner_->GetNamespaceToken()), |
| 83 rasterizer_(rasterizer), | 90 rasterizer_(new GpuRasterizer(context_provider, |
| 91 resource_provider, | |
| 92 use_distance_field_text, | |
| 93 gpu_rasterization_msaa_sample_count)), | |
| 84 task_set_finished_weak_ptr_factory_(this), | 94 task_set_finished_weak_ptr_factory_(this), |
| 85 weak_ptr_factory_(this) { | 95 weak_ptr_factory_(this) { |
| 86 } | 96 } |
| 87 | 97 |
| 88 GpuTileTaskWorkerPool::~GpuTileTaskWorkerPool() { | 98 GpuTileTaskWorkerPool::~GpuTileTaskWorkerPool() { |
| 89 DCHECK_EQ(0u, completed_tasks_.size()); | 99 DCHECK_EQ(0u, completed_tasks_.size()); |
| 90 } | 100 } |
| 91 | 101 |
| 92 TileTaskRunner* GpuTileTaskWorkerPool::AsTileTaskRunner() { | 102 TileTaskRunner* GpuTileTaskWorkerPool::AsTileTaskRunner() { |
| 93 return this; | 103 return this; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 192 raster_task->DidComplete(); | 202 raster_task->DidComplete(); |
| 193 | 203 |
| 194 raster_task->RunReplyOnOriginThread(); | 204 raster_task->RunReplyOnOriginThread(); |
| 195 } | 205 } |
| 196 completed_tasks_.clear(); | 206 completed_tasks_.clear(); |
| 197 } | 207 } |
| 198 | 208 |
| 199 scoped_ptr<RasterBuffer> GpuTileTaskWorkerPool::AcquireBufferForRaster( | 209 scoped_ptr<RasterBuffer> GpuTileTaskWorkerPool::AcquireBufferForRaster( |
| 200 const Resource* resource) { | 210 const Resource* resource) { |
| 201 return make_scoped_ptr<RasterBuffer>( | 211 return make_scoped_ptr<RasterBuffer>( |
| 202 new RasterBufferImpl(rasterizer_, resource)); | 212 new RasterBufferImpl(rasterizer_.get(), resource)); |
|
hendrikw
2015/04/03 22:00:09
This was my only concern with this cl, since the l
| |
| 203 } | 213 } |
| 204 | 214 |
| 205 void GpuTileTaskWorkerPool::ReleaseBufferForRaster( | 215 void GpuTileTaskWorkerPool::ReleaseBufferForRaster( |
| 206 scoped_ptr<RasterBuffer> buffer) { | 216 scoped_ptr<RasterBuffer> buffer) { |
| 207 // Nothing to do here. RasterBufferImpl destructor cleans up after itself. | 217 // Nothing to do here. RasterBufferImpl destructor cleans up after itself. |
| 208 } | 218 } |
| 209 | 219 |
| 210 void GpuTileTaskWorkerPool::OnTaskSetFinished(TaskSet task_set) { | 220 void GpuTileTaskWorkerPool::OnTaskSetFinished(TaskSet task_set) { |
| 211 TRACE_EVENT1("cc", "GpuTileTaskWorkerPool::OnTaskSetFinished", "task_set", | 221 TRACE_EVENT1("cc", "GpuTileTaskWorkerPool::OnTaskSetFinished", "task_set", |
| 212 task_set); | 222 task_set); |
| 213 | 223 |
| 214 DCHECK(tasks_pending_[task_set]); | 224 DCHECK(tasks_pending_[task_set]); |
| 215 tasks_pending_[task_set] = false; | 225 tasks_pending_[task_set] = false; |
| 216 client_->DidFinishRunningTileTasks(task_set); | 226 client_->DidFinishRunningTileTasks(task_set); |
| 217 } | 227 } |
| 218 | 228 |
| 219 } // namespace cc | 229 } // namespace cc |
| OLD | NEW |