| OLD | NEW |
| 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 #include "gpu/command_buffer/client/query_tracker.h" | 5 #include "gpu/command_buffer/client/query_tracker.h" |
| 6 | 6 |
| 7 #include <GLES2/gl2.h> | 7 #include <GLES2/gl2.h> |
| 8 #include <GLES2/gl2ext.h> | 8 #include <GLES2/gl2ext.h> |
| 9 #include <GLES2/gl2extchromium.h> | 9 #include <GLES2/gl2extchromium.h> |
| 10 | 10 |
| 11 #include "base/atomicops.h" |
| 11 #include "gpu/command_buffer/client/gles2_cmd_helper.h" | 12 #include "gpu/command_buffer/client/gles2_cmd_helper.h" |
| 12 #include "gpu/command_buffer/client/gles2_implementation.h" | 13 #include "gpu/command_buffer/client/gles2_implementation.h" |
| 13 #include "gpu/command_buffer/client/mapped_memory.h" | 14 #include "gpu/command_buffer/client/mapped_memory.h" |
| 14 #include "gpu/command_buffer/common/time.h" | 15 #include "gpu/command_buffer/common/time.h" |
| 15 | 16 |
| 16 namespace gpu { | 17 namespace gpu { |
| 17 namespace gles2 { | 18 namespace gles2 { |
| 18 | 19 |
| 19 QuerySyncManager::QuerySyncManager(MappedMemoryManager* manager) | 20 QuerySyncManager::QuerySyncManager(MappedMemoryManager* manager) |
| 20 : mapped_memory_(manager) { | 21 : mapped_memory_(manager) { |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 } | 140 } |
| 140 } | 141 } |
| 141 } | 142 } |
| 142 gl->helper()->EndQueryEXT(target(), submit_count()); | 143 gl->helper()->EndQueryEXT(target(), submit_count()); |
| 143 MarkAsPending(gl->helper()->InsertToken()); | 144 MarkAsPending(gl->helper()->InsertToken()); |
| 144 } | 145 } |
| 145 | 146 |
| 146 bool QueryTracker::Query::CheckResultsAvailable( | 147 bool QueryTracker::Query::CheckResultsAvailable( |
| 147 CommandBufferHelper* helper) { | 148 CommandBufferHelper* helper) { |
| 148 if (Pending()) { | 149 if (Pending()) { |
| 149 if (info_.sync->process_count == submit_count_ || | 150 if (base::subtle::Acquire_Load(&info_.sync->process_count) == |
| 151 submit_count_ || |
| 150 helper->IsContextLost()) { | 152 helper->IsContextLost()) { |
| 151 // Need a MemoryBarrier here so that sync->result read after | |
| 152 // sync->process_count. | |
| 153 base::subtle::MemoryBarrier(); | |
| 154 switch (target()) { | 153 switch (target()) { |
| 155 case GL_COMMANDS_ISSUED_CHROMIUM: | 154 case GL_COMMANDS_ISSUED_CHROMIUM: |
| 156 result_ = std::min(info_.sync->result, | 155 result_ = std::min(info_.sync->result, |
| 157 static_cast<uint64>(0xFFFFFFFFL)); | 156 static_cast<uint64>(0xFFFFFFFFL)); |
| 158 break; | 157 break; |
| 159 case GL_LATENCY_QUERY_CHROMIUM: | 158 case GL_LATENCY_QUERY_CHROMIUM: |
| 160 DCHECK(info_.sync->result >= client_begin_time_us_); | 159 DCHECK(info_.sync->result >= client_begin_time_us_); |
| 161 result_ = std::min(info_.sync->result - client_begin_time_us_, | 160 result_ = std::min(info_.sync->result - client_begin_time_us_, |
| 162 static_cast<uint64>(0xFFFFFFFFL)); | 161 static_cast<uint64>(0xFFFFFFFFL)); |
| 163 break; | 162 break; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 void QueryTracker::Shrink() { | 241 void QueryTracker::Shrink() { |
| 243 FreeCompletedQueries(); | 242 FreeCompletedQueries(); |
| 244 query_sync_manager_.Shrink(); | 243 query_sync_manager_.Shrink(); |
| 245 } | 244 } |
| 246 | 245 |
| 247 void QueryTracker::FreeCompletedQueries() { | 246 void QueryTracker::FreeCompletedQueries() { |
| 248 QueryList::iterator it = removed_queries_.begin(); | 247 QueryList::iterator it = removed_queries_.begin(); |
| 249 while (it != removed_queries_.end()) { | 248 while (it != removed_queries_.end()) { |
| 250 Query* query = *it; | 249 Query* query = *it; |
| 251 if (query->Pending() && | 250 if (query->Pending() && |
| 252 query->info_.sync->process_count != query->submit_count()) { | 251 base::subtle::Acquire_Load(&query->info_.sync->process_count) != |
| 252 query->submit_count()) { |
| 253 ++it; | 253 ++it; |
| 254 continue; | 254 continue; |
| 255 } | 255 } |
| 256 | 256 |
| 257 query_sync_manager_.Free(query->info_); | 257 query_sync_manager_.Free(query->info_); |
| 258 it = removed_queries_.erase(it); | 258 it = removed_queries_.erase(it); |
| 259 delete query; | 259 delete query; |
| 260 } | 260 } |
| 261 } | 261 } |
| 262 | 262 |
| 263 } // namespace gles2 | 263 } // namespace gles2 |
| 264 } // namespace gpu | 264 } // namespace gpu |
| OLD | NEW |