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 fdb5fa82f27fb6c5b816c4ad00b9e38fce6bf6de..8b753337deee345aa95953051eeb34a17a1d0772 100644 |
--- a/gpu/command_buffer/service/query_manager.cc |
+++ b/gpu/command_buffer/service/query_manager.cc |
@@ -408,6 +408,7 @@ class CommandsCompletedQuery : public QueryManager::Query { |
private: |
scoped_ptr<gfx::GLFence> fence_; |
+ base::TimeTicks begin_time_; |
}; |
CommandsCompletedQuery::CommandsCompletedQuery(QueryManager* manager, |
@@ -416,7 +417,10 @@ CommandsCompletedQuery::CommandsCompletedQuery(QueryManager* manager, |
uint32 shm_offset) |
: Query(manager, target, shm_id, shm_offset) {} |
-bool CommandsCompletedQuery::Begin() { return true; } |
+bool CommandsCompletedQuery::Begin() { |
+ begin_time_ = base::TimeTicks::HighResNow(); |
+ return true; |
+} |
bool CommandsCompletedQuery::End(base::subtle::Atomic32 submit_count) { |
fence_.reset(gfx::GLFence::Create()); |
@@ -428,13 +432,11 @@ bool CommandsCompletedQuery::Process(bool did_finish) { |
// Note: |did_finish| guarantees that the GPU has passed the fence but |
// we cannot assume that GLFence::HasCompleted() will return true yet as |
// that's not guaranteed by all GLFence implementations. |
- // |
- // TODO(reveman): Add UMA stats to determine how common it is that glFinish() |
- // needs to be called for these queries to complete. crbug.com/431845 |
if (!did_finish && fence_ && !fence_->HasCompleted()) |
return true; |
- return MarkAsCompleted(0); |
+ base::TimeDelta elapsed = base::TimeTicks::HighResNow() - begin_time_; |
+ return MarkAsCompleted(elapsed.InMicroseconds()); |
} |
void CommandsCompletedQuery::Destroy(bool have_context) { |