metrics: Add energy to Wattson per rail metrics
Add mWs output to Wattson per rail metrics so that both per rail metrics
and per thread metrics are outputting both power (mW) and energy (mWs).
Bug: 376512804
Test: tools/diff_test_trace_processor.py out/linux/trace_processor_shell --name-filter '.*wattson.*'
Change-Id: If581bf4dad7721815ca9d01b25de0cf8ccbf0e02
Signed-off-by: Samuel Wu <wusamuel@google.com>
diff --git a/protos/perfetto/metrics/android/wattson_in_time_period.proto b/protos/perfetto/metrics/android/wattson_in_time_period.proto
index ce00e9c..495de8c 100644
--- a/protos/perfetto/metrics/android/wattson_in_time_period.proto
+++ b/protos/perfetto/metrics/android/wattson_in_time_period.proto
@@ -37,33 +37,37 @@
message AndroidWattsonCpuSubsystemEstimate {
// estimates and estimates of subrails
optional float estimated_mw = 1;
- optional AndroidWattsonPolicyEstimate policy0 = 2;
- optional AndroidWattsonPolicyEstimate policy1 = 3;
- optional AndroidWattsonPolicyEstimate policy2 = 4;
- optional AndroidWattsonPolicyEstimate policy3 = 5;
- optional AndroidWattsonPolicyEstimate policy4 = 6;
- optional AndroidWattsonPolicyEstimate policy5 = 7;
- optional AndroidWattsonPolicyEstimate policy6 = 8;
- optional AndroidWattsonPolicyEstimate policy7 = 9;
- optional AndroidWattsonDsuScuEstimate dsu_scu = 10;
+ optional float estimated_mws = 2;
+ optional AndroidWattsonPolicyEstimate policy0 = 3;
+ optional AndroidWattsonPolicyEstimate policy1 = 4;
+ optional AndroidWattsonPolicyEstimate policy2 = 5;
+ optional AndroidWattsonPolicyEstimate policy3 = 6;
+ optional AndroidWattsonPolicyEstimate policy4 = 7;
+ optional AndroidWattsonPolicyEstimate policy5 = 8;
+ optional AndroidWattsonPolicyEstimate policy6 = 9;
+ optional AndroidWattsonPolicyEstimate policy7 = 10;
+ optional AndroidWattsonDsuScuEstimate dsu_scu = 11;
}
message AndroidWattsonPolicyEstimate {
optional float estimated_mw = 1;
- optional AndroidWattsonCpuEstimate cpu0 = 2;
- optional AndroidWattsonCpuEstimate cpu1 = 3;
- optional AndroidWattsonCpuEstimate cpu2 = 4;
- optional AndroidWattsonCpuEstimate cpu3 = 5;
- optional AndroidWattsonCpuEstimate cpu4 = 6;
- optional AndroidWattsonCpuEstimate cpu5 = 7;
- optional AndroidWattsonCpuEstimate cpu6 = 8;
- optional AndroidWattsonCpuEstimate cpu7 = 9;
+ optional float estimated_mws = 2;
+ optional AndroidWattsonCpuEstimate cpu0 = 3;
+ optional AndroidWattsonCpuEstimate cpu1 = 4;
+ optional AndroidWattsonCpuEstimate cpu2 = 5;
+ optional AndroidWattsonCpuEstimate cpu3 = 6;
+ optional AndroidWattsonCpuEstimate cpu4 = 7;
+ optional AndroidWattsonCpuEstimate cpu5 = 8;
+ optional AndroidWattsonCpuEstimate cpu6 = 9;
+ optional AndroidWattsonCpuEstimate cpu7 = 10;
}
message AndroidWattsonCpuEstimate {
optional float estimated_mw = 1;
+ optional float estimated_mws = 2;
}
message AndroidWattsonDsuScuEstimate {
optional float estimated_mw = 1;
+ optional float estimated_mws = 2;
}
diff --git a/protos/perfetto/metrics/perfetto_merged_metrics.proto b/protos/perfetto/metrics/perfetto_merged_metrics.proto
index 5b104e3..8267654 100644
--- a/protos/perfetto/metrics/perfetto_merged_metrics.proto
+++ b/protos/perfetto/metrics/perfetto_merged_metrics.proto
@@ -2932,35 +2932,39 @@
message AndroidWattsonCpuSubsystemEstimate {
// estimates and estimates of subrails
optional float estimated_mw = 1;
- optional AndroidWattsonPolicyEstimate policy0 = 2;
- optional AndroidWattsonPolicyEstimate policy1 = 3;
- optional AndroidWattsonPolicyEstimate policy2 = 4;
- optional AndroidWattsonPolicyEstimate policy3 = 5;
- optional AndroidWattsonPolicyEstimate policy4 = 6;
- optional AndroidWattsonPolicyEstimate policy5 = 7;
- optional AndroidWattsonPolicyEstimate policy6 = 8;
- optional AndroidWattsonPolicyEstimate policy7 = 9;
- optional AndroidWattsonDsuScuEstimate dsu_scu = 10;
+ optional float estimated_mws = 2;
+ optional AndroidWattsonPolicyEstimate policy0 = 3;
+ optional AndroidWattsonPolicyEstimate policy1 = 4;
+ optional AndroidWattsonPolicyEstimate policy2 = 5;
+ optional AndroidWattsonPolicyEstimate policy3 = 6;
+ optional AndroidWattsonPolicyEstimate policy4 = 7;
+ optional AndroidWattsonPolicyEstimate policy5 = 8;
+ optional AndroidWattsonPolicyEstimate policy6 = 9;
+ optional AndroidWattsonPolicyEstimate policy7 = 10;
+ optional AndroidWattsonDsuScuEstimate dsu_scu = 11;
}
message AndroidWattsonPolicyEstimate {
optional float estimated_mw = 1;
- optional AndroidWattsonCpuEstimate cpu0 = 2;
- optional AndroidWattsonCpuEstimate cpu1 = 3;
- optional AndroidWattsonCpuEstimate cpu2 = 4;
- optional AndroidWattsonCpuEstimate cpu3 = 5;
- optional AndroidWattsonCpuEstimate cpu4 = 6;
- optional AndroidWattsonCpuEstimate cpu5 = 7;
- optional AndroidWattsonCpuEstimate cpu6 = 8;
- optional AndroidWattsonCpuEstimate cpu7 = 9;
+ optional float estimated_mws = 2;
+ optional AndroidWattsonCpuEstimate cpu0 = 3;
+ optional AndroidWattsonCpuEstimate cpu1 = 4;
+ optional AndroidWattsonCpuEstimate cpu2 = 5;
+ optional AndroidWattsonCpuEstimate cpu3 = 6;
+ optional AndroidWattsonCpuEstimate cpu4 = 7;
+ optional AndroidWattsonCpuEstimate cpu5 = 8;
+ optional AndroidWattsonCpuEstimate cpu6 = 9;
+ optional AndroidWattsonCpuEstimate cpu7 = 10;
}
message AndroidWattsonCpuEstimate {
optional float estimated_mw = 1;
+ optional float estimated_mws = 2;
}
message AndroidWattsonDsuScuEstimate {
optional float estimated_mw = 1;
+ optional float estimated_mws = 2;
}
// End of protos/perfetto/metrics/android/wattson_in_time_period.proto
diff --git a/python/perfetto/trace_processor/metrics.descriptor b/python/perfetto/trace_processor/metrics.descriptor
index 9c3e42c..9c22fd3 100644
--- a/python/perfetto/trace_processor/metrics.descriptor
+++ b/python/perfetto/trace_processor/metrics.descriptor
Binary files differ
diff --git a/src/trace_processor/metrics/sql/android/wattson_rail_relations.sql b/src/trace_processor/metrics/sql/android/wattson_rail_relations.sql
index 6c2dbbb..4c80ebb 100644
--- a/src/trace_processor/metrics/sql/android/wattson_rail_relations.sql
+++ b/src/trace_processor/metrics/sql/android/wattson_rail_relations.sql
@@ -79,46 +79,76 @@
period_id,
period_dur,
cast_double!(IIF(is_defined, sum_mw, NULL)) as estimated_mw,
+ cast_double!(
+ IIF(is_defined, sum_mw * period_dur / 1e9, NULL)
+ ) as estimated_mws,
AndroidWattsonPolicyEstimate(
'estimated_mw', cast_double!(IIF(is_defined, sum_mw, NULL)),
+ 'estimated_mws', cast_double!(
+ IIF(is_defined, sum_mw * period_dur / 1e9, NULL)
+ ),
'cpu0', IIF(
cpu0_mw,
- AndroidWattsonCpuEstimate('estimated_mw', cpu0_mw),
+ AndroidWattsonCpuEstimate(
+ 'estimated_mw', cpu0_mw,
+ 'estimated_mws', cpu0_mw * period_dur / 1e9
+ ),
NULL
),
'cpu1', IIF(
cpu1_mw,
- AndroidWattsonCpuEstimate('estimated_mw', cpu1_mw),
+ AndroidWattsonCpuEstimate(
+ 'estimated_mw', cpu1_mw,
+ 'estimated_mws', cpu1_mw * period_dur / 1e9
+ ),
NULL
),
'cpu2', IIF(
cpu2_mw,
- AndroidWattsonCpuEstimate('estimated_mw', cpu2_mw),
+ AndroidWattsonCpuEstimate(
+ 'estimated_mw', cpu2_mw,
+ 'estimated_mws', cpu2_mw * period_dur / 1e9
+ ),
NULL
),
'cpu3', IIF(
cpu3_mw,
- AndroidWattsonCpuEstimate('estimated_mw', cpu3_mw),
+ AndroidWattsonCpuEstimate(
+ 'estimated_mw', cpu3_mw,
+ 'estimated_mws', cpu3_mw * period_dur / 1e9
+ ),
NULL
),
'cpu4', IIF(
cpu4_mw,
- AndroidWattsonCpuEstimate('estimated_mw', cpu4_mw),
+ AndroidWattsonCpuEstimate(
+ 'estimated_mw', cpu4_mw,
+ 'estimated_mws', cpu4_mw * period_dur / 1e9
+ ),
NULL
),
'cpu5', IIF(
cpu5_mw,
- AndroidWattsonCpuEstimate('estimated_mw', cpu5_mw),
+ AndroidWattsonCpuEstimate(
+ 'estimated_mw', cpu5_mw,
+ 'estimated_mws', cpu5_mw * period_dur / 1e9
+ ),
NULL
),
'cpu6', IIF(
cpu6_mw,
- AndroidWattsonCpuEstimate('estimated_mw', cpu6_mw),
+ AndroidWattsonCpuEstimate(
+ 'estimated_mw', cpu6_mw,
+ 'estimated_mws', cpu6_mw * period_dur / 1e9
+ ),
NULL
),
'cpu7', IIF(
cpu7_mw,
- AndroidWattsonCpuEstimate('estimated_mw', cpu7_mw),
+ AndroidWattsonCpuEstimate(
+ 'estimated_mw', cpu7_mw,
+ 'estimated_mws', cpu7_mw * period_dur / 1e9
+ ),
NULL
)
) AS proto
@@ -347,6 +377,7 @@
period_dur,
AndroidWattsonCpuSubsystemEstimate(
'estimated_mw', sum_mw,
+ 'estimated_mws', sum_mw * period_dur / 1e9,
'policy0', p0_proto,
'policy1', p1_proto,
'policy2', p2_proto,
@@ -355,7 +386,10 @@
'policy5', p5_proto,
'policy6', p6_proto,
'policy7', p7_proto,
- 'dsu_scu', AndroidWattsonDsuScuEstimate('estimated_mw', dsu_scu_mw)
+ 'dsu_scu', AndroidWattsonDsuScuEstimate(
+ 'estimated_mw', dsu_scu_mw,
+ 'estimated_mws', dsu_scu_mw * period_dur / 1e9
+ )
) as proto
FROM components_w_sum;
diff --git a/test/trace_processor/diff_tests/metrics/android/tests.py b/test/trace_processor/diff_tests/metrics/android/tests.py
index 27d4ad6..5f24e2e 100644
--- a/test/trace_processor/diff_tests/metrics/android/tests.py
+++ b/test/trace_processor/diff_tests/metrics/android/tests.py
@@ -382,41 +382,54 @@
period_dur: 384847255
cpu_subsystem {
estimated_mw: 4568.1772
+ estimated_mws: 1758.050415
policy0 {
estimated_mw: 578.31256
+ estimated_mws: 222.561996
cpu0 {
estimated_mw: 148.99423
+ estimated_mws: 57.340019
}
cpu1 {
estimated_mw: 130.13142
+ estimated_mws: 50.080723
}
cpu2 {
estimated_mw: 127.60357
+ estimated_mws: 49.107883
}
cpu3 {
estimated_mw: 171.58333
+ estimated_mws: 66.033371
}
}
policy4 {
estimated_mw: 684.18835
+ estimated_mws: 263.308014
cpu4 {
estimated_mw: 344.39563
+ estimated_mws: 132.539703
}
cpu5 {
estimated_mw: 339.7927
+ estimated_mws: 130.768295
}
}
policy6 {
estimated_mw: 2163.158
+ estimated_mws: 832.48541
cpu6 {
estimated_mw: 1080.6881
+ estimated_mws: 415.89984
}
cpu7 {
estimated_mw: 1082.47
+ estimated_mws: 416.585602
}
}
dsu_scu {
estimated_mw: 1142.5181
+ estimated_mws: 439.694946
}
}
}
@@ -436,23 +449,30 @@
period_dur: 61792677852
cpu_subsystem {
estimated_mw: 42.123608
+ estimated_mws: 2602.930420
policy0 {
estimated_mw: 34.71892
+ estimated_mws: 2145.375244
cpu0 {
estimated_mw: 10.705099
+ estimated_mws: 661.496704
}
cpu1 {
estimated_mw: 8.315703
+ estimated_mws: 513.849548
}
cpu2 {
estimated_mw: 7.7776227
+ estimated_mws: 480.600128
}
cpu3 {
estimated_mw: 7.9204974
+ estimated_mws: 489.428741
}
}
dsu_scu {
estimated_mw: 7.404684
+ estimated_mws: 457.555267
}
}
}
@@ -490,23 +510,30 @@
period_dur: 2031871358
cpu_subsystem {
estimated_mw: 46.540943
+ estimated_mws: 94.565208
policy0 {
estimated_mw: 34.037483
+ estimated_mws: 69.159790
cpu0 {
estimated_mw: 14.416655
+ estimated_mws: 29.292788
}
cpu1 {
estimated_mw: 6.641429
+ estimated_mws: 13.494529
}
cpu2 {
estimated_mw: 8.134797
+ estimated_mws: 16.528862
}
cpu3 {
estimated_mw: 4.8446035
+ estimated_mws: 9.843612
}
}
dsu_scu {
estimated_mw: 12.503458
+ estimated_mws: 25.405418
}
}
}