From c50a9b15cf5f524441a81d98b45f778755e06dc3 Mon Sep 17 00:00:00 2001
From: "fischman@chromium.org"
 <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Fri, 15 Jun 2012 08:12:38 +0000
Subject: Fix 2 crashers in GLES2Implementation: - Finish() uses
 GPU_CLIENT_SINGLE_THREAD_CHECK() but is called by other methods   that call
 this macro, triggering GPU_CHECK_EQ(0, 1) crashes. - DeleteQueriesEXTHelper
 was checking that pending queries had *no* results   available before
 removing them instead of checking they *had* results   available.

Review URL: https://chromiumcodereview.appspot.com/10536191

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142357 0039d316-1c4b-4281-b951-d872f2087c98
---
 gpu/command_buffer/client/gles2_implementation.cc | 10 +++++++---
 gpu/command_buffer/client/gles2_implementation.h  |  2 ++
 2 files changed, 9 insertions(+), 3 deletions(-)

(limited to 'gpu')

diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index 94ad783..5d46196 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -1036,6 +1036,10 @@ void GLES2Implementation::Flush() {
 
 void GLES2Implementation::Finish() {
   GPU_CLIENT_SINGLE_THREAD_CHECK();
+  FinishHelper();
+}
+
+void GLES2Implementation::FinishHelper() {
   GPU_CLIENT_LOG("[" << this << "] glFinish()");
   TRACE_EVENT0("gpu", "GLES2::Finish");
   // Insert the cmd to call glFinish
@@ -3002,13 +3006,13 @@ void GLES2Implementation::DeleteQueriesEXTHelper(
   }
 
   if (query_pending) {
-    Finish();
+    FinishHelper();
   }
 
   for (GLsizei ii = 0; ii < n; ++ii) {
     QueryTracker::Query* query = query_tracker_->GetQuery(queries[ii]);
     if (query && query->Pending()) {
-      GPU_CHECK(!query->CheckResultsAvailable(helper_));
+      GPU_CHECK(query->CheckResultsAvailable(helper_));
     }
     query_tracker_->RemoveQuery(queries[ii]);
   }
@@ -3141,7 +3145,7 @@ void GLES2Implementation::GetQueryObjectuivEXT(
         helper_->WaitForToken(query->token());
         if (!query->CheckResultsAvailable(helper_)) {
           // TODO(gman): Speed this up.
-          Finish();
+          FinishHelper();
           GPU_CHECK(query->CheckResultsAvailable(helper_));
         }
       }
diff --git a/gpu/command_buffer/client/gles2_implementation.h b/gpu/command_buffer/client/gles2_implementation.h
index e4b838e..b8c3da1 100644
--- a/gpu/command_buffer/client/gles2_implementation.h
+++ b/gpu/command_buffer/client/gles2_implementation.h
@@ -472,6 +472,8 @@ class GLES2_IMPL_EXPORT GLES2Implementation {
 
   IdHandlerInterface* GetIdHandler(int id_namespace) const;
 
+  void FinishHelper();
+
   GLES2Util util_;
   GLES2CmdHelper* helper_;
   TransferBufferInterface* transfer_buffer_;
-- 
cgit v1.1