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 35218c3308774456e64cc4a7059135a643695bfe..d53e647758c142bf425f2fdb73f226da00651aaf 100644 |
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc |
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc |
@@ -3741,6 +3741,84 @@ TEST_F(GLES2ImplementationTest, AllowNestedTracesCHROMIUM) { |
EXPECT_EQ(GL_INVALID_OPERATION, CheckError()); |
} |
+TEST_F(GLES2ImplementationTest, InsertFenceSyncCHROMIUM) { |
+ const GLuint64 kFenceSync = 123u; |
+ EXPECT_CALL(*gpu_control_, GenerateFenceSyncRelease()) |
+ .WillOnce(testing::Return(kFenceSync)); |
+ |
+ struct Cmds { |
+ cmds::InsertFenceSyncCHROMIUM insert_fence_sync; |
+ }; |
+ Cmds expected; |
+ expected.insert_fence_sync.Init(kFenceSync); |
+ |
+ const GLuint64 fence_sync = gl_->InsertFenceSyncCHROMIUM(); |
+ EXPECT_EQ(kFenceSync, fence_sync); |
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
+} |
+ |
+TEST_F(GLES2ImplementationTest, GenSyncTokenCHROMIUM) { |
+ const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; |
+ const GLuint64 kCommandBufferId = 234u; |
+ const GLuint64 kFenceSync = 123u; |
+ GLbyte sync_token[GL_SYNC_TOKEN_SIZE_CHROMIUM]; |
+ |
+ EXPECT_CALL(*gpu_control_, GetNamespaceID()) |
+ .WillRepeatedly(testing::Return(kNamespaceId)); |
+ EXPECT_CALL(*gpu_control_, GetCommandBufferID()) |
+ .WillRepeatedly(testing::Return(kCommandBufferId)); |
+ |
+ gl_->GenSyncTokenCHROMIUM(kFenceSync, nullptr); |
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError()); |
+ |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) |
+ .WillOnce(testing::Return(false)); |
+ gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token); |
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError()); |
+ |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) |
+ .WillOnce(testing::Return(true)); |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync)) |
+ .WillOnce(testing::Return(false)); |
+ gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token); |
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError()); |
+ |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) |
+ .WillOnce(testing::Return(true)); |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync)) |
+ .WillOnce(testing::Return(true)); |
+ ClearCommands(); |
+ gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token); |
+ EXPECT_TRUE(NoCommandsWritten()); |
+ EXPECT_EQ(GL_NO_ERROR, CheckError()); |
+} |
+ |
+TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUM) { |
+ const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; |
+ const GLuint64 kCommandBufferId = 234u; |
+ const GLuint64 kFenceSync = 456u; |
+ GLbyte sync_token[GL_SYNC_TOKEN_SIZE_CHROMIUM]; |
+ |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) |
+ .WillOnce(testing::Return(true)); |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync)) |
+ .WillOnce(testing::Return(true)); |
+ EXPECT_CALL(*gpu_control_, GetNamespaceID()) |
+ .WillOnce(testing::Return(kNamespaceId)); |
+ EXPECT_CALL(*gpu_control_, GetCommandBufferID()) |
+ .WillOnce(testing::Return(kCommandBufferId)); |
+ gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token); |
+ |
+ struct Cmds { |
+ cmds::WaitSyncTokenCHROMIUM wait_sync_token; |
+ }; |
+ Cmds expected; |
+ expected.wait_sync_token.Init(kNamespaceId, kCommandBufferId, kFenceSync); |
+ |
+ gl_->WaitSyncTokenCHROMIUM(sync_token); |
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
+} |
+ |
TEST_F(GLES2ImplementationTest, IsEnabled) { |
// If we use a valid enum, its state is cached on client side, so no command |
// is actually generated, and this test will fail. |