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 |