diff options
author | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-25 05:03:14 +0000 |
---|---|---|
committer | epenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-25 05:03:14 +0000 |
commit | 4c6347b6caa1e3e5068ba51ab3fdf7e348ed7494 (patch) | |
tree | 22931b4e0b25f022e81be9dde57451a57ad011e9 /cc | |
parent | 101eca0bb607ebcd79bc6b1aacb3e437d5a055d5 (diff) | |
download | chromium_src-4c6347b6caa1e3e5068ba51ab3fdf7e348ed7494.zip chromium_src-4c6347b6caa1e3e5068ba51ab3fdf7e348ed7494.tar.gz chromium_src-4c6347b6caa1e3e5068ba51ab3fdf7e348ed7494.tar.bz2 |
CC: Force uploads in reverse.
For performance downstream, we would rather wait
once than multiple times.
Review URL: https://chromiumcodereview.appspot.com/17639002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@208420 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r-- | cc/resources/pixel_buffer_raster_worker_pool.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/cc/resources/pixel_buffer_raster_worker_pool.cc b/cc/resources/pixel_buffer_raster_worker_pool.cc index 2f3e4d2..488b5ac 100644 --- a/cc/resources/pixel_buffer_raster_worker_pool.cc +++ b/cc/resources/pixel_buffer_raster_worker_pool.cc @@ -225,6 +225,7 @@ void PixelBufferRasterWorkerPool::CheckForCompletedUploads() { shutdown_ || client()->ShouldForceTasksRequiredForActivationToComplete(); if (should_force_some_uploads_to_complete) { + TaskDeque tasks_with_uploads_to_force; TaskDeque::iterator it = tasks_with_pending_upload_.begin(); while (it != tasks_with_pending_upload_.end()) { internal::RasterWorkerPoolTask* task = *it; @@ -233,9 +234,7 @@ void PixelBufferRasterWorkerPool::CheckForCompletedUploads() { // Force all uploads required for activation to complete. // During shutdown, force all pending uploads to complete. if (shutdown_ || IsRasterTaskRequiredForActivation(task)) { - resource_provider()->ForceSetPixelsToComplete(task->resource()->id()); - has_performed_uploads_since_last_flush_ = true; - + tasks_with_uploads_to_force.push_back(task); tasks_with_completed_uploads.push_back(task); it = tasks_with_pending_upload_.erase(it); continue; @@ -243,6 +242,15 @@ void PixelBufferRasterWorkerPool::CheckForCompletedUploads() { ++it; } + + // Force uploads in reverse order. Since forcing can cause a wait on + // all previous uploads, we would rather wait only once downstream. + for (TaskDeque::reverse_iterator it = tasks_with_uploads_to_force.rbegin(); + it != tasks_with_uploads_to_force.rend(); + ++it) { + resource_provider()->ForceSetPixelsToComplete((*it)->resource()->id()); + has_performed_uploads_since_last_flush_ = true; + } } // Release shared memory and move tasks with completed uploads |