Merge "Add a new "restricted" metric name to reduce noise."
diff --git a/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_queuing_delay.sql b/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_queuing_delay.sql
index d3762ef..23a9908 100644
--- a/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_queuing_delay.sql
+++ b/src/trace_processor/metrics/sql/chrome/scroll_jank_cause_queuing_delay.sql
@@ -129,9 +129,15 @@
           EXTRACT_ARG(descendant.arg_set_id,
               "chrome_mojo_event_info.watcher_notify_interface_tag"),
           NULL) || ")",
+      descendant.name || "(" ||
+          IIF(descendant.arg_set_id IS NOT NULL,
+          EXTRACT_ARG(descendant.arg_set_id,
+              "chrome_mojo_event_info.mojo_interface_tag"),
+          NULL) || ")",
       descendant.name) AS descendant_name,
     descendant.parent_id As descendant_parent_id,
     descendant.depth AS descendant_depth,
+    descendant.category AS descendant_category,
     base.*
   FROM
     blocking_tasks_queuing_delay base LEFT JOIN
@@ -225,6 +231,7 @@
     track_id,
     trace_id,
     name,
+    category,
     scroll_slice_id AS scroll_id,
     scroll_ts,
     scroll_dur,
@@ -277,12 +284,73 @@
       ELSE
         NULL
       END
-    , "-") AS descendant_cpu_time
+    , "-") AS descendant_cpu_time,
+    GROUP_CONCAT(
+      CASE WHEN descendant_category = "mojom" THEN
+        descendant_name
+      ELSE
+        NULL
+      END
+    , "-") AS mojom_name,
+    GROUP_CONCAT(
+      CASE WHEN
+        descendant_category = "toplevel" AND
+        descendant_name NOT GLOB "*ThreadController*" THEN
+          descendant_name
+      ELSE
+          NULL
+      END
+    , "-") AS toplevel_name,
+    GROUP_CONCAT(
+      CASE WHEN descendant_category = "Java" THEN
+        descendant_name
+      ELSE
+        NULL
+      END
+    , "-") AS java_name
   FROM
     blocking_tasks_queuing_delay_with_invalid_depth
-  GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
+  GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
   ORDER BY descendant_cpu_percentage DESC;
 
+
+SELECT CREATE_FUNCTION(
+  -- Function prototype: takes a '-' separated list of slice names (formed by
+  -- the GROUP_CONCAT above) and returns the first slice if any or NULL
+  -- otherwise.
+  'GetFirstSliceNameOrNull(name STRING)',
+  -- Returns the first slice name or NULL
+  'STRING',
+  -- Preforms the actual string modification, takes the either the whole string
+  -- if there is no '-' or up to the first '-'. SUBSTR returns NULL if $name is
+  -- NULL.
+  'SELECT SUBSTR($name, 0,
+    CASE WHEN INSTR($name, "-") = 0 THEN
+      LENGTH($name)+1 ELSE
+      INSTR($name, "-")
+    END)'
+);
+
+SELECT CREATE_FUNCTION(
+  -- Function prototype: takes slice name, category and descendant_name and
+  -- determines if this event should be classified as unknown or not.
+  'UnknownEventOrEmptyString(name STRING, cat STRING, has_descendant STRING)',
+  -- Returns either "-UnknownEvent" or "".
+  'STRING',
+  -- If our current event has a posted from we consider it already categorized
+  -- even if we don't have events underneath it. If its java often we won't have
+  -- sub events, and finally if its a single event we just use its name there
+  -- isn't anything under to use so just leave it at that.
+  'SELECT
+    CASE WHEN
+      $name = "ThreadControllerImpl::RunTask" OR
+      $cat = "Java" OR
+      $has_descendant IS NULL THEN
+        "" ELSE
+        "-UnknownEvent"
+      END'
+);
+
 -- Create a common name for each "cause" based on the slice stack we found.
 DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay_temp;
 CREATE VIEW scroll_jank_cause_queuing_delay_temp AS
@@ -292,7 +360,16 @@
     ELSE
       name
     END || COALESCE("-" || descendant_name, "") AS location,
-
+    CASE WHEN name = "ThreadControllerImpl::RunTask" THEN
+      'posted-from-' || function || '()-in-' || file
+    ELSE
+      name
+    END || COALESCE(
+      "-" || GetFirstSliceNameOrNull(mojom_name),
+      "-" || GetFirstSliceNameOrNull(toplevel_name),
+      "-" || GetFirstSliceNameOrNull(java_name),
+      UnknownEventOrEmptyString(name, category, descendant_name)
+    ) AS restricted_location,
     base.*
   FROM descendant_blocking_tasks_queuing_delay base;
 
@@ -307,10 +384,22 @@
   WHERE NOT jank
   GROUP BY 1;
 
+-- Again figure out the average time, but based on a more restricted set of
+-- trace events.
+DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay_average_no_jank_time_restricted;
+CREATE VIEW scroll_jank_cause_queuing_delay_average_no_jank_time_restricted AS
+  SELECT
+    restricted_location,
+    AVG(dur_overlapping_ns) as avg_dur_overlapping_ns_restricted
+  FROM scroll_jank_cause_queuing_delay_temp
+  WHERE NOT jank
+  GROUP BY 1;
+
+
 -- Join every row (jank and non-jank with the average non-jank time for the
 -- given metric_name).
-DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay;
-CREATE VIEW scroll_jank_cause_queuing_delay AS
+DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay_unannotated;
+CREATE VIEW scroll_jank_cause_queuing_delay_unannotated AS
   SELECT
     base.*,
     'InputLatency.LatencyInfo.Flow.QueuingDelay.' ||
@@ -321,4 +410,19 @@
   FROM
     scroll_jank_cause_queuing_delay_temp base LEFT JOIN
     scroll_jank_cause_queuing_delay_average_no_jank_time avg_no_jank ON
-        base.location = avg_no_jank.location;
\ No newline at end of file
+        base.location = avg_no_jank.location;
+
+-- Join in the restricted set of trace events average as well to form the final output.
+DROP VIEW IF EXISTS scroll_jank_cause_queuing_delay;
+CREATE VIEW scroll_jank_cause_queuing_delay AS
+  SELECT
+    base.*,
+    'QueuingDelay.' ||
+    CASE WHEN jank THEN 'Jank' ELSE 'NoJank' END || '.BlockingTasksUs.' ||
+      base.restricted_location AS restricted_metric_name,
+    COALESCE(avg_no_jank.avg_dur_overlapping_ns_restricted, 0)
+        AS avg_no_jank_dur_overlapping_ns_restricted
+  FROM
+    scroll_jank_cause_queuing_delay_unannotated base LEFT JOIN
+    scroll_jank_cause_queuing_delay_average_no_jank_time_restricted avg_no_jank ON
+        base.restricted_location = avg_no_jank.restricted_location;
diff --git a/test/trace_processor/chrome/index b/test/trace_processor/chrome/index
index 5b9cc73..019067a 100644
--- a/test/trace_processor/chrome/index
+++ b/test/trace_processor/chrome/index
@@ -11,6 +11,7 @@
 ../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_queuing_delay.sql scroll_flow_event_queuing_delay.out
 ../../data/chrome_scroll_without_vsync.pftrace scroll_flow_event_queuing_delay_general_validation.sql scroll_flow_event_general_validation.out
 ../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay.sql scroll_jank_cause_queuing_delay.out
+../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay_restricted.sql scroll_jank_cause_queuing_delay_restricted.out
 ../../data/chrome_scroll_without_vsync.pftrace scroll_jank_cause_queuing_delay_general_validation.sql scroll_jank_cause_queuing_delay_general_validation.out
 ../../data/chrome_scroll_without_vsync.pftrace chrome_thread_slice.sql chrome_thread_slice.out
 ../track_event/track_event_counters.textproto chrome_thread_slice_repeated.sql chrome_thread_slice_repeated.out
diff --git a/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted.out b/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted.out
new file mode 100644
index 0000000..4049795
--- /dev/null
+++ b/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted.out
@@ -0,0 +1,25 @@
+
+"process_name","thread_name","trace_id","jank","dur_overlapping_ns","restricted_metric_name"
+"Browser","CrProcessMain",2918,0,55000,"QueuingDelay.NoJank.BlockingTasksUs.GestureProvider::OnTouchEvent"
+"Browser","CrProcessMain",2918,0,433000,"QueuingDelay.NoJank.BlockingTasksUs.RenderWidgetHostImpl::ForwardTouchEvent-UnknownEvent"
+"Renderer","Compositor",2918,0,66000,"QueuingDelay.NoJank.BlockingTasksUs.WidgetInputHandlerImpl::DispatchNonBlockingEvent-UnknownEvent"
+"Renderer","Compositor",2918,0,116000,"QueuingDelay.NoJank.BlockingTasksUs.WidgetInputHandlerImpl::DispatchEvent-UnknownEvent"
+"Renderer","Compositor",2918,0,29000,"QueuingDelay.NoJank.BlockingTasksUs.WidgetInputHandlerImpl::DispatchNonBlockingEvent-UnknownEvent"
+"Renderer","Compositor",2918,0,7000,"QueuingDelay.NoJank.BlockingTasksUs.ScrollPredictor::ResampleScrollEvents"
+"Renderer","Compositor",2918,0,25000,"QueuingDelay.NoJank.BlockingTasksUs.InputHandlerProxy::HandleGestureScrollUpdate-UnknownEvent"
+"Renderer","Compositor",2918,0,6000,"QueuingDelay.NoJank.BlockingTasksUs.LatencyInfo.Flow"
+"Gpu","VizCompositorThread",2918,0,10000,"QueuingDelay.NoJank.BlockingTasksUs.LatencyInfo.Flow"
+"Browser","CrProcessMain",2926,1,52000,"QueuingDelay.Jank.BlockingTasksUs.InputRouterImpl::GestureEventHandled-UnknownEvent"
+"Browser","CrProcessMain",2926,1,17000,"QueuingDelay.Jank.BlockingTasksUs.GestureProvider::OnTouchEvent"
+"Renderer","Compositor",2926,1,1208,"QueuingDelay.Jank.BlockingTasksUs.WidgetInputHandlerImpl::DispatchNonBlockingEvent-UnknownEvent"
+"Renderer","Compositor",2926,1,38000,"QueuingDelay.Jank.BlockingTasksUs.WidgetInputHandlerImpl::DispatchNonBlockingEvent-UnknownEvent"
+"Renderer","Compositor",2926,1,21000,"QueuingDelay.Jank.BlockingTasksUs.WidgetInputHandlerImpl::DispatchEvent-UnknownEvent"
+"Renderer","Compositor",2926,1,6000,"QueuingDelay.Jank.BlockingTasksUs.ScrollPredictor::ResampleScrollEvents"
+"Renderer","Compositor",2926,1,30000,"QueuingDelay.Jank.BlockingTasksUs.InputHandlerProxy::HandleGestureScrollUpdate-UnknownEvent"
+"Renderer","Compositor",2926,1,14000,"QueuingDelay.Jank.BlockingTasksUs.WidgetInputHandlerManager::DidHandleInputEventSentToCompositor-UnknownEvent"
+"Gpu","VizCompositorThread",2926,1,2000,"QueuingDelay.Jank.BlockingTasksUs.LatencyInfo.Flow"
+"Gpu","VizCompositorThread",2926,1,5000,"QueuingDelay.Jank.BlockingTasksUs.LatencyInfo.Flow"
+"Gpu","VizCompositorThread",2926,1,8000,"QueuingDelay.Jank.BlockingTasksUs.LatencyInfo.Flow"
+"Gpu","VizCompositorThread",2926,1,2000,"QueuingDelay.Jank.BlockingTasksUs.LatencyInfo.Flow"
+"Gpu","VizCompositorThread",2926,1,8000,"QueuingDelay.Jank.BlockingTasksUs.LatencyInfo.Flow"
+"Gpu","VizCompositorThread",2926,1,2000,"QueuingDelay.Jank.BlockingTasksUs.LatencyInfo.Flow"
diff --git a/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted.sql b/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted.sql
new file mode 100644
index 0000000..7c8b59a
--- /dev/null
+++ b/test/trace_processor/chrome/scroll_jank_cause_queuing_delay_restricted.sql
@@ -0,0 +1,27 @@
+--
+-- Copyright 2020 The Android Open Source Project
+--
+-- Licensed under the Apache License, Version 2.0 (the 'License');
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--     https://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an 'AS IS' BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+SELECT RUN_METRIC('chrome/scroll_jank_cause_queuing_delay.sql')
+    AS suppress_query_output;
+
+SELECT
+  process_name,
+  thread_name,
+  trace_id,
+  jank,
+  dur_overlapping_ns,
+  restricted_metric_name
+FROM scroll_jank_cause_queuing_delay
+WHERE trace_id = 2918 OR trace_id = 2926
+ORDER BY trace_id ASC, ts ASC