Index: gpu/command_buffer/client/query_tracker.h |
diff --git a/gpu/command_buffer/client/query_tracker.h b/gpu/command_buffer/client/query_tracker.h |
index 9df8d18ccb7cccb525ff8084fe0b7c9b5a8ec9e3..5341ae9ddc84be11413da95242026497564f8aff 100644 |
--- a/gpu/command_buffer/client/query_tracker.h |
+++ b/gpu/command_buffer/client/query_tracker.h |
@@ -7,7 +7,7 @@ |
#include <GLES2/gl2.h> |
-#include <queue> |
+#include <deque> |
#include "../client/hash_tables.h" |
#include "../common/gles2_cmd_format.h" |
#include "gles2_impl_export.h" |
@@ -26,19 +26,30 @@ class GLES2_IMPL_EXPORT QuerySyncManager { |
public: |
static const size_t kSyncsPerBucket = 4096; |
+ struct Bucket { |
+ explicit Bucket(QuerySync* sync_mem) |
+ : syncs(sync_mem), |
+ used_query_count(0) { |
+ } |
+ QuerySync* syncs; |
+ unsigned used_query_count; |
+ }; |
struct QueryInfo { |
- QueryInfo(int32 id, uint32 offset, QuerySync* sync_mem) |
- : shm_id(id), |
+ QueryInfo(Bucket* bucket, int32 id, uint32 offset, QuerySync* sync_mem) |
+ : bucket(bucket), |
+ shm_id(id), |
shm_offset(offset), |
sync(sync_mem) { |
} |
QueryInfo() |
- : shm_id(0), |
+ : bucket(NULL), |
+ shm_id(0), |
shm_offset(0), |
sync(NULL) { |
} |
+ Bucket* bucket; |
int32 shm_id; |
uint32 shm_offset; |
QuerySync* sync; |
@@ -49,11 +60,12 @@ class GLES2_IMPL_EXPORT QuerySyncManager { |
bool Alloc(QueryInfo* info); |
void Free(const QueryInfo& sync); |
+ void Shrink(); |
private: |
MappedMemoryManager* mapped_memory_; |
- std::queue<QuerySync*> buckets_; |
- std::queue<QueryInfo> free_queries_; |
+ std::deque<Bucket*> buckets_; |
+ std::deque<QueryInfo> free_queries_; |
DISALLOW_COPY_AND_ASSIGN(QuerySyncManager); |
}; |
@@ -143,6 +155,7 @@ class GLES2_IMPL_EXPORT QueryTracker { |
Query* CreateQuery(GLuint id, GLenum target); |
Query* GetQuery(GLuint id); |
void RemoveQuery(GLuint id, bool context_lost); |
+ void Shrink(); |
private: |
typedef gpu::hash_map<GLuint, Query*> QueryMap; |