Elapsed timer queries are virtual and support multiple queries.
commit1fa4219648d62b18de8729b53abefa2ab0c6dd94
authordyen <dyen@chromium.org>
Wed, 17 Jun 2015 21:25:39 +0000 (17 14:25 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 17 Jun 2015 21:26:21 +0000 (17 21:26 +0000)
treead8229b4795bcaed5152c1accd3ab765150bcdd2
parent01836a8926364e73f92719180d934434382c5f9c
Elapsed timer queries are virtual and support multiple queries.

GPUTiming now handles the virtualization of elapsed timer queries
which allow us to support multiple queries across different uses. For
example we can now do internal timings for performance reasons, as
well as using the GPUTracer, as well as supporting WebGL related
query calls.

Along with the virtualization of timer queries, using the elapsed
timer mode in GPUTiming also estimates the time stamp that
GL_ARB_timer_query and GL_EXT_disjoint_timer_query would normally
return using GL_TIME_ELAPSED_EXT. This allows us to workaround issues
when the drivers are not working properly with reasonable values.

Most of the code here is due to the fact that GL_TIME_ELAPSED_EXT has a
limitation where only 1 query can only be allowed in a GL Context. What
I have basically done is split up queries into multiple query chunks
and adding them up at the end. Since queries are correct relative to
one another when they are stacking on top of each other, the GPU timer
can utilize the end and start time to figure out the delta.

R=sievers@chromium.org, vmiura@chromium.org
BUG=453965, 345227

Review URL: https://codereview.chromium.org/1152153006

Cr-Commit-Position: refs/heads/master@{#334922}
12 files changed:
gpu/command_buffer/service/gles2_cmd_decoder.cc
gpu/command_buffer/service/gpu_tracer.cc
gpu/command_buffer/service/gpu_tracer_unittest.cc
gpu/config/gpu_driver_bug_list_json.cc
gpu/config/gpu_driver_bug_workaround_type.h
gpu/perftests/measurements.cc
gpu/perftests/texture_upload_perftest.cc
ui/gl/gl_context.cc
ui/gl/gpu_timing.cc
ui/gl/gpu_timing.h
ui/gl/gpu_timing_fake.cc
ui/gl/gpu_timing_unittest.cc