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