Pull in various gpu/command_buffer fixes from chromium

This includes the //gpu portions of:

https://crrev.com/328526
https://crrev.com/327384
https://crrev.com/327344
https://crrev.com/327226
https://crrev.com/327202
https://crrev.com/327197
https://crrev.com/326845
https://crrev.com/326662
https://crrev.com/325767
https://crrev.com/325314
https://crrev.com/324736
https://crrev.com/324152
https://crrev.com/323932
https://crrev.com/323856
https://crrev.com/322503
https://crrev.com/322498
https://crrev.com/322403

R=viettrungluu@chromium.org
TBR=viettrungluu@chromium.org

Review URL: https://codereview.chromium.org/1135943002
diff --git a/ui/gl/gpu_timing.cc b/ui/gl/gpu_timing.cc
index a84d3f7..ee90490 100644
--- a/ui/gl/gpu_timing.cc
+++ b/ui/gl/gpu_timing.cc
@@ -44,7 +44,16 @@
 }
 
 GPUTimer::~GPUTimer() {
-  glDeleteQueries(2, queries_);
+  // Destroy() must be called before the destructor.
+  DCHECK(queries_[0] == 0);
+  DCHECK(queries_[1] == 0);
+}
+
+void GPUTimer::Destroy(bool have_context) {
+  if (have_context) {
+    glDeleteQueries(2, queries_);
+  }
+  memset(queries_, 0, sizeof(queries_));
 }
 
 void GPUTimer::Start() {