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 732107b7596cf17f5cd438d8366c8279b8800401..e408610c6ef1c5194df98583dfacd6172b517b3d 100644 |
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc |
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc |
@@ -35,6 +35,7 @@ using testing::DoAll; |
using testing::InSequence; |
using testing::Invoke; |
using testing::Mock; |
+using testing::Pointee; |
using testing::Sequence; |
using testing::StrictMock; |
using testing::Truly; |
@@ -3881,14 +3882,10 @@ TEST_F(GLES2ImplementationTest, VerifySyncTokensCHROMIUM) { |
EXPECT_FALSE(sync_token.verified_flush()); |
ClearCommands(); |
- const GLuint64 kVerifyFenceSync = 234u; |
EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_)) |
.WillOnce(testing::Return(true)); |
- EXPECT_CALL(*gpu_control_, GenerateFenceSyncRelease()) |
- .WillOnce(testing::Return(kVerifyFenceSync)); |
- EXPECT_CALL(*gpu_control_, IsFenceSyncFlushReceived(kVerifyFenceSync)) |
- .WillOnce(testing::Return(true)); |
- gl_->VerifySyncTokensCHROMIUM(sync_token_datas, 1); |
+ EXPECT_CALL(*gpu_control_, EnsureWorkVisible()); |
+ gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas)); |
EXPECT_TRUE(NoCommandsWritten()); |
EXPECT_EQ(GL_NO_ERROR, CheckError()); |
@@ -3898,6 +3895,67 @@ TEST_F(GLES2ImplementationTest, VerifySyncTokensCHROMIUM) { |
EXPECT_TRUE(sync_token.verified_flush()); |
} |
+TEST_F(GLES2ImplementationTest, VerifySyncTokensCHROMIUM_Sequence) { |
+ // To verify sync tokens, the sync tokens must all be verified after |
+ // CanWaitUnverifiedSyncTokens() are called. This test ensures the right |
+ // sequence. |
+ ExpectedMemoryInfo result = |
+ GetExpectedResultMemory(sizeof(cmds::GetError::Result)); |
+ EXPECT_CALL(*command_buffer(), OnFlush()) |
+ .WillRepeatedly(SetMemory(result.ptr, GLuint(GL_NO_ERROR))) |
+ .RetiresOnSaturation(); |
+ |
+ const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; |
+ const GLuint64 kCommandBufferId = 234u; |
+ const GLuint64 kFenceSync1 = 123u; |
+ const GLuint64 kFenceSync2 = 234u; |
+ gpu::SyncToken sync_token1; |
+ gpu::SyncToken sync_token2; |
+ GLbyte* sync_token_datas[] = { sync_token1.GetData(), sync_token2.GetData() }; |
+ |
+ EXPECT_CALL(*gpu_control_, GetNamespaceID()) |
+ .WillRepeatedly(Return(kNamespaceId)); |
+ EXPECT_CALL(*gpu_control_, GetCommandBufferID()) |
+ .WillRepeatedly(Return(kCommandBufferId)); |
+ EXPECT_CALL(*gpu_control_, GetExtraCommandBufferData()) |
+ .WillRepeatedly(Return(0)); |
+ |
+ // Generate sync token 1. |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync1)) |
+ .WillOnce(Return(true)); |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync1)) |
+ .WillOnce(Return(true)); |
+ gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync1, sync_token1.GetData()); |
+ ASSERT_TRUE(sync_token1.HasData()); |
+ ASSERT_FALSE(sync_token1.verified_flush()); |
+ |
+ // Generate sync token 2. |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync2)) |
+ .WillOnce(Return(true)); |
+ EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync2)) |
+ .WillOnce(Return(true)); |
+ gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync2, sync_token2.GetData()); |
+ ASSERT_TRUE(sync_token2.HasData()); |
+ ASSERT_FALSE(sync_token2.verified_flush()); |
+ |
+ // Ensure proper sequence of checking and validating. |
+ Sequence sequence; |
+ EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(Pointee(sync_token1))) |
+ .InSequence(sequence) |
+ .WillOnce(Return(true)); |
+ EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(Pointee(sync_token2))) |
+ .InSequence(sequence) |
+ .WillOnce(Return(true)); |
+ EXPECT_CALL(*gpu_control_, EnsureWorkVisible()) |
+ .InSequence(sequence); |
+ gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas)); |
+ EXPECT_TRUE(NoCommandsWritten()); |
+ EXPECT_EQ(GL_NO_ERROR, CheckError()); |
+ |
+ EXPECT_TRUE(sync_token1.verified_flush()); |
+ EXPECT_TRUE(sync_token2.verified_flush()); |
+} |
+ |
TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUM) { |
const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; |
const GLuint64 kCommandBufferId = 234u; |