OLD | NEW |
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 #include <stddef.h> |
| 6 #include <stdint.h> |
| 7 |
| 8 #include "gpu/command_buffer/service/cmd_buffer_engine.h" |
5 #include "gpu/command_buffer/service/common_decoder.h" | 9 #include "gpu/command_buffer/service/common_decoder.h" |
6 #include "gpu/command_buffer/service/cmd_buffer_engine.h" | |
7 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
8 | 11 |
9 namespace gpu { | 12 namespace gpu { |
10 | 13 |
11 TEST(CommonDecoderBucket, Basic) { | 14 TEST(CommonDecoderBucket, Basic) { |
12 CommonDecoder::Bucket bucket; | 15 CommonDecoder::Bucket bucket; |
13 EXPECT_EQ(0u, bucket.size()); | 16 EXPECT_EQ(0u, bucket.size()); |
14 EXPECT_TRUE(NULL == bucket.GetData(0, 0)); | 17 EXPECT_TRUE(NULL == bucket.GetData(0, 0)); |
15 } | 18 } |
16 | 19 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 return GetCommonCommandName(static_cast<cmd::CommandId>(command_id)); | 58 return GetCommonCommandName(static_cast<cmd::CommandId>(command_id)); |
56 } | 59 } |
57 | 60 |
58 // Overridden from AsyncAPIInterface | 61 // Overridden from AsyncAPIInterface |
59 error::Error DoCommand(unsigned int command, | 62 error::Error DoCommand(unsigned int command, |
60 unsigned int arg_count, | 63 unsigned int arg_count, |
61 const void* cmd_data) override { | 64 const void* cmd_data) override { |
62 return DoCommonCommand(command, arg_count, cmd_data); | 65 return DoCommonCommand(command, arg_count, cmd_data); |
63 } | 66 } |
64 | 67 |
65 CommonDecoder::Bucket* GetBucket(uint32 id) const { | 68 CommonDecoder::Bucket* GetBucket(uint32_t id) const { |
66 return CommonDecoder::GetBucket(id); | 69 return CommonDecoder::GetBucket(id); |
67 } | 70 } |
68 }; | 71 }; |
69 | 72 |
70 class MockCommandBufferEngine : public CommandBufferEngine { | 73 class MockCommandBufferEngine : public CommandBufferEngine { |
71 public: | 74 public: |
72 static const int32 kStartValidShmId = 1; | 75 static const int32_t kStartValidShmId = 1; |
73 static const int32 kValidShmId = 2; | 76 static const int32_t kValidShmId = 2; |
74 static const int32 kInvalidShmId = 3; | 77 static const int32_t kInvalidShmId = 3; |
75 static const size_t kBufferSize = 1024; | 78 static const size_t kBufferSize = 1024; |
76 static const int32 kValidOffset = kBufferSize / 2; | 79 static const int32_t kValidOffset = kBufferSize / 2; |
77 static const int32 kInvalidOffset = kBufferSize; | 80 static const int32_t kInvalidOffset = kBufferSize; |
78 | 81 |
79 MockCommandBufferEngine() | 82 MockCommandBufferEngine() |
80 : CommandBufferEngine(), | 83 : CommandBufferEngine(), |
81 token_(), | 84 token_(), |
82 get_offset_(0) { | 85 get_offset_(0) { |
83 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); | 86 scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory()); |
84 shared_memory->CreateAndMapAnonymous(kBufferSize); | 87 shared_memory->CreateAndMapAnonymous(kBufferSize); |
85 buffer_ = MakeBufferFromSharedMemory(std::move(shared_memory), kBufferSize); | 88 buffer_ = MakeBufferFromSharedMemory(std::move(shared_memory), kBufferSize); |
86 } | 89 } |
87 | 90 |
88 // Overridden from CommandBufferEngine. | 91 // Overridden from CommandBufferEngine. |
89 scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id) override { | 92 scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32_t shm_id) override { |
90 if (IsValidSharedMemoryId(shm_id)) | 93 if (IsValidSharedMemoryId(shm_id)) |
91 return buffer_; | 94 return buffer_; |
92 return NULL; | 95 return NULL; |
93 } | 96 } |
94 | 97 |
95 template <typename T> | 98 template <typename T> |
96 T GetSharedMemoryAs(uint32 offset) { | 99 T GetSharedMemoryAs(uint32_t offset) { |
97 DCHECK_LT(offset, kBufferSize); | 100 DCHECK_LT(offset, kBufferSize); |
98 int8* buffer_memory = static_cast<int8*>(buffer_->memory()); | 101 int8_t* buffer_memory = static_cast<int8_t*>(buffer_->memory()); |
99 return reinterpret_cast<T>(&buffer_memory[offset]); | 102 return reinterpret_cast<T>(&buffer_memory[offset]); |
100 } | 103 } |
101 | 104 |
102 int32 GetSharedMemoryOffset(const void* memory) { | 105 int32_t GetSharedMemoryOffset(const void* memory) { |
103 int8* buffer_memory = static_cast<int8*>(buffer_->memory()); | 106 int8_t* buffer_memory = static_cast<int8_t*>(buffer_->memory()); |
104 ptrdiff_t offset = static_cast<const int8*>(memory) - &buffer_memory[0]; | 107 ptrdiff_t offset = static_cast<const int8_t*>(memory) - &buffer_memory[0]; |
105 DCHECK_GE(offset, 0); | 108 DCHECK_GE(offset, 0); |
106 DCHECK_LT(static_cast<size_t>(offset), kBufferSize); | 109 DCHECK_LT(static_cast<size_t>(offset), kBufferSize); |
107 return static_cast<int32>(offset); | 110 return static_cast<int32_t>(offset); |
108 } | 111 } |
109 | 112 |
110 // Overridden from CommandBufferEngine. | 113 // Overridden from CommandBufferEngine. |
111 void set_token(int32 token) override { token_ = token; } | 114 void set_token(int32_t token) override { token_ = token; } |
112 | 115 |
113 int32 token() const { | 116 int32_t token() const { return token_; } |
114 return token_; | |
115 } | |
116 | 117 |
117 // Overridden from CommandBufferEngine. | 118 // Overridden from CommandBufferEngine. |
118 bool SetGetBuffer(int32 transfer_buffer_id) override { | 119 bool SetGetBuffer(int32_t transfer_buffer_id) override { |
119 NOTREACHED(); | 120 NOTREACHED(); |
120 return false; | 121 return false; |
121 } | 122 } |
122 | 123 |
123 // Overridden from CommandBufferEngine. | 124 // Overridden from CommandBufferEngine. |
124 bool SetGetOffset(int32 offset) override { | 125 bool SetGetOffset(int32_t offset) override { |
125 if (static_cast<size_t>(offset) < kBufferSize) { | 126 if (static_cast<size_t>(offset) < kBufferSize) { |
126 get_offset_ = offset; | 127 get_offset_ = offset; |
127 return true; | 128 return true; |
128 } | 129 } |
129 return false; | 130 return false; |
130 } | 131 } |
131 | 132 |
132 // Overridden from CommandBufferEngine. | 133 // Overridden from CommandBufferEngine. |
133 int32 GetGetOffset() override { return get_offset_; } | 134 int32_t GetGetOffset() override { return get_offset_; } |
134 | 135 |
135 private: | 136 private: |
136 bool IsValidSharedMemoryId(int32 shm_id) { | 137 bool IsValidSharedMemoryId(int32_t shm_id) { |
137 return shm_id == kValidShmId || shm_id == kStartValidShmId; | 138 return shm_id == kValidShmId || shm_id == kStartValidShmId; |
138 } | 139 } |
139 | 140 |
140 scoped_refptr<gpu::Buffer> buffer_; | 141 scoped_refptr<gpu::Buffer> buffer_; |
141 int32 token_; | 142 int32_t token_; |
142 int32 get_offset_; | 143 int32_t get_offset_; |
143 }; | 144 }; |
144 | 145 |
145 const int32 MockCommandBufferEngine::kStartValidShmId; | 146 const int32_t MockCommandBufferEngine::kStartValidShmId; |
146 const int32 MockCommandBufferEngine::kValidShmId; | 147 const int32_t MockCommandBufferEngine::kValidShmId; |
147 const int32 MockCommandBufferEngine::kInvalidShmId; | 148 const int32_t MockCommandBufferEngine::kInvalidShmId; |
148 const size_t MockCommandBufferEngine::kBufferSize; | 149 const size_t MockCommandBufferEngine::kBufferSize; |
149 const int32 MockCommandBufferEngine::kValidOffset; | 150 const int32_t MockCommandBufferEngine::kValidOffset; |
150 const int32 MockCommandBufferEngine::kInvalidOffset; | 151 const int32_t MockCommandBufferEngine::kInvalidOffset; |
151 | 152 |
152 class CommonDecoderTest : public testing::Test { | 153 class CommonDecoderTest : public testing::Test { |
153 protected: | 154 protected: |
154 void SetUp() override { decoder_.set_engine(&engine_); } | 155 void SetUp() override { decoder_.set_engine(&engine_); } |
155 | 156 |
156 void TearDown() override {} | 157 void TearDown() override {} |
157 | 158 |
158 template <typename T> | 159 template <typename T> |
159 error::Error ExecuteCmd(const T& cmd) { | 160 error::Error ExecuteCmd(const T& cmd) { |
160 static_assert(T::kArgFlags == cmd::kFixed, | 161 static_assert(T::kArgFlags == cmd::kFixed, |
(...skipping 17 matching lines...) Expand all Loading... |
178 TEST_F(CommonDecoderTest, Initialize) { | 179 TEST_F(CommonDecoderTest, Initialize) { |
179 EXPECT_EQ(0, engine_.GetGetOffset()); | 180 EXPECT_EQ(0, engine_.GetGetOffset()); |
180 } | 181 } |
181 | 182 |
182 TEST_F(CommonDecoderTest, DoCommonCommandInvalidCommand) { | 183 TEST_F(CommonDecoderTest, DoCommonCommandInvalidCommand) { |
183 EXPECT_EQ(error::kUnknownCommand, decoder_.DoCommand(999999, 0, NULL)); | 184 EXPECT_EQ(error::kUnknownCommand, decoder_.DoCommand(999999, 0, NULL)); |
184 } | 185 } |
185 | 186 |
186 TEST_F(CommonDecoderTest, HandleNoop) { | 187 TEST_F(CommonDecoderTest, HandleNoop) { |
187 cmd::Noop cmd; | 188 cmd::Noop cmd; |
188 const uint32 kSkipCount = 5; | 189 const uint32_t kSkipCount = 5; |
189 cmd.Init(kSkipCount); | 190 cmd.Init(kSkipCount); |
190 EXPECT_EQ(error::kNoError, | 191 EXPECT_EQ(error::kNoError, |
191 ExecuteImmediateCmd( | 192 ExecuteImmediateCmd( |
192 cmd, kSkipCount * kCommandBufferEntrySize)); | 193 cmd, kSkipCount * kCommandBufferEntrySize)); |
193 const uint32 kSkipCount2 = 1; | 194 const uint32_t kSkipCount2 = 1; |
194 cmd.Init(kSkipCount2); | 195 cmd.Init(kSkipCount2); |
195 EXPECT_EQ(error::kNoError, | 196 EXPECT_EQ(error::kNoError, |
196 ExecuteImmediateCmd( | 197 ExecuteImmediateCmd( |
197 cmd, kSkipCount2 * kCommandBufferEntrySize)); | 198 cmd, kSkipCount2 * kCommandBufferEntrySize)); |
198 } | 199 } |
199 | 200 |
200 TEST_F(CommonDecoderTest, SetToken) { | 201 TEST_F(CommonDecoderTest, SetToken) { |
201 cmd::SetToken cmd; | 202 cmd::SetToken cmd; |
202 const int32 kTokenId = 123; | 203 const int32_t kTokenId = 123; |
203 EXPECT_EQ(0, engine_.token()); | 204 EXPECT_EQ(0, engine_.token()); |
204 cmd.Init(kTokenId); | 205 cmd.Init(kTokenId); |
205 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 206 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
206 EXPECT_EQ(kTokenId, engine_.token()); | 207 EXPECT_EQ(kTokenId, engine_.token()); |
207 } | 208 } |
208 | 209 |
209 TEST_F(CommonDecoderTest, SetBucketSize) { | 210 TEST_F(CommonDecoderTest, SetBucketSize) { |
210 cmd::SetBucketSize cmd; | 211 cmd::SetBucketSize cmd; |
211 const uint32 kBucketId = 123; | 212 const uint32_t kBucketId = 123; |
212 const uint32 kBucketLength1 = 1234; | 213 const uint32_t kBucketLength1 = 1234; |
213 const uint32 kBucketLength2 = 78; | 214 const uint32_t kBucketLength2 = 78; |
214 // Check the bucket does not exist. | 215 // Check the bucket does not exist. |
215 EXPECT_TRUE(NULL == decoder_.GetBucket(kBucketId)); | 216 EXPECT_TRUE(NULL == decoder_.GetBucket(kBucketId)); |
216 // Check we can create one. | 217 // Check we can create one. |
217 cmd.Init(kBucketId, kBucketLength1); | 218 cmd.Init(kBucketId, kBucketLength1); |
218 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 219 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
219 CommonDecoder::Bucket* bucket; | 220 CommonDecoder::Bucket* bucket; |
220 bucket = decoder_.GetBucket(kBucketId); | 221 bucket = decoder_.GetBucket(kBucketId); |
221 EXPECT_TRUE(NULL != bucket); | 222 EXPECT_TRUE(NULL != bucket); |
222 EXPECT_EQ(kBucketLength1, bucket->size()); | 223 EXPECT_EQ(kBucketLength1, bucket->size()); |
223 // Check we can change it. | 224 // Check we can change it. |
224 cmd.Init(kBucketId, kBucketLength2); | 225 cmd.Init(kBucketId, kBucketLength2); |
225 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 226 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
226 bucket = decoder_.GetBucket(kBucketId); | 227 bucket = decoder_.GetBucket(kBucketId); |
227 EXPECT_TRUE(NULL != bucket); | 228 EXPECT_TRUE(NULL != bucket); |
228 EXPECT_EQ(kBucketLength2, bucket->size()); | 229 EXPECT_EQ(kBucketLength2, bucket->size()); |
229 // Check we can delete it. | 230 // Check we can delete it. |
230 cmd.Init(kBucketId, 0); | 231 cmd.Init(kBucketId, 0); |
231 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 232 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
232 bucket = decoder_.GetBucket(kBucketId); | 233 bucket = decoder_.GetBucket(kBucketId); |
233 EXPECT_EQ(0u, bucket->size()); | 234 EXPECT_EQ(0u, bucket->size()); |
234 } | 235 } |
235 | 236 |
236 TEST_F(CommonDecoderTest, SetBucketData) { | 237 TEST_F(CommonDecoderTest, SetBucketData) { |
237 cmd::SetBucketSize size_cmd; | 238 cmd::SetBucketSize size_cmd; |
238 cmd::SetBucketData cmd; | 239 cmd::SetBucketData cmd; |
239 | 240 |
240 static const char kData[] = "1234567890123456789"; | 241 static const char kData[] = "1234567890123456789"; |
241 | 242 |
242 const uint32 kBucketId = 123; | 243 const uint32_t kBucketId = 123; |
243 const uint32 kInvalidBucketId = 124; | 244 const uint32_t kInvalidBucketId = 124; |
244 | 245 |
245 size_cmd.Init(kBucketId, sizeof(kData)); | 246 size_cmd.Init(kBucketId, sizeof(kData)); |
246 EXPECT_EQ(error::kNoError, ExecuteCmd(size_cmd)); | 247 EXPECT_EQ(error::kNoError, ExecuteCmd(size_cmd)); |
247 CommonDecoder::Bucket* bucket = decoder_.GetBucket(kBucketId); | 248 CommonDecoder::Bucket* bucket = decoder_.GetBucket(kBucketId); |
248 // Check the data is not there. | 249 // Check the data is not there. |
249 EXPECT_NE(0, memcmp(bucket->GetData(0, sizeof(kData)), kData, sizeof(kData))); | 250 EXPECT_NE(0, memcmp(bucket->GetData(0, sizeof(kData)), kData, sizeof(kData))); |
250 | 251 |
251 // Check we can set it. | 252 // Check we can set it. |
252 const uint32 kSomeOffsetInSharedMemory = 50; | 253 const uint32_t kSomeOffsetInSharedMemory = 50; |
253 void* memory = engine_.GetSharedMemoryAs<void*>(kSomeOffsetInSharedMemory); | 254 void* memory = engine_.GetSharedMemoryAs<void*>(kSomeOffsetInSharedMemory); |
254 memcpy(memory, kData, sizeof(kData)); | 255 memcpy(memory, kData, sizeof(kData)); |
255 cmd.Init(kBucketId, 0, sizeof(kData), | 256 cmd.Init(kBucketId, 0, sizeof(kData), |
256 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 257 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
257 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 258 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
258 EXPECT_EQ(0, memcmp(bucket->GetData(0, sizeof(kData)), kData, sizeof(kData))); | 259 EXPECT_EQ(0, memcmp(bucket->GetData(0, sizeof(kData)), kData, sizeof(kData))); |
259 | 260 |
260 // Check we can set it partially. | 261 // Check we can set it partially. |
261 static const char kData2[] = "ABCEDFG"; | 262 static const char kData2[] = "ABCEDFG"; |
262 const uint32 kSomeOffsetInBucket = 5; | 263 const uint32_t kSomeOffsetInBucket = 5; |
263 memcpy(memory, kData2, sizeof(kData2)); | 264 memcpy(memory, kData2, sizeof(kData2)); |
264 cmd.Init(kBucketId, kSomeOffsetInBucket, sizeof(kData2), | 265 cmd.Init(kBucketId, kSomeOffsetInBucket, sizeof(kData2), |
265 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 266 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
266 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 267 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
267 EXPECT_EQ(0, memcmp(bucket->GetData(kSomeOffsetInBucket, sizeof(kData2)), | 268 EXPECT_EQ(0, memcmp(bucket->GetData(kSomeOffsetInBucket, sizeof(kData2)), |
268 kData2, sizeof(kData2))); | 269 kData2, sizeof(kData2))); |
269 const char* bucket_data = bucket->GetDataAs<const char*>(0, sizeof(kData)); | 270 const char* bucket_data = bucket->GetDataAs<const char*>(0, sizeof(kData)); |
270 // Check that nothing was affected outside of updated area. | 271 // Check that nothing was affected outside of updated area. |
271 EXPECT_EQ(kData[kSomeOffsetInBucket - 1], | 272 EXPECT_EQ(kData[kSomeOffsetInBucket - 1], |
272 bucket_data[kSomeOffsetInBucket - 1]); | 273 bucket_data[kSomeOffsetInBucket - 1]); |
(...skipping 11 matching lines...) Expand all Loading... |
284 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 285 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
285 | 286 |
286 // Check that it fails if the size is out of range. | 287 // Check that it fails if the size is out of range. |
287 cmd.Init(kBucketId, 0, bucket->size() + 1, | 288 cmd.Init(kBucketId, 0, bucket->size() + 1, |
288 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 289 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
289 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 290 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
290 } | 291 } |
291 | 292 |
292 TEST_F(CommonDecoderTest, SetBucketDataImmediate) { | 293 TEST_F(CommonDecoderTest, SetBucketDataImmediate) { |
293 cmd::SetBucketSize size_cmd; | 294 cmd::SetBucketSize size_cmd; |
294 int8 buffer[1024]; | 295 int8_t buffer[1024]; |
295 cmd::SetBucketDataImmediate& cmd = | 296 cmd::SetBucketDataImmediate& cmd = |
296 *reinterpret_cast<cmd::SetBucketDataImmediate*>(&buffer); | 297 *reinterpret_cast<cmd::SetBucketDataImmediate*>(&buffer); |
297 | 298 |
298 static const char kData[] = "1234567890123456789"; | 299 static const char kData[] = "1234567890123456789"; |
299 | 300 |
300 const uint32 kBucketId = 123; | 301 const uint32_t kBucketId = 123; |
301 const uint32 kInvalidBucketId = 124; | 302 const uint32_t kInvalidBucketId = 124; |
302 | 303 |
303 size_cmd.Init(kBucketId, sizeof(kData)); | 304 size_cmd.Init(kBucketId, sizeof(kData)); |
304 EXPECT_EQ(error::kNoError, ExecuteCmd(size_cmd)); | 305 EXPECT_EQ(error::kNoError, ExecuteCmd(size_cmd)); |
305 CommonDecoder::Bucket* bucket = decoder_.GetBucket(kBucketId); | 306 CommonDecoder::Bucket* bucket = decoder_.GetBucket(kBucketId); |
306 // Check the data is not there. | 307 // Check the data is not there. |
307 EXPECT_NE(0, memcmp(bucket->GetData(0, sizeof(kData)), kData, sizeof(kData))); | 308 EXPECT_NE(0, memcmp(bucket->GetData(0, sizeof(kData)), kData, sizeof(kData))); |
308 | 309 |
309 // Check we can set it. | 310 // Check we can set it. |
310 void* memory = &buffer[0] + sizeof(cmd); | 311 void* memory = &buffer[0] + sizeof(cmd); |
311 memcpy(memory, kData, sizeof(kData)); | 312 memcpy(memory, kData, sizeof(kData)); |
312 cmd.Init(kBucketId, 0, sizeof(kData)); | 313 cmd.Init(kBucketId, 0, sizeof(kData)); |
313 EXPECT_EQ(error::kNoError, | 314 EXPECT_EQ(error::kNoError, |
314 ExecuteImmediateCmd(cmd, sizeof(kData))); | 315 ExecuteImmediateCmd(cmd, sizeof(kData))); |
315 EXPECT_EQ(0, memcmp(bucket->GetData(0, sizeof(kData)), kData, sizeof(kData))); | 316 EXPECT_EQ(0, memcmp(bucket->GetData(0, sizeof(kData)), kData, sizeof(kData))); |
316 | 317 |
317 // Check we can set it partially. | 318 // Check we can set it partially. |
318 static const char kData2[] = "ABCEDFG"; | 319 static const char kData2[] = "ABCEDFG"; |
319 const uint32 kSomeOffsetInBucket = 5; | 320 const uint32_t kSomeOffsetInBucket = 5; |
320 memcpy(memory, kData2, sizeof(kData2)); | 321 memcpy(memory, kData2, sizeof(kData2)); |
321 cmd.Init(kBucketId, kSomeOffsetInBucket, sizeof(kData2)); | 322 cmd.Init(kBucketId, kSomeOffsetInBucket, sizeof(kData2)); |
322 EXPECT_EQ(error::kNoError, | 323 EXPECT_EQ(error::kNoError, |
323 ExecuteImmediateCmd(cmd, sizeof(kData2))); | 324 ExecuteImmediateCmd(cmd, sizeof(kData2))); |
324 EXPECT_EQ(0, memcmp(bucket->GetData(kSomeOffsetInBucket, sizeof(kData2)), | 325 EXPECT_EQ(0, memcmp(bucket->GetData(kSomeOffsetInBucket, sizeof(kData2)), |
325 kData2, sizeof(kData2))); | 326 kData2, sizeof(kData2))); |
326 const char* bucket_data = bucket->GetDataAs<const char*>(0, sizeof(kData)); | 327 const char* bucket_data = bucket->GetDataAs<const char*>(0, sizeof(kData)); |
327 // Check that nothing was affected outside of updated area. | 328 // Check that nothing was affected outside of updated area. |
328 EXPECT_EQ(kData[kSomeOffsetInBucket - 1], | 329 EXPECT_EQ(kData[kSomeOffsetInBucket - 1], |
329 bucket_data[kSomeOffsetInBucket - 1]); | 330 bucket_data[kSomeOffsetInBucket - 1]); |
(...skipping 17 matching lines...) Expand all Loading... |
347 } | 348 } |
348 | 349 |
349 TEST_F(CommonDecoderTest, GetBucketStart) { | 350 TEST_F(CommonDecoderTest, GetBucketStart) { |
350 cmd::SetBucketSize size_cmd; | 351 cmd::SetBucketSize size_cmd; |
351 cmd::SetBucketData set_cmd; | 352 cmd::SetBucketData set_cmd; |
352 cmd::GetBucketStart cmd; | 353 cmd::GetBucketStart cmd; |
353 | 354 |
354 static const char kData[] = "1234567890123456789"; | 355 static const char kData[] = "1234567890123456789"; |
355 static const char zero[sizeof(kData)] = { 0, }; | 356 static const char zero[sizeof(kData)] = { 0, }; |
356 | 357 |
357 const uint32 kBucketSize = sizeof(kData); | 358 const uint32_t kBucketSize = sizeof(kData); |
358 const uint32 kBucketId = 123; | 359 const uint32_t kBucketId = 123; |
359 const uint32 kInvalidBucketId = 124; | 360 const uint32_t kInvalidBucketId = 124; |
360 | 361 |
361 // Put data in the bucket. | 362 // Put data in the bucket. |
362 size_cmd.Init(kBucketId, sizeof(kData)); | 363 size_cmd.Init(kBucketId, sizeof(kData)); |
363 EXPECT_EQ(error::kNoError, ExecuteCmd(size_cmd)); | 364 EXPECT_EQ(error::kNoError, ExecuteCmd(size_cmd)); |
364 const uint32 kSomeOffsetInSharedMemory = 50; | 365 const uint32_t kSomeOffsetInSharedMemory = 50; |
365 uint8* start = engine_.GetSharedMemoryAs<uint8*>(kSomeOffsetInSharedMemory); | 366 uint8_t* start = |
| 367 engine_.GetSharedMemoryAs<uint8_t*>(kSomeOffsetInSharedMemory); |
366 memcpy(start, kData, sizeof(kData)); | 368 memcpy(start, kData, sizeof(kData)); |
367 set_cmd.Init(kBucketId, 0, sizeof(kData), | 369 set_cmd.Init(kBucketId, 0, sizeof(kData), |
368 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 370 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
369 EXPECT_EQ(error::kNoError, ExecuteCmd(set_cmd)); | 371 EXPECT_EQ(error::kNoError, ExecuteCmd(set_cmd)); |
370 | 372 |
371 // Check that the size is correct with no data buffer. | 373 // Check that the size is correct with no data buffer. |
372 uint32* memory = | 374 uint32_t* memory = |
373 engine_.GetSharedMemoryAs<uint32*>(kSomeOffsetInSharedMemory); | 375 engine_.GetSharedMemoryAs<uint32_t*>(kSomeOffsetInSharedMemory); |
374 *memory = 0x0; | 376 *memory = 0x0; |
375 cmd.Init(kBucketId, | 377 cmd.Init(kBucketId, |
376 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory, | 378 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory, |
377 0, 0, 0); | 379 0, 0, 0); |
378 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 380 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
379 EXPECT_EQ(kBucketSize, *memory); | 381 EXPECT_EQ(kBucketSize, *memory); |
380 | 382 |
381 // Check that the data is copied with data buffer. | 383 // Check that the data is copied with data buffer. |
382 const uint32 kDataOffsetInSharedMemory = 54; | 384 const uint32_t kDataOffsetInSharedMemory = 54; |
383 uint8* data = engine_.GetSharedMemoryAs<uint8*>(kDataOffsetInSharedMemory); | 385 uint8_t* data = |
| 386 engine_.GetSharedMemoryAs<uint8_t*>(kDataOffsetInSharedMemory); |
384 *memory = 0x0; | 387 *memory = 0x0; |
385 memset(data, 0, sizeof(kData)); | 388 memset(data, 0, sizeof(kData)); |
386 cmd.Init(kBucketId, | 389 cmd.Init(kBucketId, |
387 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory, | 390 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory, |
388 kBucketSize, MockCommandBufferEngine::kValidShmId, | 391 kBucketSize, MockCommandBufferEngine::kValidShmId, |
389 kDataOffsetInSharedMemory); | 392 kDataOffsetInSharedMemory); |
390 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 393 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
391 EXPECT_EQ(kBucketSize, *memory); | 394 EXPECT_EQ(kBucketSize, *memory); |
392 EXPECT_EQ(0, memcmp(data, kData, kBucketSize)); | 395 EXPECT_EQ(0, memcmp(data, kData, kBucketSize)); |
393 | 396 |
394 // Check that we can get a piece. | 397 // Check that we can get a piece. |
395 *memory = 0x0; | 398 *memory = 0x0; |
396 memset(data, 0, sizeof(kData)); | 399 memset(data, 0, sizeof(kData)); |
397 const uint32 kPieceSize = kBucketSize / 2; | 400 const uint32_t kPieceSize = kBucketSize / 2; |
398 cmd.Init(kBucketId, | 401 cmd.Init(kBucketId, |
399 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory, | 402 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory, |
400 kPieceSize, MockCommandBufferEngine::kValidShmId, | 403 kPieceSize, MockCommandBufferEngine::kValidShmId, |
401 kDataOffsetInSharedMemory); | 404 kDataOffsetInSharedMemory); |
402 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 405 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
403 EXPECT_EQ(kBucketSize, *memory); | 406 EXPECT_EQ(kBucketSize, *memory); |
404 EXPECT_EQ(0, memcmp(data, kData, kPieceSize)); | 407 EXPECT_EQ(0, memcmp(data, kData, kPieceSize)); |
405 EXPECT_EQ(0, memcmp(data + kPieceSize, zero, sizeof(kData) - kPieceSize)); | 408 EXPECT_EQ(0, memcmp(data + kPieceSize, zero, sizeof(kData) - kPieceSize)); |
406 | 409 |
407 // Check that it fails if the result_id is invalid | 410 // Check that it fails if the result_id is invalid |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 } | 450 } |
448 | 451 |
449 TEST_F(CommonDecoderTest, GetBucketData) { | 452 TEST_F(CommonDecoderTest, GetBucketData) { |
450 cmd::SetBucketSize size_cmd; | 453 cmd::SetBucketSize size_cmd; |
451 cmd::SetBucketData set_cmd; | 454 cmd::SetBucketData set_cmd; |
452 cmd::GetBucketData cmd; | 455 cmd::GetBucketData cmd; |
453 | 456 |
454 static const char kData[] = "1234567890123456789"; | 457 static const char kData[] = "1234567890123456789"; |
455 static const char zero[sizeof(kData)] = { 0, }; | 458 static const char zero[sizeof(kData)] = { 0, }; |
456 | 459 |
457 const uint32 kBucketId = 123; | 460 const uint32_t kBucketId = 123; |
458 const uint32 kInvalidBucketId = 124; | 461 const uint32_t kInvalidBucketId = 124; |
459 | 462 |
460 size_cmd.Init(kBucketId, sizeof(kData)); | 463 size_cmd.Init(kBucketId, sizeof(kData)); |
461 EXPECT_EQ(error::kNoError, ExecuteCmd(size_cmd)); | 464 EXPECT_EQ(error::kNoError, ExecuteCmd(size_cmd)); |
462 const uint32 kSomeOffsetInSharedMemory = 50; | 465 const uint32_t kSomeOffsetInSharedMemory = 50; |
463 uint8* memory = engine_.GetSharedMemoryAs<uint8*>(kSomeOffsetInSharedMemory); | 466 uint8_t* memory = |
| 467 engine_.GetSharedMemoryAs<uint8_t*>(kSomeOffsetInSharedMemory); |
464 memcpy(memory, kData, sizeof(kData)); | 468 memcpy(memory, kData, sizeof(kData)); |
465 set_cmd.Init(kBucketId, 0, sizeof(kData), | 469 set_cmd.Init(kBucketId, 0, sizeof(kData), |
466 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 470 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
467 EXPECT_EQ(error::kNoError, ExecuteCmd(set_cmd)); | 471 EXPECT_EQ(error::kNoError, ExecuteCmd(set_cmd)); |
468 | 472 |
469 // Check we can get the whole thing. | 473 // Check we can get the whole thing. |
470 memset(memory, 0, sizeof(kData)); | 474 memset(memory, 0, sizeof(kData)); |
471 cmd.Init(kBucketId, 0, sizeof(kData), | 475 cmd.Init(kBucketId, 0, sizeof(kData), |
472 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 476 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
473 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 477 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
474 EXPECT_EQ(0, memcmp(memory, kData, sizeof(kData))); | 478 EXPECT_EQ(0, memcmp(memory, kData, sizeof(kData))); |
475 | 479 |
476 // Check we can get a piece. | 480 // Check we can get a piece. |
477 const uint32 kSomeOffsetInBucket = 5; | 481 const uint32_t kSomeOffsetInBucket = 5; |
478 const uint32 kLengthOfPiece = 6; | 482 const uint32_t kLengthOfPiece = 6; |
479 const uint8 kSentinel = 0xff; | 483 const uint8_t kSentinel = 0xff; |
480 memset(memory, 0, sizeof(kData)); | 484 memset(memory, 0, sizeof(kData)); |
481 memory[-1] = kSentinel; | 485 memory[-1] = kSentinel; |
482 cmd.Init(kBucketId, kSomeOffsetInBucket, kLengthOfPiece, | 486 cmd.Init(kBucketId, kSomeOffsetInBucket, kLengthOfPiece, |
483 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 487 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
484 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); | 488 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); |
485 EXPECT_EQ(0, memcmp(memory, kData + kSomeOffsetInBucket, kLengthOfPiece)); | 489 EXPECT_EQ(0, memcmp(memory, kData + kSomeOffsetInBucket, kLengthOfPiece)); |
486 EXPECT_EQ(0, memcmp(memory + kLengthOfPiece, zero, | 490 EXPECT_EQ(0, memcmp(memory + kLengthOfPiece, zero, |
487 sizeof(kData) - kLengthOfPiece)); | 491 sizeof(kData) - kLengthOfPiece)); |
488 EXPECT_EQ(kSentinel, memory[-1]); | 492 EXPECT_EQ(kSentinel, memory[-1]); |
489 | 493 |
490 // Check that it fails if the bucket_id is invalid | 494 // Check that it fails if the bucket_id is invalid |
491 cmd.Init(kInvalidBucketId, kSomeOffsetInBucket, sizeof(kData), | 495 cmd.Init(kInvalidBucketId, kSomeOffsetInBucket, sizeof(kData), |
492 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 496 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
493 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 497 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
494 | 498 |
495 // Check that it fails if the offset is invalid | 499 // Check that it fails if the offset is invalid |
496 cmd.Init(kBucketId, sizeof(kData) + 1, 1, | 500 cmd.Init(kBucketId, sizeof(kData) + 1, 1, |
497 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 501 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
498 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 502 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
499 | 503 |
500 // Check that it fails if the size is invalid | 504 // Check that it fails if the size is invalid |
501 cmd.Init(kBucketId, 0, sizeof(kData) + 1, | 505 cmd.Init(kBucketId, 0, sizeof(kData) + 1, |
502 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); | 506 MockCommandBufferEngine::kValidShmId, kSomeOffsetInSharedMemory); |
503 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); | 507 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); |
504 } | 508 } |
505 | 509 |
506 } // namespace gpu | 510 } // namespace gpu |
OLD | NEW |