Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(785)

Side by Side Diff: gpu/command_buffer/client/gles2_implementation_unittest.cc

Issue 2727573003: gpu: Add sync token dependencies to flush metadata. (Closed)
Patch Set: piman's review 2 Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Tests for GLES2Implementation. 5 // Tests for GLES2Implementation.
6 6
7 #include "gpu/command_buffer/client/gles2_implementation.h" 7 #include "gpu/command_buffer/client/gles2_implementation.h"
8 8
9 #include <GLES2/gl2.h> 9 #include <GLES2/gl2.h>
10 #include <GLES2/gl2ext.h> 10 #include <GLES2/gl2ext.h>
(...skipping 4069 matching lines...) Expand 10 before | Expand all | Expand 10 after
4080 4080
4081 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) 4081 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync))
4082 .WillOnce(Return(true)); 4082 .WillOnce(Return(true));
4083 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync)) 4083 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync))
4084 .WillOnce(Return(true)); 4084 .WillOnce(Return(true));
4085 gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync, sync_token.GetData()); 4085 gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync, sync_token.GetData());
4086 ASSERT_TRUE(sync_token.HasData()); 4086 ASSERT_TRUE(sync_token.HasData());
4087 ASSERT_FALSE(sync_token.verified_flush()); 4087 ASSERT_FALSE(sync_token.verified_flush());
4088 4088
4089 ClearCommands(); 4089 ClearCommands();
4090 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_)) 4090 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token))
4091 .WillOnce(Return(false)); 4091 .WillOnce(Return(false));
4092 gl_->VerifySyncTokensCHROMIUM(sync_token_datas, 1); 4092 gl_->VerifySyncTokensCHROMIUM(sync_token_datas, 1);
4093 EXPECT_TRUE(NoCommandsWritten()); 4093 EXPECT_TRUE(NoCommandsWritten());
4094 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); 4094 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
4095 EXPECT_FALSE(sync_token.verified_flush()); 4095 EXPECT_FALSE(sync_token.verified_flush());
4096 4096
4097 ClearCommands(); 4097 ClearCommands();
4098 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_)) 4098 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token))
4099 .WillOnce(Return(true)); 4099 .WillOnce(Return(true));
4100 EXPECT_CALL(*gpu_control_, EnsureWorkVisible()); 4100 EXPECT_CALL(*gpu_control_, EnsureWorkVisible());
4101 gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas)); 4101 gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas));
4102 EXPECT_TRUE(NoCommandsWritten()); 4102 EXPECT_TRUE(NoCommandsWritten());
4103 EXPECT_EQ(GL_NO_ERROR, CheckError()); 4103 EXPECT_EQ(GL_NO_ERROR, CheckError());
4104 4104
4105 EXPECT_EQ(kNamespaceId, sync_token.namespace_id()); 4105 EXPECT_EQ(kNamespaceId, sync_token.namespace_id());
4106 EXPECT_EQ(kCommandBufferId, sync_token.command_buffer_id()); 4106 EXPECT_EQ(kCommandBufferId, sync_token.command_buffer_id());
4107 EXPECT_EQ(kFenceSync, sync_token.release_count()); 4107 EXPECT_EQ(kFenceSync, sync_token.release_count());
4108 EXPECT_TRUE(sync_token.verified_flush()); 4108 EXPECT_TRUE(sync_token.verified_flush());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
4147 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync2)) 4147 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync2))
4148 .WillOnce(Return(true)); 4148 .WillOnce(Return(true));
4149 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync2)) 4149 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushed(kFenceSync2))
4150 .WillOnce(Return(true)); 4150 .WillOnce(Return(true));
4151 gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync2, sync_token2.GetData()); 4151 gl_->GenUnverifiedSyncTokenCHROMIUM(kFenceSync2, sync_token2.GetData());
4152 ASSERT_TRUE(sync_token2.HasData()); 4152 ASSERT_TRUE(sync_token2.HasData());
4153 ASSERT_FALSE(sync_token2.verified_flush()); 4153 ASSERT_FALSE(sync_token2.verified_flush());
4154 4154
4155 // Ensure proper sequence of checking and validating. 4155 // Ensure proper sequence of checking and validating.
4156 Sequence sequence; 4156 Sequence sequence;
4157 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(Pointee(sync_token1))) 4157 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token1))
4158 .InSequence(sequence) 4158 .InSequence(sequence)
4159 .WillOnce(Return(true)); 4159 .WillOnce(Return(true));
4160 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(Pointee(sync_token2))) 4160 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(sync_token2))
4161 .InSequence(sequence) 4161 .InSequence(sequence)
4162 .WillOnce(Return(true)); 4162 .WillOnce(Return(true));
4163 EXPECT_CALL(*gpu_control_, EnsureWorkVisible()) 4163 EXPECT_CALL(*gpu_control_, EnsureWorkVisible())
4164 .InSequence(sequence); 4164 .InSequence(sequence);
4165 gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas)); 4165 gl_->VerifySyncTokensCHROMIUM(sync_token_datas, arraysize(sync_token_datas));
4166 EXPECT_TRUE(NoCommandsWritten()); 4166 EXPECT_TRUE(NoCommandsWritten());
4167 EXPECT_EQ(GL_NO_ERROR, CheckError()); 4167 EXPECT_EQ(GL_NO_ERROR, CheckError());
4168 4168
4169 EXPECT_TRUE(sync_token1.verified_flush()); 4169 EXPECT_TRUE(sync_token1.verified_flush());
4170 EXPECT_TRUE(sync_token2.verified_flush()); 4170 EXPECT_TRUE(sync_token2.verified_flush());
4171 } 4171 }
4172 4172
4173 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUM) { 4173 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUM) {
4174 const CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO; 4174 CommandBufferNamespace kNamespaceId = CommandBufferNamespace::GPU_IO;
4175 const CommandBufferId kCommandBufferId = 4175 CommandBufferId kCommandBufferId = CommandBufferId::FromUnsafeValue(234u);
4176 CommandBufferId::FromUnsafeValue(234u); 4176 GLuint64 kFenceSync = 456u;
4177 const GLuint64 kFenceSync = 456u; 4177
4178 GLbyte sync_token[GL_SYNC_TOKEN_SIZE_CHROMIUM]; 4178 gpu::SyncToken sync_token;
4179 GLbyte* sync_token_data = sync_token.GetData();
4179 4180
4180 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync)) 4181 EXPECT_CALL(*gpu_control_, IsFenceSyncRelease(kFenceSync))
4181 .WillOnce(Return(true)); 4182 .WillOnce(Return(true));
4182 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushReceived(kFenceSync)) 4183 EXPECT_CALL(*gpu_control_, IsFenceSyncFlushReceived(kFenceSync))
4183 .WillOnce(Return(true)); 4184 .WillOnce(Return(true));
4184 EXPECT_CALL(*gpu_control_, GetNamespaceID()).WillOnce(Return(kNamespaceId)); 4185 EXPECT_CALL(*gpu_control_, GetNamespaceID()).WillOnce(Return(kNamespaceId));
4185 EXPECT_CALL(*gpu_control_, GetCommandBufferID()) 4186 EXPECT_CALL(*gpu_control_, GetCommandBufferID())
4186 .WillOnce(Return(kCommandBufferId)); 4187 .WillOnce(Return(kCommandBufferId));
4187 EXPECT_CALL(*gpu_control_, GetExtraCommandBufferData()).WillOnce(Return(0)); 4188 EXPECT_CALL(*gpu_control_, GetExtraCommandBufferData()).WillOnce(Return(0));
4188 gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token); 4189 gl_->GenSyncTokenCHROMIUM(kFenceSync, sync_token_data);
4189 4190
4190 struct Cmds { 4191 struct Cmds {
4191 cmds::WaitSyncTokenCHROMIUM wait_sync_token; 4192 cmds::WaitSyncTokenCHROMIUM wait_sync_token;
4192 }; 4193 };
4193 Cmds expected; 4194 Cmds expected;
4194 expected.wait_sync_token.Init(kNamespaceId, kCommandBufferId.GetUnsafeValue(), 4195 expected.wait_sync_token.Init(kNamespaceId, kCommandBufferId.GetUnsafeValue(),
4195 kFenceSync); 4196 kFenceSync);
4196 4197
4197 gl_->WaitSyncTokenCHROMIUM(sync_token); 4198 EXPECT_CALL(*gpu_control_, WaitSyncTokenHint(sync_token));
4199 gl_->WaitSyncTokenCHROMIUM(sync_token_data);
4198 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 4200 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
4199 } 4201 }
4200 4202
4201 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUMErrors) { 4203 TEST_F(GLES2ImplementationTest, WaitSyncTokenCHROMIUMErrors) {
4202 ExpectedMemoryInfo result = 4204 ExpectedMemoryInfo result =
4203 GetExpectedResultMemory(sizeof(cmds::GetError::Result)); 4205 GetExpectedResultMemory(sizeof(cmds::GetError::Result));
4204 EXPECT_CALL(*command_buffer(), OnFlush()) 4206 EXPECT_CALL(*command_buffer(), OnFlush())
4205 .WillRepeatedly(SetMemory(result.ptr, GLuint(GL_NO_ERROR))) 4207 .WillRepeatedly(SetMemory(result.ptr, GLuint(GL_NO_ERROR)))
4206 .RetiresOnSaturation(); 4208 .RetiresOnSaturation();
4207 4209
4208 // Empty sync tokens should be produce no error and be a nop. 4210 // Empty sync tokens should be produce no error and be a nop.
4209 ClearCommands(); 4211 ClearCommands();
4210 gl_->WaitSyncTokenCHROMIUM(nullptr); 4212 gl_->WaitSyncTokenCHROMIUM(nullptr);
4211 EXPECT_TRUE(NoCommandsWritten()); 4213 EXPECT_TRUE(NoCommandsWritten());
4212 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError()); 4214 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError());
4213 4215
4214 // Invalid sync tokens should produce no error and be a nop. 4216 // Invalid sync tokens should produce no error and be a nop.
4215 ClearCommands(); 4217 ClearCommands();
4216 gpu::SyncToken invalid_sync_token; 4218 gpu::SyncToken invalid_sync_token;
4217 gl_->WaitSyncTokenCHROMIUM(invalid_sync_token.GetConstData()); 4219 gl_->WaitSyncTokenCHROMIUM(invalid_sync_token.GetConstData());
4218 EXPECT_TRUE(NoCommandsWritten()); 4220 EXPECT_TRUE(NoCommandsWritten());
4219 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError()); 4221 EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError());
4220 4222
4221 // Unverified sync token should produce INVALID_OPERATION. 4223 // Unverified sync token should produce INVALID_OPERATION.
4222 ClearCommands(); 4224 ClearCommands();
4223 gpu::SyncToken unverified_sync_token(CommandBufferNamespace::GPU_IO, 0, 4225 gpu::SyncToken unverified_sync_token(CommandBufferNamespace::GPU_IO, 0,
4224 gpu::CommandBufferId(), 0); 4226 gpu::CommandBufferId(), 0);
4225 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(_)) 4227 EXPECT_CALL(*gpu_control_, CanWaitUnverifiedSyncToken(unverified_sync_token))
4226 .WillOnce(Return(false)); 4228 .WillOnce(Return(false));
4227 gl_->WaitSyncTokenCHROMIUM(unverified_sync_token.GetConstData()); 4229 gl_->WaitSyncTokenCHROMIUM(unverified_sync_token.GetConstData());
4228 EXPECT_TRUE(NoCommandsWritten()); 4230 EXPECT_TRUE(NoCommandsWritten());
4229 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError()); 4231 EXPECT_EQ(static_cast<GLenum>(GL_INVALID_VALUE), gl_->GetError());
4230 } 4232 }
4231 4233
4232 TEST_F(GLES2ImplementationTest, IsEnabled) { 4234 TEST_F(GLES2ImplementationTest, IsEnabled) {
4233 // If we use a valid enum, its state is cached on client side, so no command 4235 // If we use a valid enum, its state is cached on client side, so no command
4234 // is actually generated, and this test will fail. 4236 // is actually generated, and this test will fail.
4235 // TODO(zmo): it seems we never need the command. Maybe remove it. 4237 // TODO(zmo): it seems we never need the command. Maybe remove it.
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
4626 ContextInitOptions init_options; 4628 ContextInitOptions init_options;
4627 init_options.transfer_buffer_initialize_fail = true; 4629 init_options.transfer_buffer_initialize_fail = true;
4628 EXPECT_FALSE(Initialize(init_options)); 4630 EXPECT_FALSE(Initialize(init_options));
4629 } 4631 }
4630 4632
4631 #include "base/macros.h" 4633 #include "base/macros.h"
4632 #include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h" 4634 #include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h"
4633 4635
4634 } // namespace gles2 4636 } // namespace gles2
4635 } // namespace gpu 4637 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/gles2_implementation.cc ('k') | gpu/command_buffer/client/gpu_control.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698