| 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_egl.h" | 5 #include "gpu/command_buffer/service/async_pixel_transfer_manager_egl.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 DCHECK_EQ(0, tex_params.level); | 249 DCHECK_EQ(0, tex_params.level); |
| 250 if (EGL_NO_IMAGE_KHR != egl_image_) { | 250 if (EGL_NO_IMAGE_KHR != egl_image_) { |
| 251 MarkAsCompleted(); | 251 MarkAsCompleted(); |
| 252 return; | 252 return; |
| 253 } | 253 } |
| 254 | 254 |
| 255 void* data = mem_params.GetDataAddress(); | 255 void* data = mem_params.GetDataAddress(); |
| 256 | 256 |
| 257 base::TimeTicks begin_time; | 257 base::TimeTicks begin_time; |
| 258 if (texture_upload_stats.get()) | 258 if (texture_upload_stats.get()) |
| 259 begin_time = base::TimeTicks::HighResNow(); | 259 begin_time = base::TimeTicks::Now(); |
| 260 | 260 |
| 261 { | 261 { |
| 262 TRACE_EVENT0("gpu", "glTexImage2D no data"); | 262 TRACE_EVENT0("gpu", "glTexImage2D no data"); |
| 263 glGenTextures(1, &thread_texture_id_); | 263 glGenTextures(1, &thread_texture_id_); |
| 264 glActiveTexture(GL_TEXTURE0); | 264 glActiveTexture(GL_TEXTURE0); |
| 265 glBindTexture(GL_TEXTURE_2D, thread_texture_id_); | 265 glBindTexture(GL_TEXTURE_2D, thread_texture_id_); |
| 266 | 266 |
| 267 SetGlParametersForEglImageTexture(); | 267 SetGlParametersForEglImageTexture(); |
| 268 | 268 |
| 269 // If we need to use image_preserved, we pass the data with | 269 // If we need to use image_preserved, we pass the data with |
| (...skipping 14 matching lines...) Expand all Loading... |
| 284 // the data yet, so we do this with a full texSubImage. | 284 // the data yet, so we do this with a full texSubImage. |
| 285 if (!use_image_preserved_) | 285 if (!use_image_preserved_) |
| 286 DoFullTexSubImage2D(tex_params, data); | 286 DoFullTexSubImage2D(tex_params, data); |
| 287 } | 287 } |
| 288 | 288 |
| 289 WaitForLastUpload(); | 289 WaitForLastUpload(); |
| 290 MarkAsCompleted(); | 290 MarkAsCompleted(); |
| 291 | 291 |
| 292 DCHECK(CHECK_GL()); | 292 DCHECK(CHECK_GL()); |
| 293 if (texture_upload_stats.get()) { | 293 if (texture_upload_stats.get()) { |
| 294 texture_upload_stats->AddUpload(base::TimeTicks::HighResNow() - | 294 texture_upload_stats->AddUpload(base::TimeTicks::Now() - begin_time); |
| 295 begin_time); | |
| 296 } | 295 } |
| 297 } | 296 } |
| 298 | 297 |
| 299 void PerformAsyncTexSubImage2D( | 298 void PerformAsyncTexSubImage2D( |
| 300 AsyncTexSubImage2DParams tex_params, | 299 AsyncTexSubImage2DParams tex_params, |
| 301 AsyncMemoryParams mem_params, | 300 AsyncMemoryParams mem_params, |
| 302 scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) { | 301 scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) { |
| 303 TRACE_EVENT2("gpu", | 302 TRACE_EVENT2("gpu", |
| 304 "PerformAsyncTexSubImage2D", | 303 "PerformAsyncTexSubImage2D", |
| 305 "width", | 304 "width", |
| 306 tex_params.width, | 305 tex_params.width, |
| 307 "height", | 306 "height", |
| 308 tex_params.height); | 307 tex_params.height); |
| 309 | 308 |
| 310 DCHECK_NE(EGL_NO_IMAGE_KHR, egl_image_); | 309 DCHECK_NE(EGL_NO_IMAGE_KHR, egl_image_); |
| 311 DCHECK_EQ(0, tex_params.level); | 310 DCHECK_EQ(0, tex_params.level); |
| 312 | 311 |
| 313 void* data = mem_params.GetDataAddress(); | 312 void* data = mem_params.GetDataAddress(); |
| 314 | 313 |
| 315 base::TimeTicks begin_time; | 314 base::TimeTicks begin_time; |
| 316 if (texture_upload_stats.get()) | 315 if (texture_upload_stats.get()) |
| 317 begin_time = base::TimeTicks::HighResNow(); | 316 begin_time = base::TimeTicks::Now(); |
| 318 | 317 |
| 319 if (!thread_texture_id_) { | 318 if (!thread_texture_id_) { |
| 320 TRACE_EVENT0("gpu", "glEGLImageTargetTexture2DOES"); | 319 TRACE_EVENT0("gpu", "glEGLImageTargetTexture2DOES"); |
| 321 glGenTextures(1, &thread_texture_id_); | 320 glGenTextures(1, &thread_texture_id_); |
| 322 glActiveTexture(GL_TEXTURE0); | 321 glActiveTexture(GL_TEXTURE0); |
| 323 glBindTexture(GL_TEXTURE_2D, thread_texture_id_); | 322 glBindTexture(GL_TEXTURE_2D, thread_texture_id_); |
| 324 glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, egl_image_); | 323 glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, egl_image_); |
| 325 } else { | 324 } else { |
| 326 glActiveTexture(GL_TEXTURE0); | 325 glActiveTexture(GL_TEXTURE0); |
| 327 glBindTexture(GL_TEXTURE_2D, thread_texture_id_); | 326 glBindTexture(GL_TEXTURE_2D, thread_texture_id_); |
| 328 } | 327 } |
| 329 { | 328 { |
| 330 TRACE_EVENT0("gpu", "glTexSubImage2D"); | 329 TRACE_EVENT0("gpu", "glTexSubImage2D"); |
| 331 DoTexSubImage2D(tex_params, data); | 330 DoTexSubImage2D(tex_params, data); |
| 332 } | 331 } |
| 333 WaitForLastUpload(); | 332 WaitForLastUpload(); |
| 334 MarkAsCompleted(); | 333 MarkAsCompleted(); |
| 335 | 334 |
| 336 DCHECK(CHECK_GL()); | 335 DCHECK(CHECK_GL()); |
| 337 if (texture_upload_stats.get()) { | 336 if (texture_upload_stats.get()) { |
| 338 texture_upload_stats->AddUpload(base::TimeTicks::HighResNow() - | 337 texture_upload_stats->AddUpload(base::TimeTicks::Now() - begin_time); |
| 339 begin_time); | |
| 340 } | 338 } |
| 341 } | 339 } |
| 342 | 340 |
| 343 protected: | 341 protected: |
| 344 friend class base::RefCountedThreadSafe<TransferStateInternal>; | 342 friend class base::RefCountedThreadSafe<TransferStateInternal>; |
| 345 friend class gpu::AsyncPixelTransferDelegateEGL; | 343 friend class gpu::AsyncPixelTransferDelegateEGL; |
| 346 | 344 |
| 347 static void DeleteTexture(GLuint id) { | 345 static void DeleteTexture(GLuint id) { |
| 348 glDeleteTextures(1, &id); | 346 glDeleteTextures(1, &id); |
| 349 } | 347 } |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 DCHECK_EQ(tex_params.yoffset, 0); | 632 DCHECK_EQ(tex_params.yoffset, 0); |
| 635 DCHECK_EQ(state_->define_params_.width, tex_params.width); | 633 DCHECK_EQ(state_->define_params_.width, tex_params.width); |
| 636 DCHECK_EQ(state_->define_params_.height, tex_params.height); | 634 DCHECK_EQ(state_->define_params_.height, tex_params.height); |
| 637 DCHECK_EQ(state_->define_params_.level, tex_params.level); | 635 DCHECK_EQ(state_->define_params_.level, tex_params.level); |
| 638 DCHECK_EQ(state_->define_params_.format, tex_params.format); | 636 DCHECK_EQ(state_->define_params_.format, tex_params.format); |
| 639 DCHECK_EQ(state_->define_params_.type, tex_params.type); | 637 DCHECK_EQ(state_->define_params_.type, tex_params.type); |
| 640 | 638 |
| 641 void* data = mem_params.GetDataAddress(); | 639 void* data = mem_params.GetDataAddress(); |
| 642 base::TimeTicks begin_time; | 640 base::TimeTicks begin_time; |
| 643 if (shared_state_->texture_upload_stats.get()) | 641 if (shared_state_->texture_upload_stats.get()) |
| 644 begin_time = base::TimeTicks::HighResNow(); | 642 begin_time = base::TimeTicks::Now(); |
| 645 { | 643 { |
| 646 TRACE_EVENT0("gpu", "glTexSubImage2D"); | 644 TRACE_EVENT0("gpu", "glTexSubImage2D"); |
| 647 // Note we use define_params_ instead of tex_params. | 645 // Note we use define_params_ instead of tex_params. |
| 648 // The DCHECKs above verify this is always the same. | 646 // The DCHECKs above verify this is always the same. |
| 649 DoTexImage2D(state_->define_params_, data); | 647 DoTexImage2D(state_->define_params_, data); |
| 650 } | 648 } |
| 651 if (shared_state_->texture_upload_stats.get()) { | 649 if (shared_state_->texture_upload_stats.get()) { |
| 652 shared_state_->texture_upload_stats | 650 shared_state_->texture_upload_stats |
| 653 ->AddUpload(base::TimeTicks::HighResNow() - begin_time); | 651 ->AddUpload(base::TimeTicks::Now() - begin_time); |
| 654 } | 652 } |
| 655 | 653 |
| 656 DCHECK(CHECK_GL()); | 654 DCHECK(CHECK_GL()); |
| 657 return true; | 655 return true; |
| 658 } | 656 } |
| 659 | 657 |
| 660 AsyncPixelTransferManagerEGL::SharedState::SharedState() | 658 AsyncPixelTransferManagerEGL::SharedState::SharedState() |
| 661 // TODO(reveman): Skip this if --enable-gpu-benchmarking is not present. | 659 // TODO(reveman): Skip this if --enable-gpu-benchmarking is not present. |
| 662 : texture_upload_stats(new AsyncPixelTransferUploadStats) { | 660 : texture_upload_stats(new AsyncPixelTransferUploadStats) { |
| 663 const char* vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); | 661 const char* vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR)); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 | 737 |
| 740 AsyncPixelTransferDelegate* | 738 AsyncPixelTransferDelegate* |
| 741 AsyncPixelTransferManagerEGL::CreatePixelTransferDelegateImpl( | 739 AsyncPixelTransferManagerEGL::CreatePixelTransferDelegateImpl( |
| 742 gles2::TextureRef* ref, | 740 gles2::TextureRef* ref, |
| 743 const AsyncTexImage2DParams& define_params) { | 741 const AsyncTexImage2DParams& define_params) { |
| 744 return new AsyncPixelTransferDelegateEGL( | 742 return new AsyncPixelTransferDelegateEGL( |
| 745 &shared_state_, ref->service_id(), define_params); | 743 &shared_state_, ref->service_id(), define_params); |
| 746 } | 744 } |
| 747 | 745 |
| 748 } // namespace gpu | 746 } // namespace gpu |
| OLD | NEW |