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 "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h" | 5 #include "gpu/command_buffer/service/async_pixel_transfer_manager_idle.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/debug/trace_event_synthetic_delay.h" | 9 #include "base/debug/trace_event_synthetic_delay.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 | 82 |
83 void AsyncPixelTransferDelegateIdle::AsyncTexImage2D( | 83 void AsyncPixelTransferDelegateIdle::AsyncTexImage2D( |
84 const AsyncTexImage2DParams& tex_params, | 84 const AsyncTexImage2DParams& tex_params, |
85 const AsyncMemoryParams& mem_params, | 85 const AsyncMemoryParams& mem_params, |
86 const base::Closure& bind_callback) { | 86 const base::Closure& bind_callback) { |
87 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage"); | 87 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage"); |
88 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target); | 88 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target); |
89 | 89 |
90 shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task( | 90 shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task( |
91 id_, | 91 id_, |
92 this, | |
93 base::Bind(&AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D, | 92 base::Bind(&AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D, |
94 AsWeakPtr(), | 93 AsWeakPtr(), |
95 tex_params, | 94 tex_params, |
96 mem_params, | 95 mem_params, |
97 bind_callback))); | 96 bind_callback))); |
98 | 97 |
99 transfer_in_progress_ = true; | 98 transfer_in_progress_ = true; |
100 } | 99 } |
101 | 100 |
102 void AsyncPixelTransferDelegateIdle::AsyncTexSubImage2D( | 101 void AsyncPixelTransferDelegateIdle::AsyncTexSubImage2D( |
103 const AsyncTexSubImage2DParams& tex_params, | 102 const AsyncTexSubImage2DParams& tex_params, |
104 const AsyncMemoryParams& mem_params) { | 103 const AsyncMemoryParams& mem_params) { |
105 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage"); | 104 TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage"); |
106 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target); | 105 DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target); |
107 | 106 |
108 shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task( | 107 shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task( |
109 id_, | 108 id_, |
110 this, | |
111 base::Bind(&AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D, | 109 base::Bind(&AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D, |
112 AsWeakPtr(), | 110 AsWeakPtr(), |
113 tex_params, | 111 tex_params, |
114 mem_params))); | 112 mem_params))); |
115 | 113 |
116 transfer_in_progress_ = true; | 114 transfer_in_progress_ = true; |
117 } | 115 } |
118 | 116 |
119 bool AsyncPixelTransferDelegateIdle::TransferIsInProgress() { | 117 bool AsyncPixelTransferDelegateIdle::TransferIsInProgress() { |
120 return transfer_in_progress_; | 118 return transfer_in_progress_; |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 } | 217 } |
220 | 218 |
221 TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage"); | 219 TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage"); |
222 transfer_in_progress_ = false; | 220 transfer_in_progress_ = false; |
223 shared_state_->texture_upload_count++; | 221 shared_state_->texture_upload_count++; |
224 shared_state_->total_texture_upload_time += | 222 shared_state_->total_texture_upload_time += |
225 base::TimeTicks::HighResNow() - begin_time; | 223 base::TimeTicks::HighResNow() - begin_time; |
226 } | 224 } |
227 | 225 |
228 AsyncPixelTransferManagerIdle::Task::Task( | 226 AsyncPixelTransferManagerIdle::Task::Task( |
229 uint64 transfer_id, | 227 uint64 transfer_id, const base::Closure& task) |
230 AsyncPixelTransferDelegate* delegate, | |
231 const base::Closure& task) | |
232 : transfer_id(transfer_id), | 228 : transfer_id(transfer_id), |
233 delegate(delegate), | |
234 task(task) { | 229 task(task) { |
235 } | 230 } |
236 | 231 |
237 AsyncPixelTransferManagerIdle::Task::~Task() {} | 232 AsyncPixelTransferManagerIdle::Task::~Task() {} |
238 | 233 |
239 AsyncPixelTransferManagerIdle::SharedState::SharedState() | 234 AsyncPixelTransferManagerIdle::SharedState::SharedState() |
240 : texture_upload_count(0) {} | 235 : texture_upload_count(0) {} |
241 | 236 |
242 AsyncPixelTransferManagerIdle::SharedState::~SharedState() {} | 237 AsyncPixelTransferManagerIdle::SharedState::~SharedState() {} |
243 | 238 |
(...skipping 21 matching lines...) Expand all Loading... |
265 void AsyncPixelTransferManagerIdle::AsyncNotifyCompletion( | 260 void AsyncPixelTransferManagerIdle::AsyncNotifyCompletion( |
266 const AsyncMemoryParams& mem_params, | 261 const AsyncMemoryParams& mem_params, |
267 AsyncPixelTransferCompletionObserver* observer) { | 262 AsyncPixelTransferCompletionObserver* observer) { |
268 if (shared_state_.tasks.empty()) { | 263 if (shared_state_.tasks.empty()) { |
269 observer->DidComplete(mem_params); | 264 observer->DidComplete(mem_params); |
270 return; | 265 return; |
271 } | 266 } |
272 | 267 |
273 shared_state_.tasks.push_back( | 268 shared_state_.tasks.push_back( |
274 Task(0, // 0 transfer_id for notification tasks. | 269 Task(0, // 0 transfer_id for notification tasks. |
275 NULL, | |
276 base::Bind( | 270 base::Bind( |
277 &PerformNotifyCompletion, | 271 &PerformNotifyCompletion, |
278 mem_params, | 272 mem_params, |
279 make_scoped_refptr(observer)))); | 273 make_scoped_refptr(observer)))); |
280 } | 274 } |
281 | 275 |
282 uint32 AsyncPixelTransferManagerIdle::GetTextureUploadCount() { | 276 uint32 AsyncPixelTransferManagerIdle::GetTextureUploadCount() { |
283 return shared_state_.texture_upload_count; | 277 return shared_state_.texture_upload_count; |
284 } | 278 } |
285 | 279 |
(...skipping 10 matching lines...) Expand all Loading... |
296 shared_state_.tasks.front().task.Run(); | 290 shared_state_.tasks.front().task.Run(); |
297 shared_state_.tasks.pop_front(); | 291 shared_state_.tasks.pop_front(); |
298 | 292 |
299 shared_state_.ProcessNotificationTasks(); | 293 shared_state_.ProcessNotificationTasks(); |
300 } | 294 } |
301 | 295 |
302 bool AsyncPixelTransferManagerIdle::NeedsProcessMorePendingTransfers() { | 296 bool AsyncPixelTransferManagerIdle::NeedsProcessMorePendingTransfers() { |
303 return !shared_state_.tasks.empty(); | 297 return !shared_state_.tasks.empty(); |
304 } | 298 } |
305 | 299 |
306 void AsyncPixelTransferManagerIdle::WaitAllAsyncTexImage2D() { | |
307 if (shared_state_.tasks.empty()) | |
308 return; | |
309 | |
310 const Task& task = shared_state_.tasks.back(); | |
311 if (task.delegate) | |
312 task.delegate->WaitForTransferCompletion(); | |
313 } | |
314 | |
315 AsyncPixelTransferDelegate* | 300 AsyncPixelTransferDelegate* |
316 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( | 301 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( |
317 gles2::TextureRef* ref, | 302 gles2::TextureRef* ref, |
318 const AsyncTexImage2DParams& define_params) { | 303 const AsyncTexImage2DParams& define_params) { |
319 return new AsyncPixelTransferDelegateIdle(&shared_state_, | 304 return new AsyncPixelTransferDelegateIdle(&shared_state_, |
320 ref->service_id(), | 305 ref->service_id(), |
321 define_params); | 306 define_params); |
322 } | 307 } |
323 | 308 |
324 } // namespace gpu | 309 } // namespace gpu |
OLD | NEW |