| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/raster/pixel_buffer_tile_task_worker_pool.h" | 5 #include "cc/raster/pixel_buffer_tile_task_worker_pool.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/containers/stack_container.h" | 9 #include "base/containers/stack_container.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 for (RasterTask::Vector::const_iterator it = | 424 for (RasterTask::Vector::const_iterator it = |
| 425 tasks_with_completed_uploads.begin(); | 425 tasks_with_completed_uploads.begin(); |
| 426 it != tasks_with_completed_uploads.end(); ++it) { | 426 it != tasks_with_completed_uploads.end(); ++it) { |
| 427 RasterTask* task = it->get(); | 427 RasterTask* task = it->get(); |
| 428 RasterTaskState::Vector::iterator state_it = | 428 RasterTaskState::Vector::iterator state_it = |
| 429 std::find_if(raster_task_states_.begin(), raster_task_states_.end(), | 429 std::find_if(raster_task_states_.begin(), raster_task_states_.end(), |
| 430 RasterTaskState::TaskComparator(task)); | 430 RasterTaskState::TaskComparator(task)); |
| 431 DCHECK(state_it != raster_task_states_.end()); | 431 DCHECK(state_it != raster_task_states_.end()); |
| 432 RasterTaskState& state = *state_it; | 432 RasterTaskState& state = *state_it; |
| 433 | 433 |
| 434 bytes_pending_upload_ -= task->resource()->bytes(); | 434 // We can use UncheckedMemorySizeBytes here, since these tasks come from |
| 435 // tiles, the size of which is controlled by the compositor. |
| 436 bytes_pending_upload_ -= Resource::UncheckedMemorySizeBytes( |
| 437 task->resource()->size(), task->resource()->format()); |
| 435 | 438 |
| 436 task->WillComplete(); | 439 task->WillComplete(); |
| 437 task->CompleteOnOriginThread(this); | 440 task->CompleteOnOriginThread(this); |
| 438 task->DidComplete(); | 441 task->DidComplete(); |
| 439 | 442 |
| 440 DCHECK(std::find(completed_raster_tasks_.begin(), | 443 DCHECK(std::find(completed_raster_tasks_.begin(), |
| 441 completed_raster_tasks_.end(), | 444 completed_raster_tasks_.end(), |
| 442 task) == completed_raster_tasks_.end()); | 445 task) == completed_raster_tasks_.end()); |
| 443 completed_raster_tasks_.push_back(task); | 446 completed_raster_tasks_.push_back(task); |
| 444 state.type = RasterTaskState::COMPLETED; | 447 state.type = RasterTaskState::COMPLETED; |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 DCHECK(std::find(completed_raster_tasks_.begin(), | 533 DCHECK(std::find(completed_raster_tasks_.begin(), |
| 531 completed_raster_tasks_.end(), | 534 completed_raster_tasks_.end(), |
| 532 task) != completed_raster_tasks_.end()); | 535 task) != completed_raster_tasks_.end()); |
| 533 continue; | 536 continue; |
| 534 } | 537 } |
| 535 | 538 |
| 536 // All raster tasks need to be throttled by bytes of pending uploads, | 539 // All raster tasks need to be throttled by bytes of pending uploads, |
| 537 // but if it's the only task allow it to complete no matter what its size, | 540 // but if it's the only task allow it to complete no matter what its size, |
| 538 // to prevent starvation of the task queue. | 541 // to prevent starvation of the task queue. |
| 539 size_t new_bytes_pending_upload = bytes_pending_upload; | 542 size_t new_bytes_pending_upload = bytes_pending_upload; |
| 540 new_bytes_pending_upload += task->resource()->bytes(); | 543 // We can use UncheckedMemorySizeBytes here, since these tasks come from |
| 544 // tiles, the size of which is controlled by the compositor. |
| 545 new_bytes_pending_upload += Resource::UncheckedMemorySizeBytes( |
| 546 task->resource()->size(), task->resource()->format()); |
| 541 if (new_bytes_pending_upload > max_bytes_pending_upload_ && | 547 if (new_bytes_pending_upload > max_bytes_pending_upload_ && |
| 542 bytes_pending_upload) { | 548 bytes_pending_upload) { |
| 543 did_throttle_raster_tasks |= item.task_sets; | 549 did_throttle_raster_tasks |= item.task_sets; |
| 544 continue; | 550 continue; |
| 545 } | 551 } |
| 546 | 552 |
| 547 // If raster has finished, just update |bytes_pending_upload|. | 553 // If raster has finished, just update |bytes_pending_upload|. |
| 548 if (state.type == RasterTaskState::UPLOADING) { | 554 if (state.type == RasterTaskState::UPLOADING) { |
| 549 DCHECK(!task->HasCompleted()); | 555 DCHECK(!task->HasCompleted()); |
| 550 bytes_pending_upload = new_bytes_pending_upload; | 556 bytes_pending_upload = new_bytes_pending_upload; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 // Triggers if the current task belongs to a set that should be empty. | 700 // Triggers if the current task belongs to a set that should be empty. |
| 695 DCHECK((state.task_sets & ~NonEmptyTaskSetsFromTaskCounts(task_counts_)) | 701 DCHECK((state.task_sets & ~NonEmptyTaskSetsFromTaskCounts(task_counts_)) |
| 696 .none()); | 702 .none()); |
| 697 RemoveTaskSetsFromTaskCounts(task_counts_, state.task_sets); | 703 RemoveTaskSetsFromTaskCounts(task_counts_, state.task_sets); |
| 698 continue; | 704 continue; |
| 699 } | 705 } |
| 700 | 706 |
| 701 resource_provider_->BeginSetPixels(raster_task->resource()->id()); | 707 resource_provider_->BeginSetPixels(raster_task->resource()->id()); |
| 702 has_performed_uploads_since_last_flush_ = true; | 708 has_performed_uploads_since_last_flush_ = true; |
| 703 | 709 |
| 704 bytes_pending_upload_ += raster_task->resource()->bytes(); | 710 // We can use UncheckedMemorySizeBytes here, since these tasks come from |
| 711 // tiles, the size of which is controlled by the compositor. |
| 712 bytes_pending_upload_ += Resource::UncheckedMemorySizeBytes( |
| 713 raster_task->resource()->size(), raster_task->resource()->format()); |
| 705 raster_tasks_with_pending_upload_.push_back(raster_task); | 714 raster_tasks_with_pending_upload_.push_back(raster_task); |
| 706 state.type = RasterTaskState::UPLOADING; | 715 state.type = RasterTaskState::UPLOADING; |
| 707 } | 716 } |
| 708 completed_tasks_.clear(); | 717 completed_tasks_.clear(); |
| 709 } | 718 } |
| 710 | 719 |
| 711 scoped_refptr<base::trace_event::ConvertableToTraceFormat> | 720 scoped_refptr<base::trace_event::ConvertableToTraceFormat> |
| 712 PixelBufferTileTaskWorkerPool::StateAsValue() const { | 721 PixelBufferTileTaskWorkerPool::StateAsValue() const { |
| 713 scoped_refptr<base::trace_event::TracedValue> state = | 722 scoped_refptr<base::trace_event::TracedValue> state = |
| 714 new base::trace_event::TracedValue(); | 723 new base::trace_event::TracedValue(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 731 throttle_state->SetInteger( | 740 throttle_state->SetInteger( |
| 732 "bytes_available_for_upload", | 741 "bytes_available_for_upload", |
| 733 static_cast<int>(max_bytes_pending_upload_ - bytes_pending_upload_)); | 742 static_cast<int>(max_bytes_pending_upload_ - bytes_pending_upload_)); |
| 734 throttle_state->SetInteger("bytes_pending_upload", | 743 throttle_state->SetInteger("bytes_pending_upload", |
| 735 static_cast<int>(bytes_pending_upload_)); | 744 static_cast<int>(bytes_pending_upload_)); |
| 736 throttle_state->SetInteger("scheduled_raster_task_count", | 745 throttle_state->SetInteger("scheduled_raster_task_count", |
| 737 static_cast<int>(scheduled_raster_task_count_)); | 746 static_cast<int>(scheduled_raster_task_count_)); |
| 738 } | 747 } |
| 739 | 748 |
| 740 } // namespace cc | 749 } // namespace cc |
| OLD | NEW |