OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/resources/resource_update_controller.h" | 5 #include "cc/resources/resource_update_controller.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "cc/base/thread.h" | 10 #include "cc/base/thread.h" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 task_posted_ = true; | 100 task_posted_ = true; |
101 thread_->PostTask( | 101 thread_->PostTask( |
102 base::Bind(&ResourceUpdateController::OnTimerFired, | 102 base::Bind(&ResourceUpdateController::OnTimerFired, |
103 weak_factory_.GetWeakPtr())); | 103 weak_factory_.GetWeakPtr())); |
104 } | 104 } |
105 | 105 |
106 first_update_attempt_ = false; | 106 first_update_attempt_ = false; |
107 } | 107 } |
108 | 108 |
109 void ResourceUpdateController::DiscardUploadsToEvictedResources() { | 109 void ResourceUpdateController::DiscardUploadsToEvictedResources() { |
110 queue_->clearUploadsToEvictedResources(); | 110 queue_->ClearUploadsToEvictedResources(); |
111 } | 111 } |
112 | 112 |
113 void ResourceUpdateController::UpdateTexture(ResourceUpdate update) { | 113 void ResourceUpdateController::UpdateTexture(ResourceUpdate update) { |
114 if (update.picture) { | 114 if (update.picture) { |
115 PrioritizedResource* texture = update.texture; | 115 PrioritizedResource* texture = update.texture; |
116 gfx::Rect picture_rect = update.content_rect; | 116 gfx::Rect picture_rect = update.content_rect; |
117 gfx::Rect source_rect = update.source_rect; | 117 gfx::Rect source_rect = update.source_rect; |
118 gfx::Vector2d dest_offset = update.dest_offset; | 118 gfx::Vector2d dest_offset = update.dest_offset; |
119 | 119 |
120 texture->AcquireBackingTexture(resource_provider_); | 120 texture->AcquireBackingTexture(resource_provider_); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 resource_provider_, | 176 resource_provider_, |
177 static_cast<const uint8_t*>(update.bitmap->getPixels()), | 177 static_cast<const uint8_t*>(update.bitmap->getPixels()), |
178 update.content_rect, | 178 update.content_rect, |
179 update.source_rect, | 179 update.source_rect, |
180 update.dest_offset); | 180 update.dest_offset); |
181 update.bitmap->unlockPixels(); | 181 update.bitmap->unlockPixels(); |
182 } | 182 } |
183 } | 183 } |
184 | 184 |
185 void ResourceUpdateController::Finalize() { | 185 void ResourceUpdateController::Finalize() { |
186 while (queue_->fullUploadSize()) | 186 while (queue_->FullUploadSize()) |
187 UpdateTexture(queue_->takeFirstFullUpload()); | 187 UpdateTexture(queue_->TakeFirstFullUpload()); |
188 | 188 |
189 while (queue_->partialUploadSize()) | 189 while (queue_->PartialUploadSize()) |
190 UpdateTexture(queue_->takeFirstPartialUpload()); | 190 UpdateTexture(queue_->TakeFirstPartialUpload()); |
191 | 191 |
192 resource_provider_->FlushUploads(); | 192 resource_provider_->FlushUploads(); |
193 | 193 |
194 if (queue_->copySize()) { | 194 if (queue_->CopySize()) { |
195 TextureCopier* copier = resource_provider_->texture_copier(); | 195 TextureCopier* copier = resource_provider_->texture_copier(); |
196 while (queue_->copySize()) | 196 while (queue_->CopySize()) |
197 copier->CopyTexture(queue_->takeFirstCopy()); | 197 copier->CopyTexture(queue_->TakeFirstCopy()); |
198 | 198 |
199 // If we've performed any texture copies, we need to insert a flush | 199 // If we've performed any texture copies, we need to insert a flush |
200 // here into the compositor context before letting the main thread | 200 // here into the compositor context before letting the main thread |
201 // proceed as it may make draw calls to the source texture of one of | 201 // proceed as it may make draw calls to the source texture of one of |
202 // our copy operations. | 202 // our copy operations. |
203 copier->Flush(); | 203 copier->Flush(); |
204 } | 204 } |
205 } | 205 } |
206 | 206 |
207 void ResourceUpdateController::OnTimerFired() { | 207 void ResourceUpdateController::OnTimerFired() { |
(...skipping 19 matching lines...) Expand all Loading... |
227 } | 227 } |
228 | 228 |
229 base::TimeDelta ResourceUpdateController::PendingUpdateTime() const { | 229 base::TimeDelta ResourceUpdateController::PendingUpdateTime() const { |
230 base::TimeDelta update_one_resource_time = | 230 base::TimeDelta update_one_resource_time = |
231 UpdateMoreTexturesTime() / UpdateMoreTexturesSize(); | 231 UpdateMoreTexturesTime() / UpdateMoreTexturesSize(); |
232 return update_one_resource_time * resource_provider_->NumBlockingUploads(); | 232 return update_one_resource_time * resource_provider_->NumBlockingUploads(); |
233 } | 233 } |
234 | 234 |
235 bool ResourceUpdateController::UpdateMoreTexturesIfEnoughTimeRemaining() { | 235 bool ResourceUpdateController::UpdateMoreTexturesIfEnoughTimeRemaining() { |
236 while (resource_provider_->NumBlockingUploads() < MaxBlockingUpdates()) { | 236 while (resource_provider_->NumBlockingUploads() < MaxBlockingUpdates()) { |
237 if (!queue_->fullUploadSize()) | 237 if (!queue_->FullUploadSize()) |
238 return false; | 238 return false; |
239 | 239 |
240 if (!time_limit_.is_null()) { | 240 if (!time_limit_.is_null()) { |
241 // Estimated completion time of all pending updates. | 241 // Estimated completion time of all pending updates. |
242 base::TimeTicks completion_time = Now() + PendingUpdateTime(); | 242 base::TimeTicks completion_time = Now() + PendingUpdateTime(); |
243 | 243 |
244 // Time remaining based on current completion estimate. | 244 // Time remaining based on current completion estimate. |
245 base::TimeDelta time_remaining = time_limit_ - completion_time; | 245 base::TimeDelta time_remaining = time_limit_ - completion_time; |
246 | 246 |
247 if (time_remaining < UpdateMoreTexturesTime()) | 247 if (time_remaining < UpdateMoreTexturesTime()) |
248 return true; | 248 return true; |
249 } | 249 } |
250 | 250 |
251 UpdateMoreTexturesNow(); | 251 UpdateMoreTexturesNow(); |
252 } | 252 } |
253 | 253 |
254 task_posted_ = true; | 254 task_posted_ = true; |
255 thread_->PostDelayedTask( | 255 thread_->PostDelayedTask( |
256 base::Bind(&ResourceUpdateController::OnTimerFired, | 256 base::Bind(&ResourceUpdateController::OnTimerFired, |
257 weak_factory_.GetWeakPtr()), | 257 weak_factory_.GetWeakPtr()), |
258 base::TimeDelta::FromMilliseconds(kUploaderBusyTickRate * 1000)); | 258 base::TimeDelta::FromMilliseconds(kUploaderBusyTickRate * 1000)); |
259 return true; | 259 return true; |
260 } | 260 } |
261 | 261 |
262 void ResourceUpdateController::UpdateMoreTexturesNow() { | 262 void ResourceUpdateController::UpdateMoreTexturesNow() { |
263 size_t uploads = std::min( | 263 size_t uploads = std::min( |
264 queue_->fullUploadSize(), UpdateMoreTexturesSize()); | 264 queue_->FullUploadSize(), UpdateMoreTexturesSize()); |
265 | 265 |
266 if (!uploads) | 266 if (!uploads) |
267 return; | 267 return; |
268 | 268 |
269 while (queue_->fullUploadSize() && uploads--) | 269 while (queue_->FullUploadSize() && uploads--) |
270 UpdateTexture(queue_->takeFirstFullUpload()); | 270 UpdateTexture(queue_->TakeFirstFullUpload()); |
271 | 271 |
272 resource_provider_->FlushUploads(); | 272 resource_provider_->FlushUploads(); |
273 } | 273 } |
274 | 274 |
275 } // namespace cc | 275 } // namespace cc |
OLD | NEW |