| Index: cc/resources/pixel_buffer_raster_worker_pool.cc
|
| diff --git a/cc/resources/pixel_buffer_raster_worker_pool.cc b/cc/resources/pixel_buffer_raster_worker_pool.cc
|
| index 8685af0ff097abf29161d63a2f339e492de5b7f7..294eebceeaf2e85ca7e02b20db57b15aa14f8dbb 100644
|
| --- a/cc/resources/pixel_buffer_raster_worker_pool.cc
|
| +++ b/cc/resources/pixel_buffer_raster_worker_pool.cc
|
| @@ -102,7 +102,9 @@ PixelBufferRasterWorkerPool::PixelBufferRasterWorkerPool(
|
| check_for_completed_raster_tasks_pending_(false),
|
| should_notify_client_if_no_tasks_are_pending_(false),
|
| should_notify_client_if_no_tasks_required_for_activation_are_pending_(
|
| - false) {
|
| + false),
|
| + raster_finished_task_pending_(false),
|
| + raster_required_for_activation_finished_task_pending_(false) {
|
| }
|
|
|
| PixelBufferRasterWorkerPool::~PixelBufferRasterWorkerPool() {
|
| @@ -255,6 +257,7 @@ void PixelBufferRasterWorkerPool::OnRasterTasksFinished() {
|
| // perform another check in that case as we've already notified the client.
|
| if (!should_notify_client_if_no_tasks_are_pending_)
|
| return;
|
| + raster_finished_task_pending_ = false;
|
|
|
| // Call CheckForCompletedRasterTasks() when we've finished running all
|
| // raster tasks needed since last time ScheduleTasks() was called.
|
| @@ -268,6 +271,7 @@ void PixelBufferRasterWorkerPool::OnRasterTasksRequiredForActivationFinished() {
|
| // CheckForCompletedRasterTasks() if the client has already been notified.
|
| if (!should_notify_client_if_no_tasks_required_for_activation_are_pending_)
|
| return;
|
| + raster_required_for_activation_finished_task_pending_ = false;
|
|
|
| // This reduces latency between the time when all tasks required for
|
| // activation have finished running and the time when the client is
|
| @@ -386,9 +390,11 @@ void PixelBufferRasterWorkerPool::CheckForCompletedRasterTasks() {
|
| // Determine what client notifications to generate.
|
| bool will_notify_client_that_no_tasks_required_for_activation_are_pending =
|
| (should_notify_client_if_no_tasks_required_for_activation_are_pending_ &&
|
| + !raster_required_for_activation_finished_task_pending_ &&
|
| !HasPendingTasksRequiredForActivation());
|
| bool will_notify_client_that_no_tasks_are_pending =
|
| (should_notify_client_if_no_tasks_are_pending_ &&
|
| + !raster_finished_task_pending_ &&
|
| !HasPendingTasks());
|
|
|
| // Adjust the need to generate notifications before scheduling more tasks.
|
| @@ -539,6 +545,7 @@ void PixelBufferRasterWorkerPool::ScheduleMoreTasks() {
|
| should_notify_client_if_no_tasks_required_for_activation_are_pending_) {
|
| new_raster_required_for_activation_finished_task =
|
| CreateRasterRequiredForActivationFinishedTask();
|
| + raster_required_for_activation_finished_task_pending_ = true;
|
| internal::GraphNode* raster_required_for_activation_finished_node =
|
| CreateGraphNodeForTask(
|
| new_raster_required_for_activation_finished_task.get(),
|
| @@ -560,6 +567,7 @@ void PixelBufferRasterWorkerPool::ScheduleMoreTasks() {
|
| if (!did_throttle_raster_tasks &&
|
| should_notify_client_if_no_tasks_are_pending_) {
|
| new_raster_finished_task = CreateRasterFinishedTask();
|
| + raster_finished_task_pending_ = true;
|
| internal::GraphNode* raster_finished_node =
|
| CreateGraphNodeForTask(new_raster_finished_task.get(),
|
| 1u, // Priority 1
|
|
|