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_raster_worker_pool.h" | 5 #include "cc/resources/gpu_raster_worker_pool.h" |
6 | 6 |
7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
8 #include "cc/output/context_provider.h" | 8 #include "cc/output/context_provider.h" |
9 #include "cc/resources/raster_buffer.h" | |
9 #include "cc/resources/resource.h" | 10 #include "cc/resources/resource.h" |
10 #include "cc/resources/resource_provider.h" | 11 #include "cc/resources/resource_provider.h" |
11 #include "cc/resources/scoped_gpu_raster.h" | 12 #include "cc/resources/scoped_gpu_raster.h" |
12 #include "gpu/command_buffer/client/gles2_interface.h" | 13 #include "gpu/command_buffer/client/gles2_interface.h" |
14 #include "third_party/skia/include/core/SkSurface.h" | |
13 #include "third_party/skia/include/gpu/GrContext.h" | 15 #include "third_party/skia/include/gpu/GrContext.h" |
16 #include "third_party/skia/include/utils/SkNullCanvas.h" | |
14 | 17 |
15 namespace cc { | 18 namespace cc { |
19 namespace { | |
20 | |
21 class RasterBufferImpl : public RasterBuffer { | |
vmpstr
2014/09/16 22:15:55
<nit>
Can we come up with a name that isn't using
reveman
2014/09/17 14:40:56
RasterBufferImpl is a more compact way of writing
| |
22 public: | |
23 RasterBufferImpl(ResourceProvider* resource_provider, | |
24 const Resource* resource) | |
25 : resource_provider_(resource_provider), | |
26 resource_(resource), | |
27 surface_(resource_provider->LockForWriteToSkSurface(resource->id())) {} | |
28 virtual ~RasterBufferImpl() { | |
29 resource_provider_->UnlockForWriteToSkSurface(resource_->id()); | |
30 } | |
31 | |
32 // Overridden from RasterBuffer: | |
33 virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() OVERRIDE { | |
34 skia::RefPtr<SkCanvas> canvas = surface_ | |
35 ? skia::SharePtr(surface_->getCanvas()) | |
36 : skia::AdoptRef(SkCreateNullCanvas()); | |
vmpstr
2014/09/16 22:15:55
The previous code did "return skia::RefPtr<SkCanva
reveman
2014/09/17 14:40:56
The return value couldn't be used in DCHECKs as we
| |
37 | |
38 // Balanced with restore() call in ReleaseSkCanvas. save()/restore() calls | |
39 // are needed to ensure that canvas returns to its previous state after use. | |
40 canvas->save(); | |
41 return canvas; | |
42 } | |
43 virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) OVERRIDE { | |
44 // Balanced with save() call in AcquireSkCanvas. | |
45 canvas->restore(); | |
46 } | |
47 | |
48 private: | |
49 ResourceProvider* resource_provider_; | |
50 const Resource* resource_; | |
51 SkSurface* surface_; | |
52 | |
53 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); | |
54 }; | |
55 | |
56 } // namespace | |
16 | 57 |
17 // static | 58 // static |
18 scoped_ptr<RasterWorkerPool> GpuRasterWorkerPool::Create( | 59 scoped_ptr<RasterWorkerPool> GpuRasterWorkerPool::Create( |
19 base::SequencedTaskRunner* task_runner, | 60 base::SequencedTaskRunner* task_runner, |
20 ContextProvider* context_provider, | 61 ContextProvider* context_provider, |
21 ResourceProvider* resource_provider) { | 62 ResourceProvider* resource_provider) { |
22 return make_scoped_ptr<RasterWorkerPool>(new GpuRasterWorkerPool( | 63 return make_scoped_ptr<RasterWorkerPool>(new GpuRasterWorkerPool( |
23 task_runner, context_provider, resource_provider)); | 64 task_runner, context_provider, resource_provider)); |
24 } | 65 } |
25 | 66 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
136 | 177 |
137 task->WillComplete(); | 178 task->WillComplete(); |
138 task->CompleteOnOriginThread(this); | 179 task->CompleteOnOriginThread(this); |
139 task->DidComplete(); | 180 task->DidComplete(); |
140 | 181 |
141 task->RunReplyOnOriginThread(); | 182 task->RunReplyOnOriginThread(); |
142 } | 183 } |
143 completed_tasks_.clear(); | 184 completed_tasks_.clear(); |
144 } | 185 } |
145 | 186 |
146 RasterBuffer* GpuRasterWorkerPool::AcquireBufferForRaster(RasterTask* task) { | 187 scoped_ptr<RasterBuffer> GpuRasterWorkerPool::AcquireBufferForRaster( |
147 return resource_provider_->AcquireGpuRasterBuffer(task->resource()->id()); | 188 const Resource* resource) { |
189 return make_scoped_ptr<RasterBuffer>( | |
190 new RasterBufferImpl(resource_provider_, resource)); | |
148 } | 191 } |
149 | 192 |
150 void GpuRasterWorkerPool::ReleaseBufferForRaster(RasterTask* task) { | 193 void GpuRasterWorkerPool::ReleaseBufferForRaster( |
151 resource_provider_->ReleaseGpuRasterBuffer(task->resource()->id()); | 194 scoped_ptr<RasterBuffer> buffer) { |
195 // Nothing to do here. RasterBufferImpl destructor cleans up after itself. | |
152 } | 196 } |
153 | 197 |
154 void GpuRasterWorkerPool::OnRasterFinished() { | 198 void GpuRasterWorkerPool::OnRasterFinished() { |
155 TRACE_EVENT0("cc", "GpuRasterWorkerPool::OnRasterFinished"); | 199 TRACE_EVENT0("cc", "GpuRasterWorkerPool::OnRasterFinished"); |
156 | 200 |
157 DCHECK(raster_tasks_pending_); | 201 DCHECK(raster_tasks_pending_); |
158 raster_tasks_pending_ = false; | 202 raster_tasks_pending_ = false; |
159 client_->DidFinishRunningTasks(); | 203 client_->DidFinishRunningTasks(); |
160 } | 204 } |
161 | 205 |
(...skipping 21 matching lines...) Expand all Loading... | |
183 TRACE_EVENT0("cc", "GpuRasterWorkerPool::RunTasksOnOriginThread"); | 227 TRACE_EVENT0("cc", "GpuRasterWorkerPool::RunTasksOnOriginThread"); |
184 | 228 |
185 DCHECK(run_tasks_on_origin_thread_pending_); | 229 DCHECK(run_tasks_on_origin_thread_pending_); |
186 run_tasks_on_origin_thread_pending_ = false; | 230 run_tasks_on_origin_thread_pending_ = false; |
187 | 231 |
188 ScopedGpuRaster gpu_raster(context_provider_); | 232 ScopedGpuRaster gpu_raster(context_provider_); |
189 task_graph_runner_->RunUntilIdle(); | 233 task_graph_runner_->RunUntilIdle(); |
190 } | 234 } |
191 | 235 |
192 } // namespace cc | 236 } // namespace cc |
OLD | NEW |