Update from https://crrev.com/319330
- New chromium clang rules require explicit external destructors so
  system/lib added for MessagePipe, DataPipe and SharedBuffer
- New chromium clang rules require override and no virtual in
  declarations, so many files updated.
- cc_strip_video patch updated.

BUG=
R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/988693005
diff --git a/ui/gl/gpu_timing.cc b/ui/gl/gpu_timing.cc
index 22a4a64..a3b697f 100644
--- a/ui/gl/gpu_timing.cc
+++ b/ui/gl/gpu_timing.cc
@@ -30,6 +30,17 @@
   return new GPUTimingClient(this);
 }
 
+uint32_t GPUTiming::GetDisjointCount() {
+  if (timer_type_ == kTimerTypeDisjoint) {
+    GLint disjoint_value = 0;
+    glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint_value);
+    if (disjoint_value) {
+      disjoint_counter_++;
+    }
+  }
+  return disjoint_counter_;
+}
+
 GPUTimer::~GPUTimer() {
   glDeleteQueriesARB(2, queries_);
 }
@@ -87,6 +98,7 @@
     : gpu_timing_(gpu_timing) {
   if (gpu_timing) {
     timer_type_ = gpu_timing->GetTimerType();
+    disjoint_counter_ = gpu_timing_->GetDisjointCount();
   }
 }
 
@@ -111,12 +123,13 @@
 
 bool GPUTimingClient::CheckAndResetTimerErrors() {
   if (timer_type_ == GPUTiming::kTimerTypeDisjoint) {
-    GLint disjoint_value = 0;
-    glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint_value);
-    return disjoint_value != 0;
-  } else {
-    return false;
+    DCHECK(gpu_timing_ != nullptr);
+    const uint32_t total_disjoint_count = gpu_timing_->GetDisjointCount();
+    const bool disjoint_triggered = total_disjoint_count != disjoint_counter_;
+    disjoint_counter_ = total_disjoint_count;
+    return disjoint_triggered;
   }
+  return false;
 }
 
 int64 GPUTimingClient::CalculateTimerOffset() {