Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(777)

Unified Diff: gpu/command_buffer/service/query_manager.cc

Issue 723343002: Update from https://crrev.com/304121 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/service/query_manager.h ('k') | gpu/command_buffer/service/query_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5f518eca4c24c2c6d95244c1f02adaefbb1d687f..fdb5fa82f27fb6c5b816c4ad00b9e38fce6bf6de 100644
--- a/gpu/command_buffer/service/query_manager.cc
+++ b/gpu/command_buffer/service/query_manager.cc
@@ -64,7 +64,7 @@ class AsyncPixelTransfersCompletedQuery
bool Begin() override;
bool End(base::subtle::Atomic32 submit_count) override;
- bool Process() override;
+ bool Process(bool did_finish) override;
void Destroy(bool have_context) override;
protected:
@@ -105,7 +105,7 @@ bool AsyncPixelTransfersCompletedQuery::End(
return AddToPendingTransferQueue(submit_count);
}
-bool AsyncPixelTransfersCompletedQuery::Process() {
+bool AsyncPixelTransfersCompletedQuery::Process(bool did_finish) {
QuerySync* sync = manager()->decoder()->GetSharedMemoryAs<QuerySync*>(
shm_id(), shm_offset(), sizeof(*sync));
if (!sync)
@@ -141,7 +141,7 @@ class AllSamplesPassedQuery : public QueryManager::Query {
GLuint service_id);
bool Begin() override;
bool End(base::subtle::Atomic32 submit_count) override;
- bool Process() override;
+ bool Process(bool did_finish) override;
void Destroy(bool have_context) override;
protected:
@@ -169,7 +169,7 @@ bool AllSamplesPassedQuery::End(base::subtle::Atomic32 submit_count) {
return AddToPendingQueue(submit_count);
}
-bool AllSamplesPassedQuery::Process() {
+bool AllSamplesPassedQuery::Process(bool did_finish) {
GLuint available = 0;
glGetQueryObjectuivARB(
service_id_, GL_QUERY_RESULT_AVAILABLE_EXT, &available);
@@ -200,7 +200,7 @@ class CommandsIssuedQuery : public QueryManager::Query {
bool Begin() override;
bool End(base::subtle::Atomic32 submit_count) override;
- bool Process() override;
+ bool Process(bool did_finish) override;
void Destroy(bool have_context) override;
protected:
@@ -226,7 +226,7 @@ bool CommandsIssuedQuery::End(base::subtle::Atomic32 submit_count) {
return MarkAsCompleted(elapsed.InMicroseconds());
}
-bool CommandsIssuedQuery::Process() {
+bool CommandsIssuedQuery::Process(bool did_finish) {
NOTREACHED();
return true;
}
@@ -247,7 +247,7 @@ class CommandLatencyQuery : public QueryManager::Query {
bool Begin() override;
bool End(base::subtle::Atomic32 submit_count) override;
- bool Process() override;
+ bool Process(bool did_finish) override;
void Destroy(bool have_context) override;
protected:
@@ -269,7 +269,7 @@ bool CommandLatencyQuery::End(base::subtle::Atomic32 submit_count) {
return MarkAsCompleted(now.InMicroseconds());
}
-bool CommandLatencyQuery::Process() {
+bool CommandLatencyQuery::Process(bool did_finish) {
NOTREACHED();
return true;
}
@@ -293,7 +293,7 @@ class AsyncReadPixelsCompletedQuery
bool Begin() override;
bool End(base::subtle::Atomic32 submit_count) override;
- bool Process() override;
+ bool Process(bool did_finish) override;
void Destroy(bool have_context) override;
protected:
@@ -324,7 +324,7 @@ bool AsyncReadPixelsCompletedQuery::End(base::subtle::Atomic32 submit_count) {
base::Bind(&AsyncReadPixelsCompletedQuery::Complete,
AsWeakPtr()));
- return Process();
+ return Process(false);
}
void AsyncReadPixelsCompletedQuery::Complete() {
@@ -332,7 +332,7 @@ void AsyncReadPixelsCompletedQuery::Complete() {
complete_result_ = MarkAsCompleted(1);
}
-bool AsyncReadPixelsCompletedQuery::Process() {
+bool AsyncReadPixelsCompletedQuery::Process(bool did_finish) {
return !completed_ || complete_result_;
}
@@ -353,7 +353,7 @@ class GetErrorQuery : public QueryManager::Query {
bool Begin() override;
bool End(base::subtle::Atomic32 submit_count) override;
- bool Process() override;
+ bool Process(bool did_finish) override;
void Destroy(bool have_context) override;
protected:
@@ -376,7 +376,7 @@ bool GetErrorQuery::End(base::subtle::Atomic32 submit_count) {
return MarkAsCompleted(manager()->decoder()->GetErrorState()->GetGLError());
}
-bool GetErrorQuery::Process() {
+bool GetErrorQuery::Process(bool did_finish) {
NOTREACHED();
return true;
}
@@ -400,7 +400,7 @@ class CommandsCompletedQuery : public QueryManager::Query {
// Overridden from QueryManager::Query:
bool Begin() override;
bool End(base::subtle::Atomic32 submit_count) override;
- bool Process() override;
+ bool Process(bool did_finish) override;
void Destroy(bool have_context) override;
protected:
@@ -424,9 +424,16 @@ bool CommandsCompletedQuery::End(base::subtle::Atomic32 submit_count) {
return AddToPendingQueue(submit_count);
}
-bool CommandsCompletedQuery::Process() {
- if (fence_ && !fence_->HasCompleted())
+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);
}
@@ -635,10 +642,10 @@ bool QueryManager::Query::MarkAsCompleted(uint64 result) {
return true;
}
-bool QueryManager::ProcessPendingQueries() {
+bool QueryManager::ProcessPendingQueries(bool did_finish) {
while (!pending_queries_.empty()) {
Query* query = pending_queries_.front().get();
- if (!query->Process()) {
+ if (!query->Process(did_finish)) {
return false;
}
if (query->pending()) {
@@ -658,7 +665,7 @@ bool QueryManager::HavePendingQueries() {
bool QueryManager::ProcessPendingTransferQueries() {
while (!pending_transfer_queries_.empty()) {
Query* query = pending_transfer_queries_.front().get();
- if (!query->Process()) {
+ if (!query->Process(false)) {
return false;
}
if (query->pending()) {
« no previous file with comments | « gpu/command_buffer/service/query_manager.h ('k') | gpu/command_buffer/service/query_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698