15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <deque> 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <vector> 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/atomicops.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/feature_info.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/gpu_export.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLES2Decoder; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FeatureInfo; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class keeps track of the queries and their state 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// As Queries are not shared there is one QueryManager per context. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GPU_EXPORT QueryManager { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class GPU_EXPORT Query : public base::RefCounted<Query> { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Query( 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target() const { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return target_; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsDeleted() const { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return deleted_; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsValid() const { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return target() && !IsDeleted(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool pending() const { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pending_; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 shm_id() const { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shm_id_; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 shm_offset() const { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return shm_offset_; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if shared memory for sync is invalid. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Begin() = 0; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if shared memory for sync is invalid. 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool End(base::subtle::Atomic32 submit_count) = 0; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if shared memory for sync is invalid. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Process() = 0; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Destroy(bool have_context) = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void AddCallback(base::Closure callback); 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Query(); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryManager* manager() const { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return manager_; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MarkAsDeleted() { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) deleted_ = true; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if shared memory for sync is invalid. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool MarkAsCompleted(uint64 result); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void MarkAsPending(base::subtle::Atomic32 submit_count) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!pending_); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_ = true; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) submit_count_ = submit_count; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UnmarkAsPending() { 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(pending_); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_ = false; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if shared memory for sync is invalid. 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool AddToPendingQueue(base::subtle::Atomic32 submit_count) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return manager_->AddPendingQuery(this, submit_count); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns false if shared memory for sync is invalid. 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool AddToPendingTransferQueue(base::subtle::Atomic32 submit_count) { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return manager_->AddPendingTransferQuery(this, submit_count); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void BeginQueryHelper(GLenum target, GLuint id) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->BeginQueryHelper(target, id); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EndQueryHelper(GLenum target) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->EndQueryHelper(target); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::subtle::Atomic32 submit_count() const { return submit_count_; } 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class QueryManager; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class QueryManagerTest; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::RefCounted<Query>; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void RunCallbacks(); 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The manager that owns this Query. 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryManager* manager_; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The type of query. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The shared memory used with this Query. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 shm_id_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 shm_offset_; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Count to set process count do when completed. 136a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::subtle::Atomic32 submit_count_; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if in the queue. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool pending_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if deleted. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool deleted_; 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // List of callbacks to run when result is available. 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<base::Closure> callbacks_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryManager( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2Decoder* decoder, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FeatureInfo* feature_info); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~QueryManager(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Must call before destruction. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Destroy(bool have_context); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a Query for the given query. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Query* CreateQuery( 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum target, GLuint client_id, int32 shm_id, uint32 shm_offset); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the query info for the given query. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Query* GetQuery(GLuint client_id); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes a query info for the given query. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveQuery(GLuint client_id); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if any query is pointing to invalid shared memory. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool BeginQuery(Query* query); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if any query is pointing to invalid shared memory. 170a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool EndQuery(Query* query, base::subtle::Atomic32 submit_count); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Processes pending queries. Returns false if any queries are pointing 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to invalid shared memory. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ProcessPendingQueries(); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if there are pending queries. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HavePendingQueries(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Processes pending transfer queries. Returns false if any queries are 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // pointing to invalid shared memory. 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool ProcessPendingTransferQueries(); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if there are pending transfer queries. 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HavePendingTransferQueries(); 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2Decoder* decoder() const { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return decoder_; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void GenQueries(GLsizei n, const GLuint* queries); 1910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool IsValidQuery(GLuint id); 1920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartTracking(Query* query); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StopTracking(Query* query); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wrappers for BeginQueryARB and EndQueryARB to hide differences between 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ARB_occlusion_query2 and EXT_occlusion_query_boolean. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void BeginQueryHelper(GLenum target, GLuint id); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EndQueryHelper(GLenum target); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds to queue of queries waiting for completion. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if any query is pointing to invalid shared memory. 204a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool AddPendingQuery(Query* query, base::subtle::Atomic32 submit_count); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds to queue of transfer queries waiting for completion. 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns false if any query is pointing to invalid shared memory. 208a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool AddPendingTransferQuery(Query* query, 209a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::subtle::Atomic32 submit_count); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes a query from the queue of pending queries. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if any query is pointing to invalid shared memory. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool RemovePendingQuery(Query* query); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a target used for the underlying GL extension 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // used to emulate a query. 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLenum AdjustTargetForEmulation(GLenum target); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used to validate shared memory and get GL errors. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GLES2Decoder* decoder_; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_arb_occlusion_query2_for_occlusion_query_boolean_; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_arb_occlusion_query_for_occlusion_query_boolean_; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Counts the number of Queries allocated with 'this' as their manager. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows checking no Query will outlive this. 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned query_count_; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Info for each query in the system. 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef base::hash_map<GLuint, scoped_refptr<Query> > QueryMap; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryMap queries_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch typedef base::hash_set<GLuint> GeneratedQueryIds; 2340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GeneratedQueryIds generated_query_ids_; 2350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Queries waiting for completion. 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef std::deque<scoped_refptr<Query> > QueryQueue; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) QueryQueue pending_queries_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Async pixel transfer queries waiting for completion. 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) QueryQueue pending_transfer_queries_; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(QueryManager); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gles2 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // GPU_COMMAND_BUFFER_SERVICE_QUERY_MANAGER_H_ 250