| 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 |