Add jank metrics implementation

This CL implements the jank metrics that track abrupt drop in smoothness
(i.e. increase in frame latency). Jank metrics histograms are reported
under the "Graphics.Smoothness.Jank" namespace and the histogram names
indicate the frame sequence tracker (and its effective thread type) each
jank metric is associated with (e.g.
Graphics.Smoothness.Jank.Main.WheelScroll). Each jank occurrence is also
visualized as a trace event spanning the duration of the janky frame.

Bug: 1073216
Change-Id: I50bf8983d9c94cda68234d0423308beed1f8d5d7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2248173
Reviewed-by: Sadrul Chowdhury <[email protected]>
Reviewed-by: Behdad Bakhshinategh <[email protected]>
Commit-Queue: Mingjing Zhang <[email protected]>
Cr-Commit-Position: refs/heads/master@{#798350}
diff --git a/cc/metrics/frame_sequence_tracker.cc b/cc/metrics/frame_sequence_tracker.cc
index f9010338..3d2f484c 100644
--- a/cc/metrics/frame_sequence_tracker.cc
+++ b/cc/metrics/frame_sequence_tracker.cc
@@ -450,6 +450,9 @@
     if (metrics()->GetEffectiveThread() == ThreadType::kCompositor) {
       metrics()->AdvanceTrace(feedback.timestamp);
     }
+
+    metrics()->ComputeJank(FrameSequenceMetrics::ThreadType::kCompositor,
+                           feedback.timestamp, feedback.interval);
   }
 
   if (was_presented) {
@@ -469,6 +472,9 @@
       if (metrics()->GetEffectiveThread() == ThreadType::kMain) {
         metrics()->AdvanceTrace(feedback.timestamp);
       }
+
+      metrics()->ComputeJank(FrameSequenceMetrics::ThreadType::kMain,
+                             feedback.timestamp, feedback.interval);
     }
 
     if (impl_frames_produced > 0) {