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/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
9 #include "base/memory/weak_ptr.h" | 9 #include "base/memory/weak_ptr.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 AsyncMemoryParams mem_params) { | 176 AsyncMemoryParams mem_params) { |
177 TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D", | 177 TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D", |
178 "width", tex_params.width, | 178 "width", tex_params.width, |
179 "height", tex_params.height); | 179 "height", tex_params.height); |
180 | 180 |
181 void* data = mem_params.GetDataAddress(); | 181 void* data = mem_params.GetDataAddress(); |
182 | 182 |
183 base::TimeTicks begin_time(base::TimeTicks::Now()); | 183 base::TimeTicks begin_time(base::TimeTicks::Now()); |
184 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); | 184 gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); |
185 | 185 |
186 // If it's a full texture update, use glTexImage2D as it's faster. | 186 if (shared_state_->use_teximage2d_over_texsubimage2d && |
187 // TODO(epenner): Make this configurable (http://crbug.com/259924) | 187 tex_params.xoffset == 0 && |
188 if (tex_params.xoffset == 0 && | |
189 tex_params.yoffset == 0 && | 188 tex_params.yoffset == 0 && |
190 tex_params.target == define_params_.target && | 189 tex_params.target == define_params_.target && |
191 tex_params.level == define_params_.level && | 190 tex_params.level == define_params_.level && |
192 tex_params.width == define_params_.width && | 191 tex_params.width == define_params_.width && |
193 tex_params.height == define_params_.height) { | 192 tex_params.height == define_params_.height) { |
194 TRACE_EVENT0("gpu", "glTexImage2D"); | 193 TRACE_EVENT0("gpu", "glTexImage2D"); |
195 glTexImage2D( | 194 glTexImage2D( |
196 define_params_.target, | 195 define_params_.target, |
197 define_params_.level, | 196 define_params_.level, |
198 define_params_.internal_format, | 197 define_params_.internal_format, |
(...skipping 28 matching lines...) Expand all Loading... |
227 uint64 transfer_id, | 226 uint64 transfer_id, |
228 AsyncPixelTransferDelegate* delegate, | 227 AsyncPixelTransferDelegate* delegate, |
229 const base::Closure& task) | 228 const base::Closure& task) |
230 : transfer_id(transfer_id), | 229 : transfer_id(transfer_id), |
231 delegate(delegate), | 230 delegate(delegate), |
232 task(task) { | 231 task(task) { |
233 } | 232 } |
234 | 233 |
235 AsyncPixelTransferManagerIdle::Task::~Task() {} | 234 AsyncPixelTransferManagerIdle::Task::~Task() {} |
236 | 235 |
237 AsyncPixelTransferManagerIdle::SharedState::SharedState() | 236 AsyncPixelTransferManagerIdle::SharedState::SharedState( |
238 : texture_upload_count(0) {} | 237 bool use_teximage2d_over_texsubimage2d) |
| 238 : use_teximage2d_over_texsubimage2d(use_teximage2d_over_texsubimage2d), |
| 239 texture_upload_count(0) { |
| 240 } |
239 | 241 |
240 AsyncPixelTransferManagerIdle::SharedState::~SharedState() {} | 242 AsyncPixelTransferManagerIdle::SharedState::~SharedState() {} |
241 | 243 |
242 void AsyncPixelTransferManagerIdle::SharedState::ProcessNotificationTasks() { | 244 void AsyncPixelTransferManagerIdle::SharedState::ProcessNotificationTasks() { |
243 while (!tasks.empty()) { | 245 while (!tasks.empty()) { |
244 // Stop when we reach a pixel transfer task. | 246 // Stop when we reach a pixel transfer task. |
245 if (tasks.front().transfer_id) | 247 if (tasks.front().transfer_id) |
246 return; | 248 return; |
247 | 249 |
248 tasks.front().task.Run(); | 250 tasks.front().task.Run(); |
249 tasks.pop_front(); | 251 tasks.pop_front(); |
250 } | 252 } |
251 } | 253 } |
252 | 254 |
253 AsyncPixelTransferManagerIdle::AsyncPixelTransferManagerIdle() | 255 AsyncPixelTransferManagerIdle::AsyncPixelTransferManagerIdle( |
254 : shared_state_() { | 256 bool use_teximage2d_over_texsubimage2d) |
| 257 : shared_state_(use_teximage2d_over_texsubimage2d) { |
255 } | 258 } |
256 | 259 |
257 AsyncPixelTransferManagerIdle::~AsyncPixelTransferManagerIdle() {} | 260 AsyncPixelTransferManagerIdle::~AsyncPixelTransferManagerIdle() {} |
258 | 261 |
259 void AsyncPixelTransferManagerIdle::BindCompletedAsyncTransfers() { | 262 void AsyncPixelTransferManagerIdle::BindCompletedAsyncTransfers() { |
260 // Everything is already bound. | 263 // Everything is already bound. |
261 } | 264 } |
262 | 265 |
263 void AsyncPixelTransferManagerIdle::AsyncNotifyCompletion( | 266 void AsyncPixelTransferManagerIdle::AsyncNotifyCompletion( |
264 const AsyncMemoryParams& mem_params, | 267 const AsyncMemoryParams& mem_params, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 AsyncPixelTransferDelegate* | 316 AsyncPixelTransferDelegate* |
314 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( | 317 AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl( |
315 gles2::TextureRef* ref, | 318 gles2::TextureRef* ref, |
316 const AsyncTexImage2DParams& define_params) { | 319 const AsyncTexImage2DParams& define_params) { |
317 return new AsyncPixelTransferDelegateIdle(&shared_state_, | 320 return new AsyncPixelTransferDelegateIdle(&shared_state_, |
318 ref->service_id(), | 321 ref->service_id(), |
319 define_params); | 322 define_params); |
320 } | 323 } |
321 | 324 |
322 } // namespace gpu | 325 } // namespace gpu |
OLD | NEW |