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

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

Issue 1129253006: std::bitset solution for GL Query cache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Different DCHECKs Created 5 years, 7 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
« no previous file with comments | « gpu/command_buffer/client/query_tracker.cc ('k') | no next file » | 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
11 #include <vector>
12
10 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
11 #include "gpu/command_buffer/client/client_test_helper.h" 14 #include "gpu/command_buffer/client/client_test_helper.h"
12 #include "gpu/command_buffer/client/gles2_cmd_helper.h" 15 #include "gpu/command_buffer/client/gles2_cmd_helper.h"
13 #include "gpu/command_buffer/client/mapped_memory.h" 16 #include "gpu/command_buffer/client/mapped_memory.h"
14 #include "gpu/command_buffer/common/command_buffer.h" 17 #include "gpu/command_buffer/common/command_buffer.h"
15 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
16 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
17 20
18 namespace gpu { 21 namespace gpu {
19 namespace gles2 { 22 namespace gles2 {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 104
102 QuerySync* GetSync(QueryTracker::Query* query) { 105 QuerySync* GetSync(QueryTracker::Query* query) {
103 return query->info_.sync; 106 return query->info_.sync;
104 } 107 }
105 108
106 QuerySyncManager::Bucket* GetBucket(QueryTracker::Query* query) { 109 QuerySyncManager::Bucket* GetBucket(QueryTracker::Query* query) {
107 return query->info_.bucket; 110 return query->info_.bucket;
108 } 111 }
109 112
110 uint32 GetBucketUsedCount(QuerySyncManager::Bucket* bucket) { 113 uint32 GetBucketUsedCount(QuerySyncManager::Bucket* bucket) {
111 return QuerySyncManager::kSyncsPerBucket - bucket->free_queries.size(); 114 return bucket->in_use_queries.count();
112 } 115 }
113 116
114 uint32 GetFlushGeneration() { return helper_->flush_generation(); } 117 uint32 GetFlushGeneration() { return helper_->flush_generation(); }
115 118
116 scoped_ptr<CommandBuffer> command_buffer_; 119 scoped_ptr<CommandBuffer> command_buffer_;
117 scoped_ptr<GLES2CmdHelper> helper_; 120 scoped_ptr<GLES2CmdHelper> helper_;
118 scoped_ptr<MappedMemoryManager> mapped_memory_; 121 scoped_ptr<MappedMemoryManager> mapped_memory_;
119 scoped_ptr<QueryTracker> query_tracker_; 122 scoped_ptr<QueryTracker> query_tracker_;
120 }; 123 };
121 124
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 // Simulate GPU process marking it as available. 231 // Simulate GPU process marking it as available.
229 QuerySync* sync = GetSync(query); 232 QuerySync* sync = GetSync(query);
230 sync->process_count = query->submit_count(); 233 sync->process_count = query->submit_count();
231 sync->result = kResult; 234 sync->result = kResult;
232 235
233 // Check FreeCompletedQueries. 236 // Check FreeCompletedQueries.
234 query_tracker_->FreeCompletedQueries(); 237 query_tracker_->FreeCompletedQueries();
235 EXPECT_EQ(0u, GetBucketUsedCount(bucket)); 238 EXPECT_EQ(0u, GetBucketUsedCount(bucket));
236 } 239 }
237 240
241 TEST_F(QueryTrackerTest, ManyQueries) {
242 const GLuint kId1 = 123;
243 const int32 kToken = 46;
244 const uint32 kResult = 456;
245
246 const size_t kTestSize = 4000;
247 static_assert(kTestSize > QuerySyncManager::kSyncsPerBucket,
248 "We want to use more than one bucket");
249 // Create lots of queries.
250 std::vector<QueryTracker::Query*> queries;
251 for (size_t i = 0; i < kTestSize; i++) {
252 QueryTracker::Query* query =
253 query_tracker_->CreateQuery(kId1 + i, GL_ANY_SAMPLES_PASSED_EXT);
254 ASSERT_TRUE(query != NULL);
255 queries.push_back(query);
256 QuerySyncManager::Bucket* bucket = GetBucket(query);
257 EXPECT_LE(1u, GetBucketUsedCount(bucket));
258 }
259
260 QuerySyncManager::Bucket* query_0_bucket = GetBucket(queries[0]);
261 uint32 expected_use_count = QuerySyncManager::kSyncsPerBucket;
262 EXPECT_EQ(expected_use_count, GetBucketUsedCount(query_0_bucket));
263
264 while (!queries.empty()) {
265 QueryTracker::Query* query = queries.back();
266 queries.pop_back();
267 GLuint query_id = kId1 + queries.size();
268 EXPECT_EQ(query_id, query->id());
269 query->MarkAsActive();
270 query->MarkAsPending(kToken);
271
272 QuerySyncManager::Bucket* bucket = GetBucket(query);
273 uint32 use_count_before_remove = GetBucketUsedCount(bucket);
274 query_tracker_->FreeCompletedQueries();
275 EXPECT_EQ(use_count_before_remove, GetBucketUsedCount(bucket));
276 query_tracker_->RemoveQuery(query_id);
277 // Check we get nothing for a non-existent query.
278 EXPECT_TRUE(query_tracker_->GetQuery(query_id) == NULL);
279
280 // Check that memory was not freed since it was not completed.
281 EXPECT_EQ(use_count_before_remove, GetBucketUsedCount(bucket));
282
283 // Simulate GPU process marking it as available.
284 QuerySync* sync = GetSync(query);
285 sync->process_count = query->submit_count();
286 sync->result = kResult;
287
288 // Check FreeCompletedQueries.
289 query_tracker_->FreeCompletedQueries();
290 EXPECT_EQ(use_count_before_remove - 1, GetBucketUsedCount(bucket));
291 }
292 }
238 } // namespace gles2 293 } // namespace gles2
239 } // namespace gpu 294 } // namespace gpu
240 295
241 296
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/query_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698