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

Unified Diff: cc/resources/image_raster_worker_pool.cc

Issue 15860003: AW hardware draw mega patch (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: r205552 Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/image_raster_worker_pool.h ('k') | cc/resources/prioritized_resource_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/resources/image_raster_worker_pool.cc
diff --git a/cc/resources/image_raster_worker_pool.cc b/cc/resources/image_raster_worker_pool.cc
index 5800ce1f8c0cb3c0d92428140c19eed475a30a70..24b5089b1245d4445b44795e2bc5a289cffd94bf 100644
--- a/cc/resources/image_raster_worker_pool.cc
+++ b/cc/resources/image_raster_worker_pool.cc
@@ -14,7 +14,8 @@ namespace {
class ImageWorkerPoolTaskImpl : public internal::WorkerPoolTask {
public:
- typedef base::Callback<void(bool was_canceled)> Reply;
+ typedef base::Callback<void(bool was_canceled, bool map_image_successful)>
+ Reply;
ImageWorkerPoolTaskImpl(internal::RasterWorkerPoolTask* task,
TaskVector* dependencies,
@@ -30,7 +31,9 @@ class ImageWorkerPoolTaskImpl : public internal::WorkerPoolTask {
// Overridden from internal::WorkerPoolTask:
virtual void RunOnThread(unsigned thread_index) OVERRIDE {
- DCHECK(buffer_);
+ if (!buffer_)
+ return;
+
SkBitmap bitmap;
bitmap.setConfig(SkBitmap::kARGB_8888_Config,
task_->resource()->size().width(),
@@ -41,7 +44,7 @@ class ImageWorkerPoolTaskImpl : public internal::WorkerPoolTask {
task_->RunOnThread(&device, thread_index);
}
virtual void DispatchCompletionCallback() OVERRIDE {
- reply_.Run(!HasFinishedRunning());
+ reply_.Run(!HasFinishedRunning(), !!buffer_);
}
private:
@@ -95,7 +98,9 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) {
// Map image for raster.
uint8* buffer = resource_provider()->MapImage(task->resource()->id());
- int stride = resource_provider()->GetImageStride(task->resource()->id());
+ int stride = 0;
+ if (buffer)
+ stride = resource_provider()->GetImageStride(task->resource()->id());
// TODO(reveman): Avoid having to make a copy of dependencies.
internal::WorkerPoolTask::TaskVector dependencies = task->dependencies();
@@ -124,17 +129,20 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTask::Queue* queue) {
void ImageRasterWorkerPool::OnRasterTaskCompleted(
scoped_refptr<internal::RasterWorkerPoolTask> task,
- bool was_canceled) {
+ bool was_canceled,
+ bool map_image_successful) {
TRACE_EVENT1("cc", "ImageRasterWorkerPool::OnRasterTaskCompleted",
"was_canceled", was_canceled);
DCHECK(image_tasks_.find(task) != image_tasks_.end());
- // Balanced with MapImage() call in ScheduleTasks().
- resource_provider()->UnmapImage(task->resource()->id());
+ if (map_image_successful) {
+ // Balanced with MapImage() call in ScheduleTasks().
+ resource_provider()->UnmapImage(task->resource()->id());
- // Bind image to resource.
- resource_provider()->BindImage(task->resource()->id());
+ // Bind image to resource.
+ resource_provider()->BindImage(task->resource()->id());
+ }
if (!was_canceled)
task->DidRun();
« no previous file with comments | « cc/resources/image_raster_worker_pool.h ('k') | cc/resources/prioritized_resource_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698