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 29e86df716865e07a4381942f6a908db3ea57e11..c69886ae50f810ca274d312a4793af899a4e121e 100644 |
--- a/gpu/command_buffer/client/gles2_implementation_unittest.cc |
+++ b/gpu/command_buffer/client/gles2_implementation_unittest.cc |
@@ -901,51 +901,92 @@ TEST_F(GLES2ImplementationTest, ShaderSource) { |
const GLuint kShaderId = 456; |
const char* kString1 = "foobar"; |
const char* kString2 = "barfoo"; |
- const size_t kString1Size = strlen(kString1); |
- const size_t kString2Size = strlen(kString2); |
- const size_t kString3Size = 1; // Want the NULL; |
- const size_t kSourceSize = kString1Size + kString2Size + kString3Size; |
+ const size_t kString1Size = strlen(kString1) + 1; |
+ const size_t kString2Size = strlen(kString2) + 1; |
+ const size_t kHeaderSize = sizeof(GLint) * 3; |
+ const size_t kSourceSize = kHeaderSize + kString1Size + kString2Size; |
+ const size_t kPaddedHeaderSize = |
+ transfer_buffer_->RoundToAlignment(kHeaderSize); |
const size_t kPaddedString1Size = |
transfer_buffer_->RoundToAlignment(kString1Size); |
const size_t kPaddedString2Size = |
transfer_buffer_->RoundToAlignment(kString2Size); |
- const size_t kPaddedString3Size = |
- transfer_buffer_->RoundToAlignment(kString3Size); |
struct Cmds { |
cmd::SetBucketSize set_bucket_size; |
- cmd::SetBucketData set_bucket_data1; |
+ cmd::SetBucketData set_bucket_header; |
cmd::SetToken set_token1; |
- cmd::SetBucketData set_bucket_data2; |
+ cmd::SetBucketData set_bucket_data1; |
cmd::SetToken set_token2; |
- cmd::SetBucketData set_bucket_data3; |
+ cmd::SetBucketData set_bucket_data2; |
cmd::SetToken set_token3; |
cmds::ShaderSourceBucket shader_source_bucket; |
cmd::SetBucketSize clear_bucket_size; |
}; |
+ ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize); |
ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size); |
ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size); |
- ExpectedMemoryInfo mem3 = GetExpectedMemory(kPaddedString3Size); |
Cmds expected; |
expected.set_bucket_size.Init(kBucketId, kSourceSize); |
- expected.set_bucket_data1.Init( |
- kBucketId, 0, kString1Size, mem1.id, mem1.offset); |
+ expected.set_bucket_header.Init( |
+ kBucketId, 0, kHeaderSize, mem0.id, mem0.offset); |
expected.set_token1.Init(GetNextToken()); |
- expected.set_bucket_data2.Init( |
- kBucketId, kString1Size, kString2Size, mem2.id, mem2.offset); |
+ expected.set_bucket_data1.Init( |
+ kBucketId, kHeaderSize, kString1Size, mem1.id, mem1.offset); |
expected.set_token2.Init(GetNextToken()); |
- expected.set_bucket_data3.Init( |
- kBucketId, kString1Size + kString2Size, |
- kString3Size, mem3.id, mem3.offset); |
+ expected.set_bucket_data2.Init( |
+ kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id, |
+ mem2.offset); |
expected.set_token3.Init(GetNextToken()); |
expected.shader_source_bucket.Init(kShaderId, kBucketId); |
expected.clear_bucket_size.Init(kBucketId, 0); |
- const char* strings[] = { |
+ const char* kStrings[] = { |
kString1, |
kString2, |
}; |
- gl_->ShaderSource(kShaderId, 2, strings, NULL); |
+ gl_->ShaderSource(kShaderId, 2, kStrings, NULL); |
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
+} |
+ |
+TEST_F(GLES2ImplementationTest, ShaderSourceWithLength) { |
+ const uint32 kBucketId = GLES2Implementation::kResultBucketId; |
+ const GLuint kShaderId = 456; |
+ const char* kString = "foobar******"; |
+ const size_t kStringSize = 6; // We only need "foobar". |
+ const size_t kHeaderSize = sizeof(GLint) * 2; |
+ const size_t kSourceSize = kHeaderSize + kStringSize + 1; |
+ const size_t kPaddedHeaderSize = |
+ transfer_buffer_->RoundToAlignment(kHeaderSize); |
+ const size_t kPaddedStringSize = |
+ transfer_buffer_->RoundToAlignment(kStringSize + 1); |
+ |
+ struct Cmds { |
+ cmd::SetBucketSize set_bucket_size; |
+ cmd::SetBucketData set_bucket_header; |
+ cmd::SetToken set_token1; |
+ cmd::SetBucketData set_bucket_data; |
+ cmd::SetToken set_token2; |
+ cmds::ShaderSourceBucket shader_source_bucket; |
+ cmd::SetBucketSize clear_bucket_size; |
+ }; |
+ |
+ ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize); |
+ ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedStringSize); |
+ |
+ Cmds expected; |
+ expected.set_bucket_size.Init(kBucketId, kSourceSize); |
+ expected.set_bucket_header.Init( |
+ kBucketId, 0, kHeaderSize, mem0.id, mem0.offset); |
+ expected.set_token1.Init(GetNextToken()); |
+ expected.set_bucket_data.Init( |
+ kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset); |
+ expected.set_token2.Init(GetNextToken()); |
+ expected.shader_source_bucket.Init(kShaderId, kBucketId); |
+ expected.clear_bucket_size.Init(kBucketId, 0); |
+ const char* kStrings[] = { kString }; |
+ const GLint kLength[] = { kStringSize }; |
+ gl_->ShaderSource(kShaderId, 1, kStrings, kLength); |
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
} |
@@ -3514,6 +3555,29 @@ TEST_F(GLES2ImplementationTest, AllowNestedTracesCHROMIUM) { |
EXPECT_EQ(GL_INVALID_OPERATION, CheckError()); |
} |
+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. |
+ // TODO(zmo): it seems we never need the command. Maybe remove it. |
+ GLenum kCap = 1; |
+ struct Cmds { |
+ cmds::IsEnabled cmd; |
+ }; |
+ |
+ Cmds expected; |
+ ExpectedMemoryInfo result1 = |
+ GetExpectedResultMemory(sizeof(cmds::IsEnabled::Result)); |
+ expected.cmd.Init(kCap, result1.id, result1.offset); |
+ |
+ EXPECT_CALL(*command_buffer(), OnFlush()) |
+ .WillOnce(SetMemory(result1.ptr, uint32_t(kCap))) |
+ .RetiresOnSaturation(); |
+ |
+ GLboolean result = gl_->IsEnabled(kCap); |
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
+ EXPECT_TRUE(result); |
+} |
+ |
TEST_F(GLES2ImplementationManualInitTest, LoseContextOnOOM) { |
ContextInitOptions init_options; |
init_options.lose_context_when_out_of_memory = true; |