diff options
Diffstat (limited to 'src/trace_processor/metrics/sql/android/android_irq_runtime.sql')
-rw-r--r-- | src/trace_processor/metrics/sql/android/android_irq_runtime.sql | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/trace_processor/metrics/sql/android/android_irq_runtime.sql b/src/trace_processor/metrics/sql/android/android_irq_runtime.sql new file mode 100644 index 000000000..e69683c08 --- /dev/null +++ b/src/trace_processor/metrics/sql/android/android_irq_runtime.sql @@ -0,0 +1,123 @@ +-- +-- 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. + +DROP VIEW IF EXISTS irq_runtime_all; + +CREATE VIEW irq_runtime_all +AS +SELECT ts, dur, name +FROM slice +WHERE category = 'irq'; + +DROP VIEW IF EXISTS hw_irq_runtime; + +CREATE VIEW hw_irq_runtime +AS +SELECT ts, dur, name +FROM irq_runtime_all +WHERE name GLOB 'IRQ (*)' +ORDER BY dur DESC; + +DROP VIEW IF EXISTS hw_irq_runtime_statistics; + +CREATE VIEW hw_irq_runtime_statistics +AS +SELECT + MAX(dur) AS max_runtime, + COUNT(IIF(dur > 1e6, 1, NULL)) AS over_threshold_count, + COUNT(*) AS total_count +FROM hw_irq_runtime; + +DROP VIEW IF EXISTS sw_irq_runtime; + +CREATE VIEW sw_irq_runtime +AS +SELECT ts, dur, name +FROM irq_runtime_all +WHERE name NOT GLOB 'IRQ (*)' +ORDER BY dur DESC; + +CREATE VIEW sw_irq_runtime_statistics +AS +SELECT + MAX(dur) AS max_runtime, + COUNT(IIF(dur > 5e6, 1, NULL)) AS over_threshold_count, + COUNT(*) AS total_count +FROM sw_irq_runtime; + +DROP VIEW IF EXISTS android_irq_runtime_output; + +CREATE VIEW android_irq_runtime_output +AS +SELECT + AndroidIrqRuntimeMetric( + 'hw_irq', + ( + SELECT + AndroidIrqRuntimeMetric_IrqRuntimeMetric( + 'max_runtime', + max_runtime, + 'total_count', + total_count, + 'threshold_metric', + AndroidIrqRuntimeMetric_ThresholdMetric( + 'threshold', + '1ms', + 'over_threshold_count', + over_threshold_count, + 'anomaly_ratio', + CAST( + over_threshold_count AS DOUBLE) + / CAST( + total_count AS DOUBLE)), + 'longest_irq_slices', + ( + SELECT + RepeatedField( + AndroidIrqRuntimeMetric_IrqSlice( + 'irq_name', name, 'ts', ts, 'dur', dur)) + FROM (SELECT ts, dur, name FROM hw_irq_runtime LIMIT 10) + )) + FROM hw_irq_runtime_statistics + ), + 'sw_irq', + ( + SELECT + AndroidIrqRuntimeMetric_IrqRuntimeMetric( + 'max_runtime', + max_runtime, + 'total_count', + total_count, + 'threshold_metric', + AndroidIrqRuntimeMetric_ThresholdMetric( + 'threshold', + '5ms', + 'over_threshold_count', + over_threshold_count, + 'anomaly_ratio', + CAST( + over_threshold_count AS DOUBLE) + / CAST( + total_count AS DOUBLE)), + 'longest_irq_slices', + ( + SELECT + RepeatedField( + AndroidIrqRuntimeMetric_IrqSlice( + 'irq_name', name, 'ts', ts, 'dur', dur)) + FROM (SELECT ts, dur, name FROM sw_irq_runtime LIMIT 10) + )) + FROM sw_irq_runtime_statistics + )); |