aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2024-05-08 22:19:25 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-08 22:19:25 +0000
commit53dd8e309607e80ba27c58bc91106b1c6fb1a30d (patch)
tree9a89c03408da6dc51e44efc0d1d1f870afc391e3
parent2d6e25315fdad99cda99135ffe6e4087af205866 (diff)
parentf9756c6efa06d9b9adbf9ead3da0683b748c34c6 (diff)
downloadperfetto-main.tar.gz
Merge changes I19edf3b1,I8509f064 into mainHEADmastermain
* changes: Interpret nr_state in the cellular connection track Add a safe non-negative dur for battery_stats
-rw-r--r--src/trace_processor/perfetto_sql/stdlib/android/battery_stats.sql10
-rw-r--r--test/trace_processor/diff_tests/stdlib/android/android_battery_stats_event_slices.out8
-rw-r--r--test/trace_processor/diff_tests/stdlib/android/tests.py8
-rw-r--r--ui/src/plugins/dev.perfetto.AndroidLongBatteryTracing/index.ts39
4 files changed, 49 insertions, 16 deletions
diff --git a/src/trace_processor/perfetto_sql/stdlib/android/battery_stats.sql b/src/trace_processor/perfetto_sql/stdlib/android/battery_stats.sql
index ff6902916..9431896f1 100644
--- a/src/trace_processor/perfetto_sql/stdlib/android/battery_stats.sql
+++ b/src/trace_processor/perfetto_sql/stdlib/android/battery_stats.sql
@@ -119,8 +119,10 @@ SELECT
CREATE PERFETTO VIEW android_battery_stats_state(
-- Timestamp in nanoseconds.
ts INT,
- -- The duration the state was active.
+ -- The duration the state was active, may be negative for incomplete slices.
dur INT,
+ -- The same as `dur`, but extends to trace end for incomplete slices.
+ safe_dur INT,
-- The name of the counter track.
track_name STRING,
-- The counter value as a number.
@@ -131,6 +133,7 @@ CREATE PERFETTO VIEW android_battery_stats_state(
SELECT
ts,
IFNULL(LEAD(ts) OVER (PARTITION BY name ORDER BY ts) - ts, -1) AS dur,
+ LEAD(ts, 1, TRACE_END()) OVER (PARTITION BY name ORDER BY ts) - ts AS safe_dur,
name AS track_name,
CAST(value AS INT64) AS value,
android_battery_stats_counter_to_string(name, value) AS value_name
@@ -160,8 +163,10 @@ WHERE counter_track.name GLOB 'battery_stats.*';
CREATE PERFETTO VIEW android_battery_stats_event_slices(
-- Timestamp in nanoseconds.
ts INT,
- -- The duration the state was active.
+ -- The duration the state was active, may be negative for incomplete slices.
dur INT,
+ -- The same as `dur`, but extends to trace end for incomplete slices.
+ safe_dur INT,
-- The name of the counter track.
track_name STRING,
-- String value.
@@ -208,6 +213,7 @@ WITH
SELECT
ts,
IFNULL(end_ts-ts, -1) AS dur,
+ IFNULL(end_ts, TRACE_END()) - ts AS safe_dur,
track_name,
str_split(key, '"', 1) AS str_value,
CAST(str_split(key, ':', 0) AS INT64) AS int_value
diff --git a/test/trace_processor/diff_tests/stdlib/android/android_battery_stats_event_slices.out b/test/trace_processor/diff_tests/stdlib/android/android_battery_stats_event_slices.out
index 82cd36c91..fc2247611 100644
--- a/test/trace_processor/diff_tests/stdlib/android/android_battery_stats_event_slices.out
+++ b/test/trace_processor/diff_tests/stdlib/android/android_battery_stats_event_slices.out
@@ -1,4 +1,4 @@
-"ts","dur","track_name","str_value","int_value"
-1000,8000,"battery_stats.top","mail",123
-3000,-1,"battery_stats.job","mail_job",456
-1000,3000,"battery_stats.job","video_job",789
+"ts","dur","safe_dur","track_name","str_value","int_value"
+1000,8000,8000,"battery_stats.top","mail",123
+3000,-1,6000,"battery_stats.job","mail_job",456
+1000,3000,3000,"battery_stats.job","video_job",789
diff --git a/test/trace_processor/diff_tests/stdlib/android/tests.py b/test/trace_processor/diff_tests/stdlib/android/tests.py
index 9542f22cc..59a8877a9 100644
--- a/test/trace_processor/diff_tests/stdlib/android/tests.py
+++ b/test/trace_processor/diff_tests/stdlib/android/tests.py
@@ -106,10 +106,10 @@ class AndroidStdlib(TestSuite):
ORDER BY ts, track_name;
""",
out=Csv("""
- "ts","dur","track_name","value","value_name"
- 1000,-1,"battery_stats.audio",1,"active"
- 1000,3000,"battery_stats.data_conn",13,"4G (LTE)"
- 4000,-1,"battery_stats.data_conn",20,"5G (NR)"
+ "ts","dur","safe_dur","track_name","value","value_name"
+ 1000,-1,3000,"battery_stats.audio",1,"active"
+ 1000,3000,3000,"battery_stats.data_conn",13,"4G (LTE)"
+ 4000,-1,0,"battery_stats.data_conn",20,"5G (NR)"
"""))
def test_anrs(self):
diff --git a/ui/src/plugins/dev.perfetto.AndroidLongBatteryTracing/index.ts b/ui/src/plugins/dev.perfetto.AndroidLongBatteryTracing/index.ts
index 414a6620e..2a22affc5 100644
--- a/ui/src/plugins/dev.perfetto.AndroidLongBatteryTracing/index.ts
+++ b/ui/src/plugins/dev.perfetto.AndroidLongBatteryTracing/index.ts
@@ -51,6 +51,33 @@ const DEFAULT_NETWORK = `
end as name
from diff where keep is null or keep`;
+const RADIO_TRANSPORT_TYPE = `
+ create or replace perfetto view radio_transport_data_conn as
+ select ts, safe_dur AS dur, value_name as data_conn, value AS data_conn_val
+ from android_battery_stats_state
+ where track_name = "battery_stats.data_conn";
+
+ create or replace perfetto view radio_transport_nr_state as
+ select ts, safe_dur AS dur, value AS nr_state_val
+ from android_battery_stats_state
+ where track_name = "battery_stats.nr_state";
+
+ drop table if exists radio_transport_join;
+ create virtual table radio_transport_join
+ using span_left_join(radio_transport_data_conn, radio_transport_nr_state);
+
+ create or replace perfetto view radio_transport as
+ select
+ ts, dur,
+ case data_conn_val
+ -- On LTE with NR connected is 5G NSA.
+ when 13 then iif(nr_state_val = 3, '5G (NSA)', data_conn)
+ -- On NR with NR state present, is 5G SA.
+ when 20 then iif(nr_state_val is null, '5G (SA or NSA)', '5G (SA)')
+ else data_conn
+ end as name
+ from radio_transport_join;`;
+
const TETHERING = `
with base as (
select
@@ -1144,7 +1171,7 @@ class AndroidLongBatteryTracing implements Plugin {
this.addSliceTrack(
ctx,
name,
- `SELECT ts, dur, value_name AS name
+ `SELECT ts, safe_dur AS dur, value_name AS name
FROM android_battery_stats_state
WHERE track_name = "${track}"`,
groupName,
@@ -1165,7 +1192,7 @@ class AndroidLongBatteryTracing implements Plugin {
this.addSliceTrack(
ctx,
name,
- `SELECT ts, dur, str_value AS name
+ `SELECT ts, safe_dur AS dur, str_value AS name
FROM android_battery_stats_event_slices
WHERE track_name = "${track}"`,
groupName,
@@ -1201,7 +1228,7 @@ class AndroidLongBatteryTracing implements Plugin {
'Device State: Long wakelocks',
`SELECT
ts - 60000000000 as ts,
- dur + 60000000000 as dur,
+ safe_dur + 60000000000 as dur,
str_value AS name,
ifnull(
(select package_name from package_list where uid = int_value % 100000),
@@ -1236,6 +1263,7 @@ class AndroidLongBatteryTracing implements Plugin {
const e = ctx.engine;
await e.query(NETWORK_SUMMARY);
+ await e.query(RADIO_TRANSPORT_TYPE);
this.addSliceTrack(ctx, 'Default network', DEFAULT_NETWORK, groupName);
@@ -1295,12 +1323,11 @@ class AndroidLongBatteryTracing implements Plugin {
groupName,
features,
);
- this.addBatteryStatsState(
+ this.addSliceTrack(
ctx,
'Cellular connection',
- 'battery_stats.data_conn',
+ `select ts, dur, name from radio_transport`,
groupName,
- features,
);
this.addBatteryStatsState(
ctx,