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/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
10 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
11 #include "gpu/command_buffer/service/safe_shared_memory_pool.h" | 12 #include "gpu/command_buffer/service/safe_shared_memory_pool.h" |
12 #include "ui/gl/scoped_binders.h" | 13 #include "ui/gl/scoped_binders.h" |
13 | 14 |
14 namespace gpu { | 15 namespace gpu { |
15 | 16 |
16 namespace { | 17 namespace { |
17 | 18 |
18 base::LazyInstance<SafeSharedMemoryPool> g_safe_shared_memory_pool = | 19 base::LazyInstance<SafeSharedMemoryPool> g_safe_shared_memory_pool = |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 } | 162 } |
162 | 163 |
163 void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D( | 164 void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D( |
164 AsyncTexImage2DParams tex_params, | 165 AsyncTexImage2DParams tex_params, |
165 AsyncMemoryParams mem_params, | 166 AsyncMemoryParams mem_params, |
166 const base::Closure& bind_callback, | 167 const base::Closure& bind_callback, |
167 ScopedSafeSharedMemory* safe_shared_memory) { | 168 ScopedSafeSharedMemory* safe_shared_memory) { |
168 TRACE_EVENT2("gpu", "PerformAsyncTexImage2D", | 169 TRACE_EVENT2("gpu", "PerformAsyncTexImage2D", |
169 "width", tex_params.width, | 170 "width", tex_params.width, |
170 "height", tex_params.height); | 171 "height", tex_params.height); |
| 172 TRACE_EVENT_SYNTHETIC_DELAY_ACTIVATE("gpu.AsyncTexImage"); |
171 | 173 |
172 void* data = GetAddress(safe_shared_memory, mem_params); | 174 void* data = GetAddress(safe_shared_memory, mem_params); |
173 | 175 |
174 base::TimeTicks begin_time(base::TimeTicks::HighResNow()); | 176 base::TimeTicks begin_time(base::TimeTicks::HighResNow()); |
175 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); | 177 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); |
176 | 178 |
177 { | 179 { |
178 TRACE_EVENT0("gpu", "glTexImage2D"); | 180 TRACE_EVENT0("gpu", "glTexImage2D"); |
179 glTexImage2D( | 181 glTexImage2D( |
180 tex_params.target, | 182 tex_params.target, |
(...skipping 16 matching lines...) Expand all Loading... |
197 bind_callback.Run(); | 199 bind_callback.Run(); |
198 } | 200 } |
199 | 201 |
200 void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D( | 202 void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D( |
201 AsyncTexSubImage2DParams tex_params, | 203 AsyncTexSubImage2DParams tex_params, |
202 AsyncMemoryParams mem_params, | 204 AsyncMemoryParams mem_params, |
203 ScopedSafeSharedMemory* safe_shared_memory) { | 205 ScopedSafeSharedMemory* safe_shared_memory) { |
204 TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D", | 206 TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D", |
205 "width", tex_params.width, | 207 "width", tex_params.width, |
206 "height", tex_params.height); | 208 "height", tex_params.height); |
| 209 TRACE_EVENT_SYNTHETIC_DELAY_ACTIVATE("gpu.AsyncTexImage"); |
207 | 210 |
208 void* data = GetAddress(safe_shared_memory, mem_params); | 211 void* data = GetAddress(safe_shared_memory, mem_params); |
209 | 212 |
210 base::TimeTicks begin_time(base::TimeTicks::HighResNow()); | 213 base::TimeTicks begin_time(base::TimeTicks::HighResNow()); |
211 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); | 214 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); |
212 | 215 |
213 // If it's a full texture update, use glTexImage2D as it's faster. | 216 // If it's a full texture update, use glTexImage2D as it's faster. |
214 // TODO(epenner): Make this configurable (http://crbug.com/259924) | 217 // TODO(epenner): Make this configurable (http://crbug.com/259924) |
215 if (tex_params.xoffset == 0 && | 218 if (tex_params.xoffset == 0 && |
216 tex_params.yoffset == 0 && | 219 tex_params.yoffset == 0 && |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 | 315 |
313 void AsyncPixelTransferManagerIdle::ProcessMorePendingTransfers() { | 316 void AsyncPixelTransferManagerIdle::ProcessMorePendingTransfers() { |
314 if (shared_state_.tasks.empty()) | 317 if (shared_state_.tasks.empty()) |
315 return; | 318 return; |
316 | 319 |
317 // First task should always be a pixel transfer task. | 320 // First task should always be a pixel transfer task. |
318 DCHECK(shared_state_.tasks.front().transfer_id); | 321 DCHECK(shared_state_.tasks.front().transfer_id); |
319 shared_state_.tasks.front().task.Run(); | 322 shared_state_.tasks.front().task.Run(); |
320 shared_state_.tasks.pop_front(); | 323 shared_state_.tasks.pop_front(); |
321 | 324 |
| 325 if (shared_state_.tasks.size() == 1) |
| 326 TRACE_EVENT_SYNTHETIC_DELAY_APPLY("gpu.AsyncTexImage"); |
| 327 |
322 shared_state_.ProcessNotificationTasks(); | 328 shared_state_.ProcessNotificationTasks(); |
323 } | 329 } |
324 | 330 |
325 bool AsyncPixelTransferManagerIdle::NeedsProcessMorePendingTransfers() { | 331 bool AsyncPixelTransferManagerIdle::NeedsProcessMorePendingTransfers() { |
326 return !shared_state_.tasks.empty(); | 332 return !shared_state_.tasks.empty(); |
327 } | 333 } |
328 | 334 |
329 AsyncPixelTransferDelegate* | 335 AsyncPixelTransferDelegate* |
330 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( | 336 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( |
331 gles2::TextureRef* ref, | 337 gles2::TextureRef* ref, |
332 const AsyncTexImage2DParams& define_params) { | 338 const AsyncTexImage2DParams& define_params) { |
333 return new AsyncPixelTransferDelegateIdle(&shared_state_, | 339 return new AsyncPixelTransferDelegateIdle(&shared_state_, |
334 ref->service_id(), | 340 ref->service_id(), |
335 define_params); | 341 define_params); |
336 } | 342 } |
337 | 343 |
338 } // namespace gpu | 344 } // namespace gpu |
OLD | NEW |