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

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

Issue 454843002: cc: Do bitmap conversion for RasterBuffer in the worker thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 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/image_copy_raster_worker_pool.h" 5 #include "cc/resources/image_copy_raster_worker_pool.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/debug/trace_event_argument.h" 10 #include "base/debug/trace_event_argument.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 task->CompleteOnOriginThread(this); 159 task->CompleteOnOriginThread(this);
160 task->DidComplete(); 160 task->DidComplete();
161 161
162 task->RunReplyOnOriginThread(); 162 task->RunReplyOnOriginThread();
163 } 163 }
164 completed_tasks_.clear(); 164 completed_tasks_.clear();
165 165
166 FlushCopies(); 166 FlushCopies();
167 } 167 }
168 168
169 SkCanvas* ImageCopyRasterWorkerPool::AcquireCanvasForRaster(RasterTask* task) { 169 RasterBuffer* ImageCopyRasterWorkerPool::AcquireBufferForRaster(
170 RasterTask* task) {
170 DCHECK_EQ(task->resource()->format(), resource_pool_->resource_format()); 171 DCHECK_EQ(task->resource()->format(), resource_pool_->resource_format());
171 scoped_ptr<ScopedResource> resource( 172 scoped_ptr<ScopedResource> resource(
172 resource_pool_->AcquireResource(task->resource()->size())); 173 resource_pool_->AcquireResource(task->resource()->size()));
173 SkCanvas* canvas = resource_provider_->MapImageRasterBuffer(resource->id()); 174 RasterBuffer* raster_buffer =
175 resource_provider_->AcquireImageRasterBuffer(resource->id());
174 DCHECK(std::find_if(raster_task_states_.begin(), 176 DCHECK(std::find_if(raster_task_states_.begin(),
175 raster_task_states_.end(), 177 raster_task_states_.end(),
176 RasterTaskState::TaskComparator(task)) == 178 RasterTaskState::TaskComparator(task)) ==
177 raster_task_states_.end()); 179 raster_task_states_.end());
178 raster_task_states_.push_back(RasterTaskState(task, resource.release())); 180 raster_task_states_.push_back(RasterTaskState(task, resource.release()));
179 return canvas; 181 return raster_buffer;
180 } 182 }
181 183
182 void ImageCopyRasterWorkerPool::ReleaseCanvasForRaster(RasterTask* task) { 184 void ImageCopyRasterWorkerPool::ReleaseBufferForRaster(RasterTask* task) {
183 RasterTaskState::Vector::iterator it = 185 RasterTaskState::Vector::iterator it =
184 std::find_if(raster_task_states_.begin(), 186 std::find_if(raster_task_states_.begin(),
185 raster_task_states_.end(), 187 raster_task_states_.end(),
186 RasterTaskState::TaskComparator(task)); 188 RasterTaskState::TaskComparator(task));
187 DCHECK(it != raster_task_states_.end()); 189 DCHECK(it != raster_task_states_.end());
188 scoped_ptr<ScopedResource> resource(it->resource); 190 scoped_ptr<ScopedResource> resource(it->resource);
189 std::swap(*it, raster_task_states_.back()); 191 std::swap(*it, raster_task_states_.back());
190 raster_task_states_.pop_back(); 192 raster_task_states_.pop_back();
191 193
192 bool content_has_changed = 194 bool content_has_changed =
193 resource_provider_->UnmapImageRasterBuffer(resource->id()); 195 resource_provider_->ReleaseImageRasterBuffer(resource->id());
194 196
195 // |content_has_changed| can be false as result of task being canceled or 197 // |content_has_changed| can be false as result of task being canceled or
196 // task implementation deciding not to modify bitmap (ie. analysis of raster 198 // task implementation deciding not to modify bitmap (ie. analysis of raster
197 // commands detected content as a solid color). 199 // commands detected content as a solid color).
198 if (content_has_changed) { 200 if (content_has_changed) {
199 resource_provider_->CopyResource(resource->id(), task->resource()->id()); 201 resource_provider_->CopyResource(resource->id(), task->resource()->id());
200 has_performed_copy_since_last_flush_ = true; 202 has_performed_copy_since_last_flush_ = true;
201 } 203 }
202 204
203 resource_pool_->ReleaseResource(resource.Pass()); 205 resource_pool_->ReleaseResource(resource.Pass());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 resource_pool_->total_memory_usage_bytes()); 255 resource_pool_->total_memory_usage_bytes());
254 staging_state->SetInteger("pending_copy_count", 256 staging_state->SetInteger("pending_copy_count",
255 resource_pool_->total_resource_count() - 257 resource_pool_->total_resource_count() -
256 resource_pool_->acquired_resource_count()); 258 resource_pool_->acquired_resource_count());
257 staging_state->SetInteger("bytes_pending_copy", 259 staging_state->SetInteger("bytes_pending_copy",
258 resource_pool_->total_memory_usage_bytes() - 260 resource_pool_->total_memory_usage_bytes() -
259 resource_pool_->acquired_memory_usage_bytes()); 261 resource_pool_->acquired_memory_usage_bytes());
260 } 262 }
261 263
262 } // namespace cc 264 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698