Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(556)

Side by Side Diff: cc/resources/image_raster_worker_pool.cc

Issue 562833004: cc: Move RasterBuffer implementations from ResourceProvider to RasterWorkerPool implementations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: build fix Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/image_raster_worker_pool.h" 5 #include "cc/resources/image_raster_worker_pool.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/debug/trace_event_argument.h" 8 #include "base/debug/trace_event_argument.h"
9 #include "cc/debug/traced_value.h" 9 #include "cc/debug/traced_value.h"
10 #include "cc/resources/raster_buffer.h"
10 #include "cc/resources/resource.h" 11 #include "cc/resources/resource.h"
12 #include "third_party/skia/include/utils/SkNullCanvas.h"
11 13
12 namespace cc { 14 namespace cc {
15 namespace {
16
17 class RasterBufferImpl : public RasterBuffer {
18 public:
19 RasterBufferImpl(ResourceProvider* resource_provider,
20 const Resource* resource)
21 : resource_provider_(resource_provider),
22 resource_(resource),
23 buffer_(NULL),
24 stride_(0) {
25 // This RasterBuffer implementation provides direct access to the memory
26 // used by the GPU. Read lock fences are required to ensure that we're not
27 // trying to map a resource that is currently in-use by the GPU.
28 resource_provider_->EnableReadLockFences(resource_->id());
29
30 // Acquire and map image.
31 resource_provider_->AcquireImage(resource_->id());
32 buffer_ = resource_provider_->MapImage(resource_->id(), &stride_);
33 }
34
35 virtual ~RasterBufferImpl() {
36 resource_provider_->UnmapImage(resource_->id());
37 }
38
39 // Overridden from RasterBuffer:
40 virtual skia::RefPtr<SkCanvas> AcquireSkCanvas() OVERRIDE {
41 if (!buffer_)
42 return skia::AdoptRef(SkCreateNullCanvas());
43
44 RasterWorkerPool::AcquireBitmapForBuffer(
45 &bitmap_, buffer_, resource_->format(), resource_->size(), stride_);
46 return skia::AdoptRef(new SkCanvas(bitmap_));
47 }
48 virtual void ReleaseSkCanvas(const skia::RefPtr<SkCanvas>& canvas) OVERRIDE {
49 if (!buffer_)
50 return;
51
52 RasterWorkerPool::ReleaseBitmapForBuffer(
53 &bitmap_, buffer_, resource_->format());
54 }
55
56 private:
57 ResourceProvider* resource_provider_;
58 const Resource* resource_;
59 uint8_t* buffer_;
60 int stride_;
61 SkBitmap bitmap_;
62
63 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl);
64 };
65
66 } // namespace
13 67
14 // static 68 // static
15 scoped_ptr<RasterWorkerPool> ImageRasterWorkerPool::Create( 69 scoped_ptr<RasterWorkerPool> ImageRasterWorkerPool::Create(
16 base::SequencedTaskRunner* task_runner, 70 base::SequencedTaskRunner* task_runner,
17 TaskGraphRunner* task_graph_runner, 71 TaskGraphRunner* task_graph_runner,
18 ResourceProvider* resource_provider) { 72 ResourceProvider* resource_provider) {
19 return make_scoped_ptr<RasterWorkerPool>(new ImageRasterWorkerPool( 73 return make_scoped_ptr<RasterWorkerPool>(new ImageRasterWorkerPool(
20 task_runner, task_graph_runner, resource_provider)); 74 task_runner, task_graph_runner, resource_provider));
21 } 75 }
22 76
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 183
130 task->WillComplete(); 184 task->WillComplete();
131 task->CompleteOnOriginThread(this); 185 task->CompleteOnOriginThread(this);
132 task->DidComplete(); 186 task->DidComplete();
133 187
134 task->RunReplyOnOriginThread(); 188 task->RunReplyOnOriginThread();
135 } 189 }
136 completed_tasks_.clear(); 190 completed_tasks_.clear();
137 } 191 }
138 192
139 RasterBuffer* ImageRasterWorkerPool::AcquireBufferForRaster(RasterTask* task) { 193 scoped_ptr<RasterBuffer> ImageRasterWorkerPool::AcquireBufferForRaster(
140 return resource_provider_->AcquireImageRasterBuffer(task->resource()->id()); 194 const Resource* resource) {
195 return make_scoped_ptr<RasterBuffer>(
196 new RasterBufferImpl(resource_provider_, resource));
141 } 197 }
142 198
143 void ImageRasterWorkerPool::ReleaseBufferForRaster(RasterTask* task) { 199 void ImageRasterWorkerPool::ReleaseBufferForRaster(
144 resource_provider_->ReleaseImageRasterBuffer(task->resource()->id()); 200 scoped_ptr<RasterBuffer> buffer) {
145 201 // Nothing to do here. RasterBufferImpl destructor cleans up after itself.
146 // Acquire/ReleaseImageRasterBuffer provides direct access to the memory used
147 // by the GPU. Read lock fences are required to ensure that we're not trying
148 // to map a resource that is currently in-use by the GPU.
149 resource_provider_->EnableReadLockFences(task->resource()->id());
150 } 202 }
151 203
152 void ImageRasterWorkerPool::OnRasterFinished() { 204 void ImageRasterWorkerPool::OnRasterFinished() {
153 TRACE_EVENT0("cc", "ImageRasterWorkerPool::OnRasterFinished"); 205 TRACE_EVENT0("cc", "ImageRasterWorkerPool::OnRasterFinished");
154 206
155 DCHECK(raster_tasks_pending_); 207 DCHECK(raster_tasks_pending_);
156 raster_tasks_pending_ = false; 208 raster_tasks_pending_ = false;
157 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this); 209 TRACE_EVENT_ASYNC_END0("cc", "ScheduledTasks", this);
158 client_->DidFinishRunningTasks(); 210 client_->DidFinishRunningTasks();
159 } 211 }
(...skipping 13 matching lines...) Expand all
173 ImageRasterWorkerPool::StateAsValue() const { 225 ImageRasterWorkerPool::StateAsValue() const {
174 scoped_refptr<base::debug::TracedValue> state = 226 scoped_refptr<base::debug::TracedValue> state =
175 new base::debug::TracedValue(); 227 new base::debug::TracedValue();
176 228
177 state->SetBoolean("tasks_required_for_activation_pending", 229 state->SetBoolean("tasks_required_for_activation_pending",
178 raster_tasks_required_for_activation_pending_); 230 raster_tasks_required_for_activation_pending_);
179 return state; 231 return state;
180 } 232 }
181 233
182 } // namespace cc 234 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698