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

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

Issue 1542513002: Switch to standard integer types in gpu/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 5 years 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
« no previous file with comments | « gpu/command_buffer/client/query_tracker.cc ('k') | gpu/command_buffer/client/ring_buffer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 the QueryTracker. 5 // Tests for the QueryTracker.
6 6
7 #include "gpu/command_buffer/client/query_tracker.h" 7 #include "gpu/command_buffer/client/query_tracker.h"
8 8
9 #include <GLES2/gl2ext.h> 9 #include <GLES2/gl2ext.h>
10 #include <stddef.h>
11 #include <stdint.h>
10 12
11 #include <vector> 13 #include <vector>
12 14
13 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
14 #include "gpu/command_buffer/client/client_test_helper.h" 16 #include "gpu/command_buffer/client/client_test_helper.h"
15 #include "gpu/command_buffer/client/gles2_cmd_helper.h" 17 #include "gpu/command_buffer/client/gles2_cmd_helper.h"
16 #include "gpu/command_buffer/client/mapped_memory.h" 18 #include "gpu/command_buffer/client/mapped_memory.h"
17 #include "gpu/command_buffer/common/command_buffer.h" 19 #include "gpu/command_buffer/common/command_buffer.h"
20 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
19 #include "testing/gmock/include/gmock/gmock.h"
20 22
21 namespace gpu { 23 namespace gpu {
22 namespace gles2 { 24 namespace gles2 {
23 25
24 class QuerySyncManagerTest : public testing::Test { 26 class QuerySyncManagerTest : public testing::Test {
25 protected: 27 protected:
26 static const int32 kNumCommandEntries = 400; 28 static const int32_t kNumCommandEntries = 400;
27 static const int32 kCommandBufferSizeBytes = 29 static const int32_t kCommandBufferSizeBytes =
28 kNumCommandEntries * sizeof(CommandBufferEntry); 30 kNumCommandEntries * sizeof(CommandBufferEntry);
29 31
30 void SetUp() override { 32 void SetUp() override {
31 command_buffer_.reset(new MockClientCommandBuffer()); 33 command_buffer_.reset(new MockClientCommandBuffer());
32 helper_.reset(new GLES2CmdHelper(command_buffer_.get())); 34 helper_.reset(new GLES2CmdHelper(command_buffer_.get()));
33 helper_->Initialize(kCommandBufferSizeBytes); 35 helper_->Initialize(kCommandBufferSizeBytes);
34 mapped_memory_.reset( 36 mapped_memory_.reset(
35 new MappedMemoryManager(helper_.get(), MappedMemoryManager::kNoLimit)); 37 new MappedMemoryManager(helper_.get(), MappedMemoryManager::kNoLimit));
36 sync_manager_.reset(new QuerySyncManager(mapped_memory_.get())); 38 sync_manager_.reset(new QuerySyncManager(mapped_memory_.get()));
37 } 39 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 QuerySyncManager::QueryInfo infos[4]; 72 QuerySyncManager::QueryInfo infos[4];
71 memset(&infos, 0xBD, sizeof(infos)); 73 memset(&infos, 0xBD, sizeof(infos));
72 74
73 for (size_t ii = 0; ii < arraysize(infos); ++ii) { 75 for (size_t ii = 0; ii < arraysize(infos); ++ii) {
74 EXPECT_TRUE(sync_manager_->Alloc(&infos[ii])); 76 EXPECT_TRUE(sync_manager_->Alloc(&infos[ii]));
75 } 77 }
76 } 78 }
77 79
78 class QueryTrackerTest : public testing::Test { 80 class QueryTrackerTest : public testing::Test {
79 protected: 81 protected:
80 static const int32 kNumCommandEntries = 400; 82 static const int32_t kNumCommandEntries = 400;
81 static const int32 kCommandBufferSizeBytes = 83 static const int32_t kCommandBufferSizeBytes =
82 kNumCommandEntries * sizeof(CommandBufferEntry); 84 kNumCommandEntries * sizeof(CommandBufferEntry);
83 85
84 void SetUp() override { 86 void SetUp() override {
85 command_buffer_.reset(new MockClientCommandBuffer()); 87 command_buffer_.reset(new MockClientCommandBuffer());
86 helper_.reset(new GLES2CmdHelper(command_buffer_.get())); 88 helper_.reset(new GLES2CmdHelper(command_buffer_.get()));
87 helper_->Initialize(kCommandBufferSizeBytes); 89 helper_->Initialize(kCommandBufferSizeBytes);
88 mapped_memory_.reset( 90 mapped_memory_.reset(
89 new MappedMemoryManager(helper_.get(), MappedMemoryManager::kNoLimit)); 91 new MappedMemoryManager(helper_.get(), MappedMemoryManager::kNoLimit));
90 query_tracker_.reset(new QueryTracker(mapped_memory_.get())); 92 query_tracker_.reset(new QueryTracker(mapped_memory_.get()));
91 } 93 }
92 94
93 void TearDown() override { 95 void TearDown() override {
94 query_tracker_.reset(); 96 query_tracker_.reset();
95 mapped_memory_.reset(); 97 mapped_memory_.reset();
96 helper_.reset(); 98 helper_.reset();
97 command_buffer_.reset(); 99 command_buffer_.reset();
98 } 100 }
99 101
100 QuerySync* GetSync(QueryTracker::Query* query) { 102 QuerySync* GetSync(QueryTracker::Query* query) {
101 return query->info_.sync; 103 return query->info_.sync;
102 } 104 }
103 105
104 QuerySyncManager::Bucket* GetBucket(QueryTracker::Query* query) { 106 QuerySyncManager::Bucket* GetBucket(QueryTracker::Query* query) {
105 return query->info_.bucket; 107 return query->info_.bucket;
106 } 108 }
107 109
108 uint32 GetBucketUsedCount(QuerySyncManager::Bucket* bucket) { 110 uint32_t GetBucketUsedCount(QuerySyncManager::Bucket* bucket) {
109 return bucket->in_use_queries.count(); 111 return bucket->in_use_queries.count();
110 } 112 }
111 113
112 uint32 GetFlushGeneration() { return helper_->flush_generation(); } 114 uint32_t GetFlushGeneration() { return helper_->flush_generation(); }
113 115
114 scoped_ptr<CommandBuffer> command_buffer_; 116 scoped_ptr<CommandBuffer> command_buffer_;
115 scoped_ptr<GLES2CmdHelper> helper_; 117 scoped_ptr<GLES2CmdHelper> helper_;
116 scoped_ptr<MappedMemoryManager> mapped_memory_; 118 scoped_ptr<MappedMemoryManager> mapped_memory_;
117 scoped_ptr<QueryTracker> query_tracker_; 119 scoped_ptr<QueryTracker> query_tracker_;
118 }; 120 };
119 121
120 TEST_F(QueryTrackerTest, Basic) { 122 TEST_F(QueryTrackerTest, Basic) {
121 const GLuint kId1 = 123; 123 const GLuint kId1 = 123;
122 const GLuint kId2 = 124; 124 const GLuint kId2 = 124;
123 125
124 // Check we can create a Query. 126 // Check we can create a Query.
125 QueryTracker::Query* query = query_tracker_->CreateQuery( 127 QueryTracker::Query* query = query_tracker_->CreateQuery(
126 kId1, GL_ANY_SAMPLES_PASSED_EXT); 128 kId1, GL_ANY_SAMPLES_PASSED_EXT);
127 ASSERT_TRUE(query != NULL); 129 ASSERT_TRUE(query != NULL);
128 // Check we can get the same Query. 130 // Check we can get the same Query.
129 EXPECT_EQ(query, query_tracker_->GetQuery(kId1)); 131 EXPECT_EQ(query, query_tracker_->GetQuery(kId1));
130 // Check we get nothing for a non-existent query. 132 // Check we get nothing for a non-existent query.
131 EXPECT_TRUE(query_tracker_->GetQuery(kId2) == NULL); 133 EXPECT_TRUE(query_tracker_->GetQuery(kId2) == NULL);
132 // Check we can delete the query. 134 // Check we can delete the query.
133 query_tracker_->RemoveQuery(kId1); 135 query_tracker_->RemoveQuery(kId1);
134 // Check we get nothing for a non-existent query. 136 // Check we get nothing for a non-existent query.
135 EXPECT_TRUE(query_tracker_->GetQuery(kId1) == NULL); 137 EXPECT_TRUE(query_tracker_->GetQuery(kId1) == NULL);
136 } 138 }
137 139
138 TEST_F(QueryTrackerTest, Query) { 140 TEST_F(QueryTrackerTest, Query) {
139 const GLuint kId1 = 123; 141 const GLuint kId1 = 123;
140 const int32 kToken = 46; 142 const int32_t kToken = 46;
141 const uint32 kResult = 456; 143 const uint32_t kResult = 456;
142 144
143 // Create a Query. 145 // Create a Query.
144 QueryTracker::Query* query = query_tracker_->CreateQuery( 146 QueryTracker::Query* query = query_tracker_->CreateQuery(
145 kId1, GL_ANY_SAMPLES_PASSED_EXT); 147 kId1, GL_ANY_SAMPLES_PASSED_EXT);
146 ASSERT_TRUE(query != NULL); 148 ASSERT_TRUE(query != NULL);
147 EXPECT_TRUE(query->NeverUsed()); 149 EXPECT_TRUE(query->NeverUsed());
148 EXPECT_FALSE(query->Pending()); 150 EXPECT_FALSE(query->Pending());
149 EXPECT_EQ(0, query->token()); 151 EXPECT_EQ(0, query->token());
150 EXPECT_EQ(0, query->submit_count()); 152 EXPECT_EQ(0, query->submit_count());
151 153
(...skipping 11 matching lines...) Expand all
163 EXPECT_EQ(kToken, query->token()); 165 EXPECT_EQ(kToken, query->token());
164 EXPECT_EQ(1, query->submit_count()); 166 EXPECT_EQ(1, query->submit_count());
165 167
166 // Flush only once if no more flushes happened between a call to 168 // Flush only once if no more flushes happened between a call to
167 // EndQuery command and CheckResultsAvailable 169 // EndQuery command and CheckResultsAvailable
168 // Advance put_ so flush calls in CheckResultsAvailable go through 170 // Advance put_ so flush calls in CheckResultsAvailable go through
169 // and updates flush_generation count 171 // and updates flush_generation count
170 helper_->Noop(1); 172 helper_->Noop(1);
171 173
172 // Store FlushGeneration count after EndQuery is called 174 // Store FlushGeneration count after EndQuery is called
173 uint32 gen1 = GetFlushGeneration(); 175 uint32_t gen1 = GetFlushGeneration();
174 176
175 // Check CheckResultsAvailable. 177 // Check CheckResultsAvailable.
176 EXPECT_FALSE(query->CheckResultsAvailable(helper_.get())); 178 EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
177 EXPECT_FALSE(query->NeverUsed()); 179 EXPECT_FALSE(query->NeverUsed());
178 EXPECT_TRUE(query->Pending()); 180 EXPECT_TRUE(query->Pending());
179 181
180 uint32 gen2 = GetFlushGeneration(); 182 uint32_t gen2 = GetFlushGeneration();
181 EXPECT_NE(gen1, gen2); 183 EXPECT_NE(gen1, gen2);
182 184
183 // Repeated calls to CheckResultsAvailable should not flush unnecessarily 185 // Repeated calls to CheckResultsAvailable should not flush unnecessarily
184 EXPECT_FALSE(query->CheckResultsAvailable(helper_.get())); 186 EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
185 gen1 = GetFlushGeneration(); 187 gen1 = GetFlushGeneration();
186 EXPECT_EQ(gen1, gen2); 188 EXPECT_EQ(gen1, gen2);
187 EXPECT_FALSE(query->CheckResultsAvailable(helper_.get())); 189 EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
188 gen1 = GetFlushGeneration(); 190 gen1 = GetFlushGeneration();
189 EXPECT_EQ(gen1, gen2); 191 EXPECT_EQ(gen1, gen2);
190 192
191 // Simulate GPU process marking it as available. 193 // Simulate GPU process marking it as available.
192 QuerySync* sync = GetSync(query); 194 QuerySync* sync = GetSync(query);
193 sync->process_count = query->submit_count(); 195 sync->process_count = query->submit_count();
194 sync->result = kResult; 196 sync->result = kResult;
195 197
196 // Check CheckResultsAvailable. 198 // Check CheckResultsAvailable.
197 EXPECT_TRUE(query->CheckResultsAvailable(helper_.get())); 199 EXPECT_TRUE(query->CheckResultsAvailable(helper_.get()));
198 EXPECT_EQ(kResult, query->GetResult()); 200 EXPECT_EQ(kResult, query->GetResult());
199 EXPECT_FALSE(query->NeverUsed()); 201 EXPECT_FALSE(query->NeverUsed());
200 EXPECT_FALSE(query->Pending()); 202 EXPECT_FALSE(query->Pending());
201 } 203 }
202 204
203 TEST_F(QueryTrackerTest, Remove) { 205 TEST_F(QueryTrackerTest, Remove) {
204 const GLuint kId1 = 123; 206 const GLuint kId1 = 123;
205 const int32 kToken = 46; 207 const int32_t kToken = 46;
206 const uint32 kResult = 456; 208 const uint32_t kResult = 456;
207 209
208 // Create a Query. 210 // Create a Query.
209 QueryTracker::Query* query = query_tracker_->CreateQuery( 211 QueryTracker::Query* query = query_tracker_->CreateQuery(
210 kId1, GL_ANY_SAMPLES_PASSED_EXT); 212 kId1, GL_ANY_SAMPLES_PASSED_EXT);
211 ASSERT_TRUE(query != NULL); 213 ASSERT_TRUE(query != NULL);
212 214
213 QuerySyncManager::Bucket* bucket = GetBucket(query); 215 QuerySyncManager::Bucket* bucket = GetBucket(query);
214 EXPECT_EQ(1u, GetBucketUsedCount(bucket)); 216 EXPECT_EQ(1u, GetBucketUsedCount(bucket));
215 217
216 query->MarkAsActive(); 218 query->MarkAsActive();
(...skipping 11 matching lines...) Expand all
228 sync->process_count = query->submit_count(); 230 sync->process_count = query->submit_count();
229 sync->result = kResult; 231 sync->result = kResult;
230 232
231 // Check FreeCompletedQueries. 233 // Check FreeCompletedQueries.
232 query_tracker_->FreeCompletedQueries(); 234 query_tracker_->FreeCompletedQueries();
233 EXPECT_EQ(0u, GetBucketUsedCount(bucket)); 235 EXPECT_EQ(0u, GetBucketUsedCount(bucket));
234 } 236 }
235 237
236 TEST_F(QueryTrackerTest, ManyQueries) { 238 TEST_F(QueryTrackerTest, ManyQueries) {
237 const GLuint kId1 = 123; 239 const GLuint kId1 = 123;
238 const int32 kToken = 46; 240 const int32_t kToken = 46;
239 const uint32 kResult = 456; 241 const uint32_t kResult = 456;
240 242
241 const size_t kTestSize = 4000; 243 const size_t kTestSize = 4000;
242 static_assert(kTestSize > QuerySyncManager::kSyncsPerBucket, 244 static_assert(kTestSize > QuerySyncManager::kSyncsPerBucket,
243 "We want to use more than one bucket"); 245 "We want to use more than one bucket");
244 // Create lots of queries. 246 // Create lots of queries.
245 std::vector<QueryTracker::Query*> queries; 247 std::vector<QueryTracker::Query*> queries;
246 for (size_t i = 0; i < kTestSize; i++) { 248 for (size_t i = 0; i < kTestSize; i++) {
247 QueryTracker::Query* query = 249 QueryTracker::Query* query =
248 query_tracker_->CreateQuery(kId1 + i, GL_ANY_SAMPLES_PASSED_EXT); 250 query_tracker_->CreateQuery(kId1 + i, GL_ANY_SAMPLES_PASSED_EXT);
249 ASSERT_TRUE(query != NULL); 251 ASSERT_TRUE(query != NULL);
250 queries.push_back(query); 252 queries.push_back(query);
251 QuerySyncManager::Bucket* bucket = GetBucket(query); 253 QuerySyncManager::Bucket* bucket = GetBucket(query);
252 EXPECT_LE(1u, GetBucketUsedCount(bucket)); 254 EXPECT_LE(1u, GetBucketUsedCount(bucket));
253 } 255 }
254 256
255 QuerySyncManager::Bucket* query_0_bucket = GetBucket(queries[0]); 257 QuerySyncManager::Bucket* query_0_bucket = GetBucket(queries[0]);
256 uint32 expected_use_count = QuerySyncManager::kSyncsPerBucket; 258 uint32_t expected_use_count = QuerySyncManager::kSyncsPerBucket;
257 EXPECT_EQ(expected_use_count, GetBucketUsedCount(query_0_bucket)); 259 EXPECT_EQ(expected_use_count, GetBucketUsedCount(query_0_bucket));
258 260
259 while (!queries.empty()) { 261 while (!queries.empty()) {
260 QueryTracker::Query* query = queries.back(); 262 QueryTracker::Query* query = queries.back();
261 queries.pop_back(); 263 queries.pop_back();
262 GLuint query_id = kId1 + queries.size(); 264 GLuint query_id = kId1 + queries.size();
263 EXPECT_EQ(query_id, query->id()); 265 EXPECT_EQ(query_id, query->id());
264 query->MarkAsActive(); 266 query->MarkAsActive();
265 query->MarkAsPending(kToken); 267 query->MarkAsPending(kToken);
266 268
267 QuerySyncManager::Bucket* bucket = GetBucket(query); 269 QuerySyncManager::Bucket* bucket = GetBucket(query);
268 uint32 use_count_before_remove = GetBucketUsedCount(bucket); 270 uint32_t use_count_before_remove = GetBucketUsedCount(bucket);
269 query_tracker_->FreeCompletedQueries(); 271 query_tracker_->FreeCompletedQueries();
270 EXPECT_EQ(use_count_before_remove, GetBucketUsedCount(bucket)); 272 EXPECT_EQ(use_count_before_remove, GetBucketUsedCount(bucket));
271 query_tracker_->RemoveQuery(query_id); 273 query_tracker_->RemoveQuery(query_id);
272 // Check we get nothing for a non-existent query. 274 // Check we get nothing for a non-existent query.
273 EXPECT_TRUE(query_tracker_->GetQuery(query_id) == NULL); 275 EXPECT_TRUE(query_tracker_->GetQuery(query_id) == NULL);
274 276
275 // Check that memory was not freed since it was not completed. 277 // Check that memory was not freed since it was not completed.
276 EXPECT_EQ(use_count_before_remove, GetBucketUsedCount(bucket)); 278 EXPECT_EQ(use_count_before_remove, GetBucketUsedCount(bucket));
277 279
278 // Simulate GPU process marking it as available. 280 // Simulate GPU process marking it as available.
279 QuerySync* sync = GetSync(query); 281 QuerySync* sync = GetSync(query);
280 sync->process_count = query->submit_count(); 282 sync->process_count = query->submit_count();
281 sync->result = kResult; 283 sync->result = kResult;
282 284
283 // Check FreeCompletedQueries. 285 // Check FreeCompletedQueries.
284 query_tracker_->FreeCompletedQueries(); 286 query_tracker_->FreeCompletedQueries();
285 EXPECT_EQ(use_count_before_remove - 1, GetBucketUsedCount(bucket)); 287 EXPECT_EQ(use_count_before_remove - 1, GetBucketUsedCount(bucket));
286 } 288 }
287 } 289 }
288 290
289 } // namespace gles2 291 } // namespace gles2
290 } // namespace gpu 292 } // namespace gpu
291 293
292 294
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/query_tracker.cc ('k') | gpu/command_buffer/client/ring_buffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698