diff options
author | martina.kollarova <martina.kollarova@intel.com> | 2016-02-26 03:01:10 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-26 11:02:39 +0000 |
commit | ab30699eb1fb791f448ed6449b49677670876a57 (patch) | |
tree | 6f63c299c50fb2b339b896f20bc032ea0cab63d5 | |
parent | c0cce2c0c7beaa0793942997754b62d9f1f6cdb1 (diff) | |
download | chromium_src-ab30699eb1fb791f448ed6449b49677670876a57.zip chromium_src-ab30699eb1fb791f448ed6449b49677670876a57.tar.gz chromium_src-ab30699eb1fb791f448ed6449b49677670876a57.tar.bz2 |
Fix segfault in gpu_timing
The extension GL_ARB_timer_query depends on GL 3.2, expecting that
glGetInteger64v is available.
BUG=583656
CQ_INCLUDE_TRYBOTS=tryserver.chromium.win:win_optional_gpu_tests_rel
Review URL: https://codereview.chromium.org/1679163003
Cr-Commit-Position: refs/heads/master@{#377866}
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc | 2 | ||||
-rw-r--r-- | ui/gl/gpu_timing.cc | 15 | ||||
-rw-r--r-- | ui/gl/gpu_timing_unittest.cc | 1 |
3 files changed, 9 insertions, 9 deletions
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc index e2ecece..5c1e048 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc @@ -1011,7 +1011,7 @@ TEST_P(GLES2DecoderManualInitTest, BeginInvalidTargetQueryFails) { TEST_P(GLES2DecoderManualInitTest, QueryCounterEXTTimeStamp) { InitState init; init.extensions = "GL_ARB_timer_query"; - init.gl_version = "opengl 2.0"; + init.gl_version = "opengl es 3.0"; init.has_alpha = true; init.request_alpha = true; init.bind_generates_resource = true; diff --git a/ui/gl/gpu_timing.cc b/ui/gl/gpu_timing.cc index d8c0127..f5d9ae0 100644 --- a/ui/gl/gpu_timing.cc +++ b/ui/gl/gpu_timing.cc @@ -319,14 +319,6 @@ GPUTimingImpl::GPUTimingImpl(GLContextReal* context) { DCHECK(version_info); if (context->HasExtension("GL_EXT_disjoint_timer_query")) { timer_type_ = GPUTiming::kTimerTypeDisjoint; - if (!version_info->is_es3) { - // Due to a bug in the specification, glGetInteger64v is only supported - // under ES3. Since it is only used for timestamps, we workaround this by - // emulating timestamps on ES2 so WebGL 1.0 will still have access to the - // extension - force_time_elapsed_query_ = true; - timestamp_bit_count_gl_ = 0; - } } else if (context->HasExtension("GL_ARB_timer_query")) { timer_type_ = GPUTiming::kTimerTypeARB; } else if (context->HasExtension("GL_EXT_timer_query")) { @@ -334,6 +326,13 @@ GPUTimingImpl::GPUTimingImpl(GLContextReal* context) { force_time_elapsed_query_ = true; timestamp_bit_count_gl_ = 0; } + // The command glGetInteger64v is only supported under ES3 and GL3.2. Since it + // is only used for timestamps, we workaround this by emulating timestamps + // so WebGL 1.0 will still have access to the extension. + if (!version_info->IsAtLeastGLES(3, 0) && !version_info->IsAtLeastGL(3, 2)) { + force_time_elapsed_query_ = true; + timestamp_bit_count_gl_ = 0; + } } GPUTimingImpl::~GPUTimingImpl() { diff --git a/ui/gl/gpu_timing_unittest.cc b/ui/gl/gpu_timing_unittest.cc index fa5b1f1..22f6562 100644 --- a/ui/gl/gpu_timing_unittest.cc +++ b/ui/gl/gpu_timing_unittest.cc @@ -93,6 +93,7 @@ TEST_F(GPUTimingTest, FakeTimerTest) { TEST_F(GPUTimingTest, ForceTimeElapsedQuery) { // Test that forcing time elapsed query affects all clients. + SetupGLContext("3.2", "GL_ARB_timer_query"); scoped_refptr<GPUTimingClient> client1 = CreateGPUTimingClient(); EXPECT_FALSE(client1->IsForceTimeElapsedQuery()); |