diff options
author | hubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-25 03:22:44 +0000 |
---|---|---|
committer | hubbe@chromium.org <hubbe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-25 03:22:44 +0000 |
commit | 20dab96d159c616e89e1fba30a7ce3daaa6d4778 (patch) | |
tree | 908ca23339e0410cda436977a8413232a822f81e /gpu/command_buffer/service/query_manager.cc | |
parent | 41b5036de7a5474e7942cc84b99655da451e63fd (diff) | |
download | chromium_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.cc | 23 |
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 - - |