• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1--
2-- Copyright 2020 The Android Open Source Project
3--
4-- Licensed under the Apache License, Version 2.0 (the 'License');
5-- you may not use this file except in compliance with the License.
6-- You may obtain a copy of the License at
7--
8--     https://www.apache.org/licenses/LICENSE-2.0
9--
10-- Unless required by applicable law or agreed to in writing, software
11-- distributed under the License is distributed on an 'AS IS' BASIS,
12-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13-- See the License for the specific language governing permissions and
14-- limitations under the License.
15--
16
17-- This is a mapping from counter names on different devices
18-- to what subsystems they are measuring.
19DROP TABLE IF EXISTS power_counters;
20CREATE TABLE power_counters (name TEXT UNIQUE, subsystem TEXT);
21
22INSERT INTO power_counters
23VALUES ('power.VPH_PWR_S5C_S6C_uws', 'cpu_big'),
24('power.VPH_PWR_S4C_uws', 'cpu_little'),
25('power.VPH_PWR_S2C_S3C_uws', 'soc'),
26('power.VPH_PWR_OLED_uws', 'display'),
27('power.PPVAR_VPH_PWR_S1A_S9A_S10A_uws', 'soc'),
28('power.PPVAR_VPH_PWR_S2A_S3A_uws', 'cpu_big'),
29('power.PPVAR_VPH_PWR_S1C_uws', 'cpu_little'),
30('power.WCN3998_VDD13 [from PP1304_L2C]_uws', 'wifi'),
31('power.PPVAR_VPH_PWR_WLAN_uws', 'wifi'),
32('power.PPVAR_VPH_PWR_OLED_uws', 'display'),
33('power.PPVAR_VPH_PWR_QTM525_uws', 'cellular'),
34('power.PPVAR_VPH_PWR_RF_uws', 'cellular'),
35('power.rails.aoc.logic', 'aoc'),
36('power.rails.aoc.memory', 'aoc'),
37('power.rails.cpu.big', 'cpu_big'),
38('power.rails.cpu.little', 'cpu_little'),
39('power.rails.cpu.mid', 'cpu_mid'),
40('power.rails.ddr.a', 'mem'),
41('power.rails.ddr.b', 'mem'),
42('power.rails.ddr.c', 'mem'),
43('power.rails.gpu', 'gpu'),
44('power.rails.display', 'display'),
45('power.rails.gps', 'gps'),
46('power.rails.memory.interface', 'mem'),
47('power.rails.modem', 'cellular'),
48('power.rails.radio.frontend', 'cellular'),
49('power.rails.system.fabric', 'soc'),
50('power.rails.wifi.bt', 'wifi');
51
52-- Convert power counter data into table of events, where each event has
53-- start timestamp, duration and the average power drain during its duration
54-- in Watts.
55-- Note that power counters wrap around at different values on different
56-- devices. When that happens, we ignore the value before overflow, and only
57-- take into account the value after it. This underestimates the actual power
58-- drain between those counters.
59DROP VIEW IF EXISTS drain_in_watts;
60CREATE VIEW drain_in_watts AS
61SELECT name,
62  ts,
63  LEAD(ts) OVER (
64    PARTITION BY track_id
65    ORDER BY ts
66  ) - ts AS dur,
67  CASE
68    WHEN LEAD(value) OVER (
69      PARTITION BY track_id
70      ORDER BY ts
71    ) >= value THEN (
72      LEAD(value) OVER (
73        PARTITION BY track_id
74        ORDER BY ts
75      ) - value
76    )
77    ELSE LEAD(value) OVER (
78      PARTITION BY track_id
79      ORDER BY ts
80    )
81  END / (
82    LEAD(ts) OVER (
83      PARTITION BY track_id
84      ORDER BY ts
85    ) - ts
86  ) * 1e3 AS drain_w
87FROM counter
88JOIN counter_track ON (counter.track_id = counter_track.id)
89WHERE counter_track.type = 'counter_track'
90  AND name GLOB "power.*";
91