summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormartina.kollarova <martina.kollarova@intel.com>2016-02-26 03:01:10 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-26 11:02:39 +0000
commitab30699eb1fb791f448ed6449b49677670876a57 (patch)
tree6f63c299c50fb2b339b896f20bc032ea0cab63d5
parentc0cce2c0c7beaa0793942997754b62d9f1f6cdb1 (diff)
downloadchromium_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.cc2
-rw-r--r--ui/gl/gpu_timing.cc15
-rw-r--r--ui/gl/gpu_timing_unittest.cc1
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());