summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-25 05:03:14 +0000
committerepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-25 05:03:14 +0000
commit4c6347b6caa1e3e5068ba51ab3fdf7e348ed7494 (patch)
tree22931b4e0b25f022e81be9dde57451a57ad011e9 /cc
parent101eca0bb607ebcd79bc6b1aacb3e437d5a055d5 (diff)
downloadchromium_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.cc14
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