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