Add slow_start_thresholds.sql to get thresholds.
1. Threshold data for different classes of device type, number of cpus or memory size will be added.
2. Methods to fetch thresholds will be expanded to select the appropriate one.
Change-Id: I53060bb0d6baf178ee642605aded661394de4287
diff --git a/Android.bp b/Android.bp
index b689919..c55d11e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -13132,6 +13132,7 @@
"src/trace_processor/metrics/sql/android/startup/mcycles_per_launch.sql",
"src/trace_processor/metrics/sql/android/startup/slice_functions.sql",
"src/trace_processor/metrics/sql/android/startup/slow_start_reasons.sql",
+ "src/trace_processor/metrics/sql/android/startup/slow_start_thresholds.sql",
"src/trace_processor/metrics/sql/android/startup/system_state.sql",
"src/trace_processor/metrics/sql/android/startup/thread_state_breakdown.sql",
"src/trace_processor/metrics/sql/android/sysui_notif_shade_list_builder_metric.sql",
diff --git a/BUILD b/BUILD
index bee4ad4..38aec5b 100644
--- a/BUILD
+++ b/BUILD
@@ -2243,6 +2243,7 @@
"src/trace_processor/metrics/sql/android/startup/mcycles_per_launch.sql",
"src/trace_processor/metrics/sql/android/startup/slice_functions.sql",
"src/trace_processor/metrics/sql/android/startup/slow_start_reasons.sql",
+ "src/trace_processor/metrics/sql/android/startup/slow_start_thresholds.sql",
"src/trace_processor/metrics/sql/android/startup/system_state.sql",
"src/trace_processor/metrics/sql/android/startup/thread_state_breakdown.sql",
"src/trace_processor/metrics/sql/android/sysui_notif_shade_list_builder_metric.sql",
diff --git a/src/trace_processor/metrics/sql/android/BUILD.gn b/src/trace_processor/metrics/sql/android/BUILD.gn
index 04f3116..a10366b 100644
--- a/src/trace_processor/metrics/sql/android/BUILD.gn
+++ b/src/trace_processor/metrics/sql/android/BUILD.gn
@@ -137,6 +137,7 @@
"startup/mcycles_per_launch.sql",
"startup/slice_functions.sql",
"startup/slow_start_reasons.sql",
+ "startup/slow_start_thresholds.sql",
"startup/system_state.sql",
"startup/thread_state_breakdown.sql",
"sysui_notif_shade_list_builder_metric.sql",
diff --git a/src/trace_processor/metrics/sql/android/startup/slow_start_reasons.sql b/src/trace_processor/metrics/sql/android/startup/slow_start_reasons.sql
index 82c5cbe..5743dfd 100644
--- a/src/trace_processor/metrics/sql/android/startup/slow_start_reasons.sql
+++ b/src/trace_processor/metrics/sql/android/startup/slow_start_reasons.sql
@@ -19,6 +19,8 @@
SELECT RUN_METRIC('android/startup/thread_state_breakdown.sql');
SELECT RUN_METRIC('android/startup/system_state.sql');
SELECT RUN_METRIC('android/startup/mcycles_per_launch.sql');
+-- Define helper functions related to slow start thresholds
+SELECT RUN_METRIC('android/startup/slow_start_thresholds.sql');
CREATE OR REPLACE PERFETTO FUNCTION _is_spans_overlapping(
ts1 LONG,
@@ -411,7 +413,7 @@
'MAIN_THREAD_TIME_SPENT_IN_RUNNABLE' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 15,
+ 'value', threshold_runnable_percentage(),
'unit', 'PERCENTAGE',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -423,7 +425,8 @@
NULL as extra
FROM android_startups launch
WHERE launch.startup_id = $startup_id
- AND main_thread_time_for_launch_in_runnable_state(launch.startup_id) > launch.dur * 0.15
+ AND main_thread_time_for_launch_in_runnable_state(launch.startup_id) >
+ launch.dur / 100 * threshold_runnable_percentage()
UNION ALL
SELECT 'Main Thread - Time spent in interruptible sleep state' as slow_cause,
@@ -431,7 +434,7 @@
'MAIN_THREAD_TIME_SPENT_IN_INTERRUPTIBLE_SLEEP' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 2900000000,
+ 'value', threshold_interruptible_sleep_ns(),
'unit', 'NS',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -441,7 +444,8 @@
NULL as extra
FROM android_startups launch
WHERE launch.startup_id = $startup_id
- AND main_thread_time_for_launch_and_state(launch.startup_id, 'S') > 2900e6
+ AND main_thread_time_for_launch_and_state(launch.startup_id, 'S') >
+ threshold_interruptible_sleep_ns()
UNION ALL
SELECT 'Main Thread - Time spent in Blocking I/O' as slow_cause,
@@ -449,7 +453,7 @@
'MAIN_THREAD_TIME_SPENT_IN_BLOCKING_IO' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 450000000,
+ 'value', threshold_blocking_io_ns(),
'unit', 'NS',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -461,7 +465,8 @@
NULL as extra
FROM android_startups launch
WHERE launch.startup_id = $startup_id
- AND main_thread_time_for_launch_state_and_io_wait(launch.startup_id, 'D*', TRUE) > 450e6
+ AND main_thread_time_for_launch_state_and_io_wait(launch.startup_id, 'D*', TRUE) >
+ threshold_blocking_io_ns()
UNION ALL
SELECT 'Main Thread - Time spent in OpenDexFilesFromOat*' as slow_cause,
@@ -469,7 +474,7 @@
'MAIN_THREAD_TIME_SPENT_IN_OPEN_DEX_FILES_FROM_OAT' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 20,
+ 'value', threshold_open_dex_files_from_oat_percentage(),
'unit', 'PERCENTAGE',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -484,7 +489,8 @@
FROM android_startups launch
WHERE launch.startup_id = $startup_id AND
android_sum_dur_on_main_thread_for_startup_and_slice(
- launch.startup_id, 'OpenDexFilesFromOat*') > launch.dur * 0.2
+ launch.startup_id, 'OpenDexFilesFromOat*') >
+ launch.dur / 100 * threshold_open_dex_files_from_oat_percentage()
UNION ALL
SELECT 'Time spent in bindApplication' as slow_cause,
@@ -492,7 +498,7 @@
'TIME_SPENT_IN_BIND_APPLICATION' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 1250000000,
+ 'value', threshold_bind_application_ns(),
'unit', 'NS',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -504,7 +510,8 @@
NULL as extra
FROM android_startups launch
WHERE launch.startup_id = $startup_id
- AND android_sum_dur_for_startup_and_slice(launch.startup_id, 'bindApplication') > 1250e6
+ AND android_sum_dur_for_startup_and_slice(launch.startup_id, 'bindApplication') >
+ threshold_bind_application_ns()
UNION ALL
SELECT 'Time spent in view inflation' as slow_cause,
@@ -512,7 +519,7 @@
'TIME_SPENT_IN_VIEW_INFLATION' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 450000000,
+ 'value', threshold_view_inflation_ns(),
'unit', 'NS',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -524,7 +531,8 @@
NULL as extra
FROM android_startups launch
WHERE launch.startup_id = $startup_id
- AND android_sum_dur_for_startup_and_slice(launch.startup_id, 'inflate') > 450e6
+ AND android_sum_dur_for_startup_and_slice(launch.startup_id, 'inflate') >
+ threshold_view_inflation_ns()
UNION ALL
SELECT 'Time spent in ResourcesManager#getResources' as slow_cause,
@@ -532,7 +540,7 @@
'TIME_SPENT_IN_RESOURCES_MANAGER_GET_RESOURCES' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 130000000,
+ 'value', threshold_resources_manager_get_resources_ns(),
'unit', 'NS',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -545,7 +553,8 @@
FROM android_startups launch
WHERE launch.startup_id = $startup_id
AND android_sum_dur_for_startup_and_slice(
- launch.startup_id, 'ResourcesManager#getResources') > 130e6
+ launch.startup_id, 'ResourcesManager#getResources') >
+ threshold_resources_manager_get_resources_ns()
UNION ALL
SELECT 'Time spent verifying classes' as slow_cause,
@@ -553,7 +562,7 @@
'TIME_SPENT_VERIFYING_CLASSES' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 15,
+ 'value', threshold_verify_classes_percentage(),
'unit', 'PERCENTAGE',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -568,7 +577,7 @@
FROM android_startups launch
WHERE launch.startup_id = $startup_id AND
android_sum_dur_for_startup_and_slice(launch.startup_id, 'VerifyClass*')
- > launch.dur * 0.15
+ > launch.dur / 100 * threshold_verify_classes_percentage()
UNION ALL
SELECT 'Potential CPU contention with another process' AS slow_cause,
@@ -576,7 +585,7 @@
'POTENTIAL_CPU_CONTENTION_WITH_ANOTHER_PROCESS' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 100000000,
+ 'value', threshold_potential_cpu_contention_ns(),
'unit', 'NS',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -587,7 +596,8 @@
NULL as extra
FROM android_startups launch
WHERE launch.startup_id = $startup_id AND
- main_thread_time_for_launch_in_runnable_state(launch.startup_id) > 100e6 AND
+ main_thread_time_for_launch_in_runnable_state(launch.startup_id) >
+ threshold_potential_cpu_contention_ns() AND
most_active_process_for_launch(launch.startup_id) IS NOT NULL
UNION ALL
@@ -596,7 +606,7 @@
'JIT_ACTIVITY' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 100000000,
+ 'value', threshold_jit_activity_ns(),
'unit', 'NS',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -612,7 +622,7 @@
launch.startup_id,
'Running',
'Jit thread pool'
- ) > 100e6
+ ) > threshold_jit_activity_ns()
UNION ALL
SELECT 'Main Thread - Lock contention' as slow_cause,
@@ -620,7 +630,7 @@
'MAIN_THREAD_LOCK_CONTENTION' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 20,
+ 'value', threshold_lock_contention_percentage(),
'unit', 'PERCENTAGE',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -637,7 +647,7 @@
AND android_sum_dur_on_main_thread_for_startup_and_slice(
launch.startup_id,
'Lock contention on*'
- ) > launch.dur * 0.2
+ ) > launch.dur / 100 * threshold_lock_contention_percentage()
UNION ALL
SELECT 'Main Thread - Monitor contention' as slow_cause,
@@ -645,7 +655,7 @@
'MAIN_THREAD_MONITOR_CONTENTION' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 15,
+ 'value', threshold_monitor_contention_percentage(),
'unit', 'PERCENTAGE',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -662,7 +672,7 @@
AND android_sum_dur_on_main_thread_for_startup_and_slice(
launch.startup_id,
'Lock contention on a monitor*'
- ) > launch.dur * 0.15
+ ) > launch.dur / 100 * threshold_monitor_contention_percentage()
UNION ALL
SELECT 'JIT compiled methods' as slow_cause,
@@ -670,7 +680,7 @@
'JIT_COMPILED_METHODS' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 65,
+ 'value', threshold_jit_compiled_methods_count(),
'unit', 'COUNT',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -686,7 +696,7 @@
AND (
SELECT COUNT(1)
FROM ANDROID_SLICES_FOR_STARTUP_AND_SLICE_NAME(launch.startup_id, 'JIT compiling*')
- WHERE thread_name = 'Jit thread pool') > 65
+ WHERE thread_name = 'Jit thread pool') > threshold_jit_compiled_methods_count()
UNION ALL
SELECT 'Broadcast dispatched count' as slow_cause,
@@ -694,7 +704,7 @@
'BROADCAST_DISPATCHED_COUNT' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 15,
+ 'value', threshold_broadcast_dispatched_count(),
'unit', 'COUNT',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -708,7 +718,7 @@
WHERE launch.startup_id = $startup_id
AND count_slices_concurrent_to_launch(
launch.startup_id,
- 'Broadcast dispatched*') > 15
+ 'Broadcast dispatched*') > threshold_broadcast_dispatched_count()
UNION ALL
SELECT 'Broadcast received count' as slow_cause,
@@ -716,7 +726,7 @@
'BROADCAST_RECEIVED_COUNT' as reason_id,
'WARNING' as severity,
AndroidStartupMetric_ThresholdValue(
- 'value', 50,
+ 'value', threshold_broadcast_received_count(),
'unit', 'COUNT',
'higher_expected', FALSE) as expected_val,
AndroidStartupMetric_ActualValue(
@@ -730,7 +740,7 @@
WHERE launch.startup_id = $startup_id
AND count_slices_concurrent_to_launch(
launch.startup_id,
- 'broadcastReceiveReg*') > 50
+ 'broadcastReceiveReg*') > threshold_broadcast_received_count()
UNION ALL
SELECT 'Startup running concurrent to launch' as slow_cause,
diff --git a/src/trace_processor/metrics/sql/android/startup/slow_start_thresholds.sql b/src/trace_processor/metrics/sql/android/startup/slow_start_thresholds.sql
new file mode 100644
index 0000000..f8ef31b
--- /dev/null
+++ b/src/trace_processor/metrics/sql/android/startup/slow_start_thresholds.sql
@@ -0,0 +1,111 @@
+--
+-- Copyright 2022 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.
+--
+
+INCLUDE PERFETTO MODULE android.startup.startups;
+
+DROP VIEW IF EXISTS slow_start_thresholds;
+CREATE PERFETTO VIEW slow_start_thresholds AS
+SELECT
+ 15 AS runnable_percentage,
+ 2900000000 AS interruptible_sleep_ns,
+ 450000000 AS blocking_io_ns,
+ 20 AS open_dex_files_from_oat_percentage,
+ 1250000000 AS bind_application_ns,
+ 450000000 AS view_inflation_ns,
+ 130000000 AS resources_manager_get_resources_ns,
+ 15 AS verify_classes_percentage,
+ 100000000 AS potential_cpu_contention_ns,
+ 100000000 AS jit_activity_ns,
+ 20 AS lock_contention_percentage,
+ 15 AS monitor_contention_percentage,
+ 65 AS jit_compiled_methods_count,
+ 15 AS broadcast_dispatched_count,
+ 50 AS broadcast_received_count;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_runnable_percentage()
+RETURNS INT AS
+ SELECT runnable_percentage
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_interruptible_sleep_ns()
+RETURNS INT AS
+ SELECT interruptible_sleep_ns
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_blocking_io_ns()
+RETURNS INT AS
+ SELECT blocking_io_ns
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_open_dex_files_from_oat_percentage()
+RETURNS INT AS
+ SELECT open_dex_files_from_oat_percentage
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_bind_application_ns()
+RETURNS INT AS
+ SELECT bind_application_ns
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_view_inflation_ns()
+RETURNS INT AS
+ SELECT view_inflation_ns
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_resources_manager_get_resources_ns()
+RETURNS INT AS
+ SELECT resources_manager_get_resources_ns
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_verify_classes_percentage()
+RETURNS INT AS
+ SELECT verify_classes_percentage
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_potential_cpu_contention_ns()
+RETURNS INT AS
+ SELECT potential_cpu_contention_ns
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_jit_activity_ns()
+RETURNS INT AS
+ SELECT jit_activity_ns
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_lock_contention_percentage()
+RETURNS INT AS
+ SELECT lock_contention_percentage
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_monitor_contention_percentage()
+RETURNS INT AS
+ SELECT monitor_contention_percentage
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_jit_compiled_methods_count()
+RETURNS INT AS
+ SELECT jit_compiled_methods_count
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_broadcast_dispatched_count()
+RETURNS INT AS
+ SELECT broadcast_dispatched_count
+ FROM slow_start_thresholds;
+
+CREATE OR REPLACE PERFETTO FUNCTION threshold_broadcast_received_count()
+RETURNS INT AS
+ SELECT broadcast_received_count
+ FROM slow_start_thresholds;