Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/one_copy_tile_task_worker_pool.h" | 5 #include "cc/raster/one_copy_tile_task_worker_pool.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 ResourceProvider* resource_provider_; | 67 ResourceProvider* resource_provider_; |
| 68 ResourcePool* resource_pool_; | 68 ResourcePool* resource_pool_; |
| 69 const Resource* resource_; | 69 const Resource* resource_; |
| 70 scoped_ptr<ScopedResource> raster_resource_; | 70 scoped_ptr<ScopedResource> raster_resource_; |
| 71 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> lock_; | 71 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> lock_; |
| 72 CopySequenceNumber sequence_; | 72 CopySequenceNumber sequence_; |
| 73 | 73 |
| 74 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); | 74 DISALLOW_COPY_AND_ASSIGN(RasterBufferImpl); |
| 75 }; | 75 }; |
| 76 | 76 |
| 77 // Flush interval when performing copy operations. | |
| 78 const int kCopyFlushPeriod = 4; | |
| 79 | |
| 80 // Number of in-flight copy operations to allow. | 77 // Number of in-flight copy operations to allow. |
| 81 const int kMaxCopyOperations = 32; | 78 const int kMaxCopyOperations = 32; |
| 82 | 79 |
| 83 // Minimum number of rows per copy operation. 4 or greater is required to | 80 // Minimum number of rows per copy operation. 4 or greater is required to |
| 84 // support compressed texture formats. | 81 // support compressed texture formats. |
| 85 const size_t kMinRowsPerCopyOperation = 4; | 82 const size_t kMinRowsPerCopyOperation = 4; |
| 86 | 83 |
| 87 // Delay been checking for copy operations to complete. | 84 // Delay been checking for copy operations to complete. |
| 88 const int kCheckForCompletedCopyOperationsTickRateMs = 1; | 85 const int kCheckForCompletedCopyOperationsTickRateMs = 1; |
| 89 | 86 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 128 task_graph_runner_(task_graph_runner), | 125 task_graph_runner_(task_graph_runner), |
| 129 namespace_token_(task_graph_runner->GetNamespaceToken()), | 126 namespace_token_(task_graph_runner->GetNamespaceToken()), |
| 130 context_provider_(context_provider), | 127 context_provider_(context_provider), |
| 131 resource_provider_(resource_provider), | 128 resource_provider_(resource_provider), |
| 132 resource_pool_(resource_pool), | 129 resource_pool_(resource_pool), |
| 133 max_bytes_per_copy_operation_(max_bytes_per_copy_operation), | 130 max_bytes_per_copy_operation_(max_bytes_per_copy_operation), |
| 134 last_issued_copy_operation_(0), | 131 last_issued_copy_operation_(0), |
| 135 last_flushed_copy_operation_(0), | 132 last_flushed_copy_operation_(0), |
| 136 lock_(), | 133 lock_(), |
| 137 copy_operation_count_cv_(&lock_), | 134 copy_operation_count_cv_(&lock_), |
| 135 bytes_scheduled_since_last_flush_(0), | |
| 138 issued_copy_operation_count_(0), | 136 issued_copy_operation_count_(0), |
| 139 next_copy_operation_sequence_(1), | 137 next_copy_operation_sequence_(1), |
| 140 check_for_completed_copy_operations_pending_(false), | 138 check_for_completed_copy_operations_pending_(false), |
| 141 shutdown_(false), | 139 shutdown_(false), |
| 142 weak_ptr_factory_(this), | 140 weak_ptr_factory_(this), |
| 143 task_set_finished_weak_ptr_factory_(this) { | 141 task_set_finished_weak_ptr_factory_(this) { |
| 144 DCHECK(context_provider_); | 142 DCHECK(context_provider_); |
| 145 } | 143 } |
| 146 | 144 |
| 147 OneCopyTileTaskWorkerPool::~OneCopyTileTaskWorkerPool() { | 145 OneCopyTileTaskWorkerPool::~OneCopyTileTaskWorkerPool() { |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 347 // released before we can issue a copy. | 345 // released before we can issue a copy. |
| 348 pending_copy_operations_.push_back(make_scoped_ptr( | 346 pending_copy_operations_.push_back(make_scoped_ptr( |
| 349 new CopyOperation(write_lock.Pass(), src, dst, | 347 new CopyOperation(write_lock.Pass(), src, dst, |
| 350 gfx::Rect(0, y, src->size().width(), rows_to_copy)))); | 348 gfx::Rect(0, y, src->size().width(), rows_to_copy)))); |
| 351 | 349 |
| 352 y += rows_to_copy; | 350 y += rows_to_copy; |
| 353 | 351 |
| 354 // Acquire a sequence number for this copy operation. | 352 // Acquire a sequence number for this copy operation. |
| 355 sequence = next_copy_operation_sequence_++; | 353 sequence = next_copy_operation_sequence_++; |
| 356 | 354 |
| 355 // Increment |bytes_scheduled_since_last_flush_| by the amount of memory | |
| 356 // used for this copy operation. | |
| 357 bytes_scheduled_since_last_flush_ += rows_to_copy * bytes_per_row; | |
|
vmpstr
2015/06/01 18:35:52
So for big tiles (that are split up into several c
reveman
2015/06/04 01:19:51
Yup, that's the behavior we want.
| |
| 358 | |
| 357 // Post task that will advance last flushed copy operation to |sequence| | 359 // Post task that will advance last flushed copy operation to |sequence| |
| 358 // if we have reached the flush period. | 360 // when |bytes_scheduled_since_last_flush_| has reached |
| 359 if ((sequence % kCopyFlushPeriod) == 0) { | 361 // |max_bytes_per_copy_operation_|. |
| 362 if (bytes_scheduled_since_last_flush_ >= max_bytes_per_copy_operation_) { | |
|
vmpstr
2015/06/02 23:23:27
I think you need to DCHECK that max_bytes_per_copy
reveman
2015/06/04 01:19:51
A flush here is not required for correct behavior.
| |
| 360 task_runner_->PostTask( | 363 task_runner_->PostTask( |
| 361 FROM_HERE, | 364 FROM_HERE, |
| 362 base::Bind(&OneCopyTileTaskWorkerPool::AdvanceLastFlushedCopyTo, | 365 base::Bind(&OneCopyTileTaskWorkerPool::AdvanceLastFlushedCopyTo, |
| 363 weak_ptr_factory_.GetWeakPtr(), sequence)); | 366 weak_ptr_factory_.GetWeakPtr(), sequence)); |
| 367 bytes_scheduled_since_last_flush_ = 0; | |
| 364 } | 368 } |
| 365 } | 369 } |
| 366 | 370 |
| 367 return sequence; | 371 return sequence; |
| 368 } | 372 } |
| 369 | 373 |
| 370 void OneCopyTileTaskWorkerPool::AdvanceLastIssuedCopyTo( | 374 void OneCopyTileTaskWorkerPool::AdvanceLastIssuedCopyTo( |
| 371 CopySequenceNumber sequence) { | 375 CopySequenceNumber sequence) { |
| 372 if (last_issued_copy_operation_ >= sequence) | 376 if (last_issued_copy_operation_ >= sequence) |
| 373 return; | 377 return; |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 513 resource_pool_->total_memory_usage_bytes()); | 517 resource_pool_->total_memory_usage_bytes()); |
| 514 staging_state->SetInteger("pending_copy_count", | 518 staging_state->SetInteger("pending_copy_count", |
| 515 resource_pool_->total_resource_count() - | 519 resource_pool_->total_resource_count() - |
| 516 resource_pool_->acquired_resource_count()); | 520 resource_pool_->acquired_resource_count()); |
| 517 staging_state->SetInteger("bytes_pending_copy", | 521 staging_state->SetInteger("bytes_pending_copy", |
| 518 resource_pool_->total_memory_usage_bytes() - | 522 resource_pool_->total_memory_usage_bytes() - |
| 519 resource_pool_->acquired_memory_usage_bytes()); | 523 resource_pool_->acquired_memory_usage_bytes()); |
| 520 } | 524 } |
| 521 | 525 |
| 522 } // namespace cc | 526 } // namespace cc |
| OLD | NEW |