| Index: gpu/command_buffer/client/gles2_implementation_unittest.cc
|
| diff --git a/gpu/command_buffer/client/gles2_implementation_unittest.cc b/gpu/command_buffer/client/gles2_implementation_unittest.cc
|
| index 799618cb4d795512090201aa20550e3feb8cae11..70a09adb32d632305751a66f90b32cf07525b308 100644
|
| --- a/gpu/command_buffer/client/gles2_implementation_unittest.cc
|
| +++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc
|
| @@ -1676,8 +1676,8 @@ TEST_F(GLES2ImplementationTest, ReadPixels2Reads) {
|
| scoped_ptr<int8[]> buffer(new int8[kWidth * kHeight * kBytesPerPixel]);
|
|
|
| EXPECT_CALL(*command_buffer(), OnFlush())
|
| - .WillOnce(SetMemory(result1.ptr, static_cast<uint32>(1)))
|
| - .WillOnce(SetMemory(result2.ptr, static_cast<uint32>(1)))
|
| + .WillOnce(SetMemory(result1.ptr, static_cast<uint32>(GL_NO_ERROR)))
|
| + .WillOnce(SetMemory(result2.ptr, static_cast<uint32>(GL_NO_ERROR)))
|
| .RetiresOnSaturation();
|
|
|
| gl_->ReadPixels(0, 0, kWidth, kHeight, kFormat, kType, buffer.get());
|
| @@ -1708,12 +1708,52 @@ TEST_F(GLES2ImplementationTest, ReadPixelsBadFormatType) {
|
| scoped_ptr<int8[]> buffer(new int8[kWidth * kHeight * kBytesPerPixel]);
|
|
|
| EXPECT_CALL(*command_buffer(), OnFlush())
|
| - .Times(1)
|
| + .WillOnce(SetMemory(result1.ptr,
|
| + static_cast<uint32>(GL_INVALID_ENUM)))
|
| .RetiresOnSaturation();
|
|
|
| gl_->ReadPixels(0, 0, kWidth, kHeight, kFormat, kType, buffer.get());
|
| }
|
|
|
| +TEST_F(GLES2ImplementationTest, MapBufferErrorPropagation) {
|
| + const GLsizeiptr kBufferSize = 64;
|
| +
|
| + // Create a buffer for readback purposes.
|
| + GLuint buffer = 0;
|
| + gl_->GenBuffers(1, &buffer);
|
| + gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, buffer);
|
| + gl_->BufferData(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM,
|
| + kBufferSize,
|
| + NULL,
|
| + GL_STREAM_READ);
|
| +
|
| + // Expect to successfully map the buffer that was just created.
|
| + EXPECT_CALL(*command_buffer(), OnFlush())
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + void* data = gl_->MapBufferCHROMIUM(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM,
|
| + GL_READ_ONLY);
|
| + EXPECT_TRUE(data);
|
| + gl_->UnmapBufferCHROMIUM(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM);
|
| +
|
| + // Simulate the service encountering a GL_OUT_OF_MEMORY error during a
|
| + // readback into the service-side buffer. The GL error code is internally
|
| + // stored in the 4 bytes following the end of the buffer.
|
| + *(reinterpret_cast<uint32_t*>(static_cast<uint8_t*>(data) + kBufferSize)) =
|
| + GL_OUT_OF_MEMORY;
|
| +
|
| + // Now, try to map the buffer again and expect failure.
|
| + data = gl_->MapBufferCHROMIUM(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM,
|
| + GL_READ_ONLY);
|
| + EXPECT_FALSE(data);
|
| + EXPECT_EQ(GL_OUT_OF_MEMORY, gl_->GetError());
|
| +
|
| + // Clean up.
|
| + gl_->UnmapBufferCHROMIUM(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM);
|
| + gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, 0);
|
| + gl_->DeleteBuffers(1, &buffer);
|
| +}
|
| +
|
| TEST_F(GLES2ImplementationTest, FreeUnusedSharedMemory) {
|
| struct Cmds {
|
| cmds::BufferSubData buf;
|
|
|