diff options
author | backer@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-14 19:46:03 +0000 |
---|---|---|
committer | backer@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-14 19:46:03 +0000 |
commit | aa283dc1f1c26d650ee8d6170c8eecfedad1138c (patch) | |
tree | 69780bf8f53161bc976e77843af7143727d7046f /gpu | |
parent | d9d8f9f150646e0adcb2948097cea99f89db41c4 (diff) | |
download | chromium_src-aa283dc1f1c26d650ee8d6170c8eecfedad1138c.zip chromium_src-aa283dc1f1c26d650ee8d6170c8eecfedad1138c.tar.gz chromium_src-aa283dc1f1c26d650ee8d6170c8eecfedad1138c.tar.bz2 |
GPU: Instrument AsyncTexImage2D and TexImage2D for telemetry.
This makes the total_texture_upload and total_texture_upload_time results
from telemetry consistent when run with and without impl-side painting.
TEST=by hand via telemetry (http://dev.chromium.org/developers/telemetry)
Review URL: https://chromiumcodereview.appspot.com/16923010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206476 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
5 files changed, 50 insertions, 13 deletions
diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc index d6c17ce..8564e01 100644 --- a/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc +++ b/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc @@ -247,9 +247,11 @@ class TransferStateInternal transfer_completion_.Wait(); } - void PerformAsyncTexImage2D(AsyncTexImage2DParams tex_params, - AsyncMemoryParams mem_params, - ScopedSafeSharedMemory* safe_shared_memory) { + void PerformAsyncTexImage2D( + AsyncTexImage2DParams tex_params, + AsyncMemoryParams mem_params, + ScopedSafeSharedMemory* safe_shared_memory, + scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) { TRACE_EVENT2("gpu", "PerformAsyncTexImage", "width", @@ -262,6 +264,11 @@ class TransferStateInternal void* data = AsyncPixelTransferDelegate::GetAddress(safe_shared_memory, mem_params); + + base::TimeTicks begin_time; + if (texture_upload_stats.get()) + begin_time = base::TimeTicks::HighResNow(); + { TRACE_EVENT0("gpu", "glTexImage2D no data"); glGenTextures(1, &thread_texture_id_); @@ -294,6 +301,10 @@ class TransferStateInternal MarkAsCompleted(); DCHECK(CHECK_GL()); + if (texture_upload_stats.get()) { + texture_upload_stats->AddUpload(base::TimeTicks::HighResNow() - + begin_time); + } } void PerformAsyncTexSubImage2D( @@ -517,8 +528,8 @@ void AsyncPixelTransferDelegateEGL::AsyncTexImage2D( mem_params, base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(), mem_params.shared_memory, - mem_params.shm_size)))); - + mem_params.shm_size)), + shared_state_->texture_upload_stats)); DCHECK(CHECK_GL()); } diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc index aa6cd67..80f6409 100644 --- a/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc +++ b/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc @@ -167,6 +167,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D( void* data = GetAddress(safe_shared_memory, mem_params); + base::TimeTicks begin_time(base::TimeTicks::HighResNow()); gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_); { @@ -184,6 +185,9 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D( } transfer_in_progress_ = false; + shared_state_->texture_upload_count++; + shared_state_->total_texture_upload_time += + base::TimeTicks::HighResNow() - begin_time; // The texture is already fully bound so just call it now. bind_callback.Run(); diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc index e9b7659..67aa52e 100644 --- a/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc +++ b/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc @@ -186,9 +186,11 @@ class TransferStateInternal bind_callback_ = bind_callback; } - void PerformAsyncTexImage2D(AsyncTexImage2DParams tex_params, - AsyncMemoryParams mem_params, - ScopedSafeSharedMemory* safe_shared_memory) { + void PerformAsyncTexImage2D( + AsyncTexImage2DParams tex_params, + AsyncMemoryParams mem_params, + ScopedSafeSharedMemory* safe_shared_memory, + scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) { base::AutoLock locked(upload_lock_); if (cancel_upload_flag_.IsSet()) return; @@ -201,6 +203,10 @@ class TransferStateInternal tex_params.height); DCHECK_EQ(0, tex_params.level); + base::TimeTicks begin_time; + if (texture_upload_stats.get()) + begin_time = base::TimeTicks::HighResNow(); + void* data = AsyncPixelTransferDelegate::GetAddress(safe_shared_memory, mem_params); @@ -220,6 +226,11 @@ class TransferStateInternal } MarkAsCompleted(); + + if (texture_upload_stats.get()) { + texture_upload_stats->AddUpload(base::TimeTicks::HighResNow() - + begin_time); + } } void PerformAsyncTexSubImage2D( @@ -392,7 +403,8 @@ void AsyncPixelTransferDelegateShareGroup::AsyncTexImage2D( mem_params, base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(), mem_params.shared_memory, - mem_params.shm_size)))); + mem_params.shm_size)), + shared_state_->texture_upload_stats)); } void AsyncPixelTransferDelegateShareGroup::AsyncTexSubImage2D( diff --git a/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc b/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc index dce95a6..65d1198 100644 --- a/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc +++ b/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc @@ -47,6 +47,7 @@ void AsyncPixelTransferDelegateSync::AsyncTexImage2D( // Save the define params to return later during deferred // binding of the transfer texture. void* data = GetAddress(mem_params); + base::TimeTicks begin_time(base::TimeTicks::HighResNow()); glTexImage2D( tex_params.target, tex_params.level, @@ -57,6 +58,9 @@ void AsyncPixelTransferDelegateSync::AsyncTexImage2D( tex_params.format, tex_params.type, data); + shared_state_->texture_upload_count++; + shared_state_->total_texture_upload_time += + base::TimeTicks::HighResNow() - begin_time; // The texture is already fully bound so just call it now. bind_callback.Run(); } diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index a8562ad..8c4bd25 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -7783,16 +7783,22 @@ void GLES2DecoderImpl::DoTexImage2D( } if (!teximage2d_faster_than_texsubimage2d_ && level_is_same && pixels) { - glTexSubImage2D(target, level, 0, 0, width, height, format, type, pixels); + { + ScopedTextureUploadTimer timer(this); + glTexSubImage2D(target, level, 0, 0, width, height, format, type, pixels); + } texture_manager()->SetLevelCleared(texture_ref, target, level, true); tex_image_2d_failed_ = false; return; } LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glTexImage2D"); - glTexImage2D( - target, level, internal_format, width, height, border, format, type, - pixels); + { + ScopedTextureUploadTimer timer(this); + glTexImage2D( + target, level, internal_format, width, height, border, format, type, + pixels); + } GLenum error = LOCAL_PEEK_GL_ERROR("glTexImage2D"); if (error == GL_NO_ERROR) { texture_manager()->SetLevelInfo( |