summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-14 19:46:03 +0000
committerbacker@chromium.org <backer@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-14 19:46:03 +0000
commitaa283dc1f1c26d650ee8d6170c8eecfedad1138c (patch)
tree69780bf8f53161bc976e77843af7143727d7046f /gpu
parentd9d8f9f150646e0adcb2948097cea99f89db41c4 (diff)
downloadchromium_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')
-rw-r--r--gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc21
-rw-r--r--gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc4
-rw-r--r--gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc20
-rw-r--r--gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc4
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc14
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(