| Index: gpu/command_buffer/service/query_manager.cc
|
| diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc
|
| index 85e273c6c3a02b570cc87b634823c577eaaf63a8..44fb8bb6ffeca49e6771a3f2236a5c4bd69fa037 100644
|
| --- a/gpu/command_buffer/service/query_manager.cc
|
| +++ b/gpu/command_buffer/service/query_manager.cc
|
| @@ -24,7 +24,7 @@ namespace {
|
| class AsyncPixelTransferCompletionObserverImpl
|
| : public AsyncPixelTransferCompletionObserver {
|
| public:
|
| - AsyncPixelTransferCompletionObserverImpl(uint32 submit_count)
|
| + AsyncPixelTransferCompletionObserverImpl(int32 submit_count)
|
| : submit_count_(submit_count),
|
| cancelled_(false) {}
|
|
|
| @@ -42,17 +42,14 @@ class AsyncPixelTransferCompletionObserverImpl
|
| mem_params.shm_data_offset;
|
| QuerySync* sync = static_cast<QuerySync*>(data);
|
|
|
| - // Need a MemoryBarrier here to ensure that upload completed before
|
| - // submit_count was written to sync->process_count.
|
| - base::subtle::MemoryBarrier();
|
| - sync->process_count = submit_count_;
|
| + base::subtle::Release_Store(&sync->process_count, submit_count_);
|
| }
|
| }
|
|
|
| private:
|
| virtual ~AsyncPixelTransferCompletionObserverImpl() {}
|
|
|
| - uint32 submit_count_;
|
| + int32 submit_count_;
|
|
|
| base::Lock lock_;
|
| bool cancelled_;
|
| @@ -68,7 +65,7 @@ class AsyncPixelTransfersCompletedQuery
|
| QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
|
|
|
| virtual bool Begin() OVERRIDE;
|
| - virtual bool End(uint32 submit_count) OVERRIDE;
|
| + virtual bool End(int32 submit_count) OVERRIDE;
|
| virtual bool Process() OVERRIDE;
|
| virtual void Destroy(bool have_context) OVERRIDE;
|
|
|
| @@ -87,7 +84,7 @@ bool AsyncPixelTransfersCompletedQuery::Begin() {
|
| return true;
|
| }
|
|
|
| -bool AsyncPixelTransfersCompletedQuery::End(uint32 submit_count) {
|
| +bool AsyncPixelTransfersCompletedQuery::End(int32 submit_count) {
|
| AsyncMemoryParams mem_params;
|
| // Get the real shared memory since it might need to be duped to prevent
|
| // use-after-free of the memory.
|
| @@ -119,7 +116,7 @@ bool AsyncPixelTransfersCompletedQuery::Process() {
|
| // Check if completion callback has been run. sync->process_count atomicity
|
| // is guaranteed as this is already used to notify client of a completed
|
| // query.
|
| - if (sync->process_count != submit_count())
|
| + if (base::subtle::Acquire_Load(&sync->process_count) != submit_count())
|
| return true;
|
|
|
| UnmarkAsPending();
|
| @@ -145,7 +142,7 @@ class AllSamplesPassedQuery : public QueryManager::Query {
|
| QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset,
|
| GLuint service_id);
|
| virtual bool Begin() OVERRIDE;
|
| - virtual bool End(uint32 submit_count) OVERRIDE;
|
| + virtual bool End(int32 submit_count) OVERRIDE;
|
| virtual bool Process() OVERRIDE;
|
| virtual void Destroy(bool have_context) OVERRIDE;
|
|
|
| @@ -169,7 +166,7 @@ bool AllSamplesPassedQuery::Begin() {
|
| return true;
|
| }
|
|
|
| -bool AllSamplesPassedQuery::End(uint32 submit_count) {
|
| +bool AllSamplesPassedQuery::End(int32 submit_count) {
|
| EndQueryHelper(target());
|
| return AddToPendingQueue(submit_count);
|
| }
|
| @@ -204,7 +201,7 @@ class CommandsIssuedQuery : public QueryManager::Query {
|
| QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
|
|
|
| virtual bool Begin() OVERRIDE;
|
| - virtual bool End(uint32 submit_count) OVERRIDE;
|
| + virtual bool End(int32 submit_count) OVERRIDE;
|
| virtual bool Process() OVERRIDE;
|
| virtual void Destroy(bool have_context) OVERRIDE;
|
|
|
| @@ -225,7 +222,7 @@ bool CommandsIssuedQuery::Begin() {
|
| return true;
|
| }
|
|
|
| -bool CommandsIssuedQuery::End(uint32 submit_count) {
|
| +bool CommandsIssuedQuery::End(int32 submit_count) {
|
| base::TimeDelta elapsed = base::TimeTicks::HighResNow() - begin_time_;
|
| MarkAsPending(submit_count);
|
| return MarkAsCompleted(elapsed.InMicroseconds());
|
| @@ -251,7 +248,7 @@ class CommandLatencyQuery : public QueryManager::Query {
|
| QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
|
|
|
| virtual bool Begin() OVERRIDE;
|
| - virtual bool End(uint32 submit_count) OVERRIDE;
|
| + virtual bool End(int32 submit_count) OVERRIDE;
|
| virtual bool Process() OVERRIDE;
|
| virtual void Destroy(bool have_context) OVERRIDE;
|
|
|
| @@ -268,7 +265,7 @@ bool CommandLatencyQuery::Begin() {
|
| return true;
|
| }
|
|
|
| -bool CommandLatencyQuery::End(uint32 submit_count) {
|
| +bool CommandLatencyQuery::End(int32 submit_count) {
|
| base::TimeDelta now = base::TimeTicks::HighResNow() - base::TimeTicks();
|
| MarkAsPending(submit_count);
|
| return MarkAsCompleted(now.InMicroseconds());
|
| @@ -297,7 +294,7 @@ class AsyncReadPixelsCompletedQuery
|
| QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
|
|
|
| virtual bool Begin() OVERRIDE;
|
| - virtual bool End(uint32 submit_count) OVERRIDE;
|
| + virtual bool End(int32 submit_count) OVERRIDE;
|
| virtual bool Process() OVERRIDE;
|
| virtual void Destroy(bool have_context) OVERRIDE;
|
|
|
| @@ -315,7 +312,7 @@ bool AsyncReadPixelsCompletedQuery::Begin() {
|
| return true;
|
| }
|
|
|
| -bool AsyncReadPixelsCompletedQuery::End(uint32 submit_count) {
|
| +bool AsyncReadPixelsCompletedQuery::End(int32 submit_count) {
|
| if (!AddToPendingQueue(submit_count)) {
|
| return false;
|
| }
|
| @@ -350,7 +347,7 @@ class GetErrorQuery : public QueryManager::Query {
|
| QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
|
|
|
| virtual bool Begin() OVERRIDE;
|
| - virtual bool End(uint32 submit_count) OVERRIDE;
|
| + virtual bool End(int32 submit_count) OVERRIDE;
|
| virtual bool Process() OVERRIDE;
|
| virtual void Destroy(bool have_context) OVERRIDE;
|
|
|
| @@ -369,7 +366,7 @@ bool GetErrorQuery::Begin() {
|
| return true;
|
| }
|
|
|
| -bool GetErrorQuery::End(uint32 submit_count) {
|
| +bool GetErrorQuery::End(int32 submit_count) {
|
| MarkAsPending(submit_count);
|
| return MarkAsCompleted(manager()->decoder()->GetErrorState()->GetGLError());
|
| }
|
| @@ -563,10 +560,7 @@ bool QueryManager::Query::MarkAsCompleted(uint64 result) {
|
|
|
| pending_ = false;
|
| sync->result = result;
|
| - // Need a MemoryBarrier here so that sync->result is written before
|
| - // sync->process_count.
|
| - base::subtle::MemoryBarrier();
|
| - sync->process_count = submit_count_;
|
| + base::subtle::Release_Store(&sync->process_count, submit_count_);
|
|
|
| return true;
|
| }
|
| @@ -611,7 +605,7 @@ bool QueryManager::HavePendingTransferQueries() {
|
| return !pending_transfer_queries_.empty();
|
| }
|
|
|
| -bool QueryManager::AddPendingQuery(Query* query, uint32 submit_count) {
|
| +bool QueryManager::AddPendingQuery(Query* query, int32 submit_count) {
|
| DCHECK(query);
|
| DCHECK(!query->IsDeleted());
|
| if (!RemovePendingQuery(query)) {
|
| @@ -622,7 +616,7 @@ bool QueryManager::AddPendingQuery(Query* query, uint32 submit_count) {
|
| return true;
|
| }
|
|
|
| -bool QueryManager::AddPendingTransferQuery(Query* query, uint32 submit_count) {
|
| +bool QueryManager::AddPendingTransferQuery(Query* query, int32 submit_count) {
|
| DCHECK(query);
|
| DCHECK(!query->IsDeleted());
|
| if (!RemovePendingQuery(query)) {
|
| @@ -668,7 +662,7 @@ bool QueryManager::BeginQuery(Query* query) {
|
| return query->Begin();
|
| }
|
|
|
| -bool QueryManager::EndQuery(Query* query, uint32 submit_count) {
|
| +bool QueryManager::EndQuery(Query* query, int32 submit_count) {
|
| DCHECK(query);
|
| if (!RemovePendingQuery(query)) {
|
| return false;
|
|
|