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

Unified Diff: gpu/command_buffer/service/query_manager.h

Issue 9694025: Add support for GL_COMMANDS_ISSUED_CHROMIUM fence like query. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add cast for std::min Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/query_manager.h
diff --git a/gpu/command_buffer/service/query_manager.h b/gpu/command_buffer/service/query_manager.h
index a813ad3032def52c6847c7f14586ed0d7c012045..36753e72258240c587c700ace0d81966d0ef76e4 100644
--- a/gpu/command_buffer/service/query_manager.h
+++ b/gpu/command_buffer/service/query_manager.h
@@ -28,30 +28,26 @@ class GPU_EXPORT QueryManager {
public:
typedef scoped_refptr<Query> Ref;
- Query(QueryManager* manager, GLuint service_id);
-
- void Initialize(GLenum target, int32 shm_id, uint32 shm_offset);
-
- bool IsInitialized() const {
- return target_ != 0;
- }
-
- GLuint service_id() const {
- return service_id_;
- }
+ Query(
+ QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
+ virtual ~Query();
GLenum target() const {
return target_;
}
bool IsDeleted() const {
- return service_id_ == 0;
+ return deleted_;
}
bool IsValid() const {
return target() && !IsDeleted();
}
+ bool pending() const {
+ return pending_;
+ }
+
int32 shm_id() const {
return shm_id_;
}
@@ -60,16 +56,28 @@ class GPU_EXPORT QueryManager {
return shm_offset_;
}
- bool pending() const {
- return pending_;
+ // Returns false if shared memory for sync is invalid.
+ virtual bool Begin() = 0;
+
+ // Returns false if shared memory for sync is invalid.
+ virtual bool End(uint32 submit_count) = 0;
+
+ // Returns false if shared memory for sync is invalid.
+ virtual bool Process() = 0;
+
+ virtual void Destroy(bool have_context) = 0;
+
+ protected:
+ QueryManager* manager() const {
+ return manager_;
}
- private:
- friend class QueryManager;
- friend class QueryManagerTest;
- friend class base::RefCounted<Query>;
+ void MarkAsDeleted() {
+ deleted_ = true;
+ }
- ~Query();
+ // Returns false if shared memory for sync is invalid.
+ bool MarkAsCompleted(GLuint result);
void MarkAsPending(uint32 submit_count) {
DCHECK(!pending_);
@@ -77,25 +85,31 @@ class GPU_EXPORT QueryManager {
submit_count_ = submit_count;
}
- void MarkAsCompleted() {
- DCHECK(pending_);
- pending_ = false;
+ // Returns false if shared memory for sync is invalid.
+ bool AddToPendingQueue(uint32 submit_count) {
+ return manager_->AddPendingQuery(this, submit_count);
}
- uint32 submit_count() const {
- return submit_count_;
+ void BeginQueryHelper(GLenum target, GLuint id) {
+ manager_->BeginQueryHelper(target, id);
}
- void MarkAsDeleted() {
- service_id_ = 0;
+ void EndQueryHelper(GLenum target) {
+ manager_->EndQueryHelper(target);
+ }
+
+ private:
+ friend class QueryManager;
+ friend class QueryManagerTest;
+ friend class base::RefCounted<Query>;
+
+ uint32 submit_count() const {
+ return submit_count_;
}
// The manager that owns this Query.
QueryManager* manager_;
- // Service side query id.
- GLuint service_id_;
-
// The type of query.
GLenum target_;
@@ -106,18 +120,24 @@ class GPU_EXPORT QueryManager {
// Count to set process count do when completed.
uint32 submit_count_;
- // True if in the Queue.
+ // True if in the queue.
bool pending_;
+
+ // True if deleted.
+ bool deleted_;
};
- QueryManager();
+ QueryManager(
+ CommonDecoder* decoder,
+ bool use_arb_occlusion_query2_for_occlusion_query_boolean);
~QueryManager();
// Must call before destruction.
void Destroy(bool have_context);
// Creates a Query for the given query.
- Query* CreateQuery(GLuint client_id, GLuint service_id);
+ Query* CreateQuery(
+ GLenum target, GLuint client_id, int32 shm_id, uint32 shm_offset);
// Gets the query info for the given query.
Query* GetQuery(GLuint client_id);
@@ -125,18 +145,15 @@ class GPU_EXPORT QueryManager {
// Removes a query info for the given query.
void RemoveQuery(GLuint client_id);
- // Gets a client id for a given service id.
- bool GetClientId(GLuint service_id, GLuint* client_id) const;
-
- // Adds to queue of queries waiting for completion.
- void AddPendingQuery(Query* query, uint32 submit_count);
+ // Returns false if any query is pointing to invalid shared memory.
+ bool BeginQuery(Query* query);
- // Removes a query from the queue of pending queries.
- void RemovePendingQuery(Query* query);
+ // Returns false if any query is pointing to invalid shared memory.
+ bool EndQuery(Query* query, uint32 submit_count);
// Processes pending queries. Returns false if any queries are pointing
// to invalid shared memory.
- bool ProcessPendingQueries(CommonDecoder* decoder);
+ bool ProcessPendingQueries();
// True if there are pending queries.
bool HavePendingQueries();
@@ -145,6 +162,24 @@ class GPU_EXPORT QueryManager {
void StartTracking(Query* query);
void StopTracking(Query* query);
+ // Wrappers for BeginQueryARB and EndQueryARB to hide differences between
+ // ARB_occlusion_query2 and EXT_occlusion_query_boolean.
+ void BeginQueryHelper(GLenum target, GLuint id);
+ void EndQueryHelper(GLenum target);
+
+ // Adds to queue of queries waiting for completion.
+ // Returns false if any query is pointing to invalid shared memory.
+ bool AddPendingQuery(Query* query, uint32 submit_count);
+
+ // Removes a query from the queue of pending queries.
+ // Returns false if any query is pointing to invalid shared memory.
+ bool RemovePendingQuery(Query* query);
+
+ // Used to validate shared memory.
+ CommonDecoder* decoder_;
+
+ bool use_arb_occlusion_query2_for_occlusion_query_boolean_;
+
// Counts the number of Queries allocated with 'this' as their manager.
// Allows checking no Query will outlive this.
unsigned query_count_;
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h ('k') | gpu/command_buffer/service/query_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698