Index: gpu/command_buffer/tests/gl_readback_unittests.cc |
diff --git a/gpu/command_buffer/tests/gl_readback_unittests.cc b/gpu/command_buffer/tests/gl_readback_unittests.cc |
index e725213473de64de51feb280ad6da1c1deb73f04..4ebb09a6f161ba024bd0fc2e4de264bef3d60a84 100644 |
--- a/gpu/command_buffer/tests/gl_readback_unittests.cc |
+++ b/gpu/command_buffer/tests/gl_readback_unittests.cc |
@@ -6,6 +6,9 @@ |
#include <GLES2/gl2ext.h> |
#include <GLES2/gl2extchromium.h> |
+#include "base/bind.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/run_loop.h" |
#include "gpu/command_buffer/tests/gl_manager.h" |
#include "gpu/command_buffer/tests/gl_test_utils.h" |
#include "testing/gmock/include/gmock/gmock.h" |
@@ -23,38 +26,28 @@ class GLReadbackTest : public testing::Test { |
gl_.Destroy(); |
} |
- GLManager gl_; |
-}; |
+ static void WaitForQueryCallback(int q, base::Closure cb) { |
+ unsigned int done = 0; |
+ glGetQueryObjectuivEXT(q, GL_QUERY_RESULT_AVAILABLE_EXT, &done); |
+ if (done) { |
+ cb.Run(); |
+ } else { |
+ base::MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, |
+ base::Bind(&WaitForQueryCallback, q, cb), |
+ base::TimeDelta::FromMilliseconds(3)); |
+ } |
+ } |
+ void WaitForQuery(int q) { |
+ base::RunLoop run_loop; |
+ WaitForQueryCallback(q, run_loop.QuitClosure()); |
+ run_loop.Run(); |
+ } |
-TEST_F(GLReadbackTest, ReadPixelsWithPBO) { |
- const GLint kBytesPerPixel = 4; |
- const GLint kWidth = 2; |
- const GLint kHeight = 2; |
+ GLManager gl_; |
+}; |
- GLuint b; |
- glClearColor(0.0, 0.0, 1.0, 1.0); |
- glClear(GL_COLOR_BUFFER_BIT); |
- glGenBuffers(1, &b); |
- glBindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, b); |
- glBufferData(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, |
- kWidth * kHeight * kBytesPerPixel, |
- NULL, |
- GL_STREAM_READ); |
- glReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0); |
- unsigned char *data = static_cast<unsigned char *>( |
- glMapBufferCHROMIUM( |
- GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, |
- GL_READ_ONLY)); |
- EXPECT_TRUE(data); |
- EXPECT_EQ(data[0], 0); // red |
- EXPECT_EQ(data[1], 0); // green |
- EXPECT_EQ(data[2], 255); // blue |
- glUnmapBufferCHROMIUM(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM); |
- glBindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, 0); |
- glDeleteBuffers(1, &b); |
- GLTestHelper::CheckGLError("no errors", __LINE__); |
-} |
TEST_F(GLReadbackTest, ReadPixelsWithPBOAndQuery) { |
const GLint kBytesPerPixel = 4; |
@@ -71,14 +64,11 @@ TEST_F(GLReadbackTest, ReadPixelsWithPBOAndQuery) { |
kWidth * kHeight * kBytesPerPixel, |
NULL, |
GL_STREAM_READ); |
- glBeginQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM, q); |
+ glBeginQueryEXT(GL_ASYNC_READ_PIXELS_COMPLETED_CHROMIUM, q); |
glReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0); |
- glEndQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM); |
+ glEndQueryEXT(GL_ASYNC_READ_PIXELS_COMPLETED_CHROMIUM); |
glFlush(); |
- unsigned int done = 0; |
- while (!done) { |
- glGetQueryObjectuivEXT(q, GL_QUERY_RESULT_AVAILABLE_EXT, &done); |
- } |
+ WaitForQuery(q); |
// TODO(hubbe): Check that glMapBufferCHROMIUM does not block here. |
unsigned char *data = static_cast<unsigned char *>( |