| 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 |