StateManagerGL: Rework query tracking (again)

 * Put the temporarily paused queries into a separate map, this should
   be separate functionality from the regular query tracking.

 * Pair down the number of functions that modify the current begin/end
   state.

 * Always pause all old queries and resume all new queries on context
   switch.

BUG=805233

Change-Id: If37a9947b50feaa4e627070ce2a7895aa5034c0e
Reviewed-on: https://chromium-review.googlesource.com/902426
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/renderer/gl/QueryGL.cpp b/src/libANGLE/renderer/gl/QueryGL.cpp
index ddbf2f8..502b604 100644
--- a/src/libANGLE/renderer/gl/QueryGL.cpp
+++ b/src/libANGLE/renderer/gl/QueryGL.cpp
@@ -67,11 +67,17 @@
 
 StandardQueryGL::~StandardQueryGL()
 {
-    mStateManager->deleteQuery(mActiveQuery);
-    mStateManager->onDeleteQueryObject(this);
+    if (mActiveQuery != 0)
+    {
+        mStateManager->endQuery(mType, this, mActiveQuery);
+        mFunctions->deleteQueries(1, &mActiveQuery);
+        mActiveQuery = 0;
+    }
+
     while (!mPendingQueries.empty())
     {
-        mStateManager->deleteQuery(mPendingQueries.front());
+        GLuint id = mPendingQueries.front();
+        mFunctions->deleteQueries(1, &id);
         mPendingQueries.pop_front();
     }
 }
@@ -79,7 +85,6 @@
 gl::Error StandardQueryGL::begin()
 {
     mResultSum = 0;
-    mStateManager->onBeginQuery(this);
     return resume();
 }
 
@@ -157,7 +162,7 @@
 {
     if (mActiveQuery != 0)
     {
-        mStateManager->endQuery(mType, mActiveQuery);
+        mStateManager->endQuery(mType, this, mActiveQuery);
 
         mPendingQueries.push_back(mActiveQuery);
         mActiveQuery = 0;
@@ -185,7 +190,7 @@
         }
 
         mFunctions->genQueries(1, &mActiveQuery);
-        mStateManager->beginQuery(mType, mActiveQuery);
+        mStateManager->beginQuery(mType, this, mActiveQuery);
     }
 
     return gl::NoError();
@@ -222,7 +227,7 @@
             mResultSum = MergeQueryResults(mType, mResultSum, static_cast<GLuint64>(result));
         }
 
-        mStateManager->deleteQuery(id);
+        mFunctions->deleteQueries(1, &id);
 
         mPendingQueries.pop_front();
     }