summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/query_manager.cc
diff options
context:
space:
mode:
authorhubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-25 03:22:44 +0000
committerhubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-25 03:22:44 +0000
commit20dab96d159c616e89e1fba30a7ce3daaa6d4778 (patch)
tree908ca23339e0410cda436977a8413232a822f81e /gpu/command_buffer/service/query_manager.cc
parent41b5036de7a5474e7942cc84b99655da451e63fd (diff)
downloadchromium_src-20dab96d159c616e89e1fba30a7ce3daaa6d4778.zip
chromium_src-20dab96d159c616e89e1fba30a7ce3daaa6d4778.tar.gz
chromium_src-20dab96d159c616e89e1fba30a7ce3daaa6d4778.tar.bz2
Add signalQuery, to allow for a callback when the result of a query is available.
BUG=249925 Review URL: https://chromiumcodereview.appspot.com/16983007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@208376 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/query_manager.cc')
-rw-r--r--gpu/command_buffer/service/query_manager.cc23
1 files changed, 21 insertions, 2 deletions
diff --git a/gpu/command_buffer/service/query_manager.cc b/gpu/command_buffer/service/query_manager.cc
index 3f81f64..8d85cff 100644
--- a/gpu/command_buffer/service/query_manager.cc
+++ b/gpu/command_buffer/service/query_manager.cc
@@ -432,7 +432,26 @@ QueryManager::Query::Query(
manager_->StartTracking(this);
}
+void QueryManager::Query::RunCallbacks() {
+ for (size_t i = 0; i < callbacks_.size(); i++) {
+ callbacks_[i].Run();
+ }
+ callbacks_.clear();
+}
+
+void QueryManager::Query::AddCallback(base::Closure callback) {
+ if (pending_) {
+ callbacks_.push_back(callback);
+ } else {
+ callback.Run();
+ }
+}
+
QueryManager::Query::~Query() {
+ // The query is getting deleted, either by the client or
+ // because the context was lost. Call any outstanding
+ // callbacks to avoid leaks.
+ RunCallbacks();
if (manager_) {
manager_->StopTracking(this);
manager_ = NULL;
@@ -466,6 +485,7 @@ bool QueryManager::ProcessPendingQueries() {
if (query->pending()) {
break;
}
+ query->RunCallbacks();
pending_queries_.pop_front();
}
@@ -485,6 +505,7 @@ bool QueryManager::ProcessPendingTransferQueries() {
if (query->pending()) {
break;
}
+ query->RunCallbacks();
pending_transfer_queries_.pop_front();
}
@@ -562,5 +583,3 @@ bool QueryManager::EndQuery(Query* query, uint32 submit_count) {
} // namespace gles2
} // namespace gpu
-
-