• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3
2# Copyright (C) 2024 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 a
7#
8#      http://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
16from python.generators.diff_tests.testing import Csv, Path, DataPath
17from python.generators.diff_tests.testing import DiffTestBlueprint
18from python.generators.diff_tests.testing import TestSuite
19
20
21class WattsonStdlib(TestSuite):
22  consolidate_tables_template = ('''
23      SELECT
24        sum(dur) as duration,
25        SUM(l3_hit_count) AS l3_hit_count,
26        SUM(l3_miss_count) AS l3_miss_count,
27        freq_0, idle_0, freq_1, idle_1, freq_2, idle_2, freq_3, idle_3,
28        freq_4, idle_4, freq_5, idle_5, freq_6, idle_6, freq_7, idle_7,
29        suspended
30      FROM SYSTEM_STATE_TABLE
31      GROUP BY
32        freq_0, idle_0, freq_1, idle_1, freq_2, idle_2, freq_3, idle_3,
33        freq_4, idle_4, freq_5, idle_5, freq_6, idle_6, freq_7, idle_7,
34        suspended
35      ORDER BY duration desc
36      LIMIT 20;
37      ''')
38
39  # Test raw system state before any grouping
40  def test_wattson_system_state(self):
41    return DiffTestBlueprint(
42        trace=DataPath('wattson_dsu_pmu.pb'),
43        query="""
44        INCLUDE PERFETTO MODULE wattson.system_state;
45        SELECT * from wattson_system_states
46        ORDER by ts DESC
47        LIMIT 20
48        """,
49        out=Csv("""
50        "ts","dur","l3_hit_count","l3_miss_count","freq_0","idle_0","freq_1","idle_1","freq_2","idle_2","freq_3","idle_3","freq_4","idle_4","freq_5","idle_5","freq_6","idle_6","freq_7","idle_7","suspended"
51        370103436540,339437,"[NULL]","[NULL]",738000,-1,738000,1,738000,-1,738000,-1,400000,-1,400000,1,1106000,1,1106000,1,0
52        370103419857,16683,"[NULL]","[NULL]",738000,-1,738000,1,738000,1,738000,-1,400000,-1,400000,1,1106000,1,1106000,1,0
53        370103413314,6543,"[NULL]","[NULL]",738000,1,738000,1,738000,1,738000,-1,400000,-1,400000,1,1106000,1,1106000,1,0
54        370103079729,333585,"[NULL]","[NULL]",738000,1,738000,1,738000,1,738000,-1,400000,-1,400000,1,1106000,-1,1106000,1,0
55        370103037378,42351,"[NULL]","[NULL]",738000,1,738000,1,738000,1,738000,-1,400000,1,400000,1,1106000,-1,1106000,1,0
56        370102869076,168302,"[NULL]","[NULL]",738000,1,738000,1,738000,1,738000,-1,400000,1,400000,1,1106000,-1,1106000,-1,0
57        370102832862,36214,"[NULL]","[NULL]",738000,1,738000,1,738000,-1,738000,-1,400000,1,400000,1,1106000,-1,1106000,-1,0
58        370102831844,1018,"[NULL]","[NULL]",738000,1,738000,1,738000,-1,738000,-1,400000,1,400000,1,1106000,-1,984000,-1,0
59        370102819475,12369,"[NULL]","[NULL]",738000,1,738000,1,738000,-1,738000,-1,400000,1,400000,1,984000,-1,984000,-1,0
60        370102816586,1098,"[NULL]","[NULL]",738000,1,574000,1,574000,-1,574000,-1,400000,1,400000,1,984000,-1,984000,-1,0
61        370102669043,147543,"[NULL]","[NULL]",574000,1,574000,1,574000,-1,574000,-1,400000,1,400000,1,984000,-1,984000,-1,0
62        370102244564,424479,"[NULL]","[NULL]",574000,1,574000,1,574000,-1,574000,1,400000,1,400000,1,984000,-1,984000,-1,0
63        370100810360,1434204,"[NULL]","[NULL]",574000,1,574000,1,574000,-1,574000,1,400000,1,400000,1,984000,1,984000,-1,0
64        370100731096,79264,"[NULL]","[NULL]",574000,1,574000,1,574000,-1,574000,-1,400000,1,400000,1,984000,1,984000,-1,0
65        370100411312,319784,"[NULL]","[NULL]",574000,1,574000,1,574000,1,574000,-1,400000,1,400000,1,984000,1,984000,-1,0
66        370100224219,187093,"[NULL]","[NULL]",574000,-1,574000,1,574000,1,574000,-1,400000,1,400000,1,984000,1,984000,-1,0
67        370100171729,52490,"[NULL]","[NULL]",574000,1,574000,1,574000,1,574000,-1,400000,1,400000,1,984000,1,984000,-1,0
68        370096612858,3558871,"[NULL]","[NULL]",574000,1,574000,1,574000,1,574000,1,400000,1,400000,1,984000,1,984000,-1,0
69        370096452775,160083,"[NULL]","[NULL]",574000,1,574000,1,574000,1,574000,1,400000,1,400000,1,984000,-1,984000,-1,0
70        370096347307,105468,"[NULL]","[NULL]",574000,-1,574000,1,574000,1,574000,1,400000,1,400000,1,984000,-1,984000,-1,0
71            """))
72
73  # Test fixup of deep idle offset and time marker window.
74  def test_wattson_time_window(self):
75    return DiffTestBlueprint(
76        trace=DataPath('wattson_dsu_pmu.pb'),
77        query="""
78        INCLUDE PERFETTO MODULE wattson.system_state;
79
80        CREATE PERFETTO TABLE wattson_time_window
81        AS
82        SELECT 362426061658 AS ts, 5067704349 AS dur;
83
84        -- Final table that is cut off to fit within the requested time window.
85        CREATE VIRTUAL TABLE time_window_intersect
86          USING SPAN_JOIN(wattson_system_states, wattson_time_window);
87        """ + self.consolidate_tables_template.replace("SYSTEM_STATE_TABLE",
88                                                       "time_window_intersect"),
89        out=Csv("""
90            "duration","l3_hit_count","l3_miss_count","freq_0","idle_0","freq_1","idle_1","freq_2","idle_2","freq_3","idle_3","freq_4","idle_4","freq_5","idle_5","freq_6","idle_6","freq_7","idle_7","suspended"
91            58982760,2787779,1229222,574000,0,574000,1,574000,1,574000,0,553000,0,553000,0,500000,1,500000,0,0
92            50664181,2364802,1133322,574000,0,574000,1,574000,1,574000,0,553000,1,553000,0,500000,0,500000,0,0
93            41743544,2013295,917107,574000,0,574000,0,574000,1,574000,1,553000,0,553000,0,500000,0,500000,1,0
94            33801135,1479851,684489,300000,0,300000,0,300000,1,300000,1,400000,0,400000,0,500000,0,500000,1,0
95            32703489,1428203,690001,300000,0,300000,0,300000,1,300000,0,400000,0,400000,0,500000,0,500000,0,0
96            29062133,1597555,719900,574000,0,574000,0,574000,1,574000,0,553000,1,553000,0,500000,1,500000,0,0
97            28310872,1211262,566873,300000,0,300000,1,300000,1,300000,0,400000,0,400000,0,500000,0,500000,0,0
98            26754474,1224826,569901,300000,0,300000,1,300000,0,300000,0,400000,1,400000,0,500000,0,500000,0,0
99            25107621,1059311,473161,300000,0,300000,1,300000,1,300000,0,400000,0,400000,0,500000,1,500000,0,0
100            23771603,987803,450930,300000,0,300000,1,300000,1,300000,0,400000,1,400000,0,500000,0,500000,0,0
101            23721891,963220,409196,300000,0,300000,0,300000,1,300000,0,400000,1,400000,0,500000,1,500000,0,0
102            22988523,984240,473025,300000,0,300000,0,300000,1,300000,0,400000,0,400000,0,500000,0,500000,1,0
103            21790436,987511,449348,300000,0,300000,1,300000,1,300000,0,400000,0,400000,0,500000,0,500000,1,0
104            21673975,1034856,445803,574000,0,574000,0,574000,1,574000,0,553000,0,553000,0,500000,0,500000,1,0
105            20665650,974100,442861,300000,0,300000,0,300000,1,300000,0,400000,0,400000,1,500000,0,500000,0,0
106            18024891,823424,339250,300000,0,300000,1,300000,0,300000,0,400000,0,400000,0,500000,1,500000,0,0
107            17669272,826030,346995,574000,0,574000,0,574000,0,574000,0,553000,1,553000,0,500000,1,500000,0,0
108            16774291,762738,348469,574000,0,574000,1,574000,1,574000,0,553000,0,553000,0,500000,0,500000,1,0
109            16191449,689792,316923,300000,0,300000,0,300000,1,300000,0,400000,1,400000,0,500000,0,500000,0,0
110            15918895,742531,325426,574000,0,574000,1,574000,0,574000,1,553000,0,553000,0,500000,1,500000,0,0
111            """))
112
113  # Test on Raven for checking system states and the DSU PMU counts.
114  def test_wattson_dsu_pmu(self):
115    return DiffTestBlueprint(
116        trace=DataPath('wattson_dsu_pmu.pb'),
117        query=("INCLUDE PERFETTO MODULE wattson.system_state;\n" +
118               self.consolidate_tables_template.replace(
119                   "SYSTEM_STATE_TABLE", "wattson_system_states")),
120        out=Csv("""
121            "duration","l3_hit_count","l3_miss_count","freq_0","idle_0","freq_1","idle_1","freq_2","idle_2","freq_3","idle_3","freq_4","idle_4","freq_5","idle_5","freq_6","idle_6","freq_7","idle_7","suspended"
122            1279130692,1318302,419159,300000,1,300000,1,300000,1,300000,1,400000,1,400000,1,500000,1,500000,1,0
123            165854009,118369,42037,300000,-1,300000,1,300000,1,300000,1,400000,1,400000,1,500000,1,500000,1,0
124            121156343,5846554,2343180,574000,0,574000,1,574000,0,574000,0,553000,0,553000,0,500000,1,500000,1,0
125            72876331,133532,57759,300000,1,300000,1,300000,-1,300000,1,400000,1,400000,1,500000,1,500000,1,0
126            71060865,69029,22056,300000,1,300000,-1,300000,1,300000,1,400000,1,400000,1,500000,1,500000,1,0
127            64501262,276098,309757,300000,1,300000,1,300000,1,300000,1,400000,1,400000,1,500000,-1,500000,1,0
128            58982760,2787779,1229222,574000,0,574000,1,574000,1,574000,0,553000,0,553000,0,500000,1,500000,0,0
129            51127388,50724,18075,300000,1,300000,1,300000,1,300000,-1,400000,1,400000,1,500000,1,500000,1,0
130            50664181,2364802,1133322,574000,0,574000,1,574000,1,574000,0,553000,1,553000,0,500000,0,500000,0,0
131            49948122,2216740,934893,300000,0,300000,1,300000,0,300000,0,400000,0,400000,0,500000,1,500000,1,0
132            41743544,2013295,917107,574000,0,574000,0,574000,1,574000,1,553000,0,553000,0,500000,0,500000,1,0
133            40606558,"[NULL]","[NULL]",1401000,1,1401000,1,1401000,1,1401000,1,400000,1,400000,1,2802000,1,2802000,1,0
134            39887541,14272,1252,300000,0,300000,1,300000,1,300000,1,400000,1,400000,1,500000,1,500000,1,0
135            38159789,1428203,690001,300000,0,300000,0,300000,1,300000,0,400000,0,400000,0,500000,0,500000,0,0
136            33801135,1479851,684489,300000,0,300000,0,300000,1,300000,1,400000,0,400000,0,500000,0,500000,1,0
137            31543574,34702,18036,300000,1,300000,1,300000,1,300000,1,400000,-1,400000,1,500000,1,500000,1,0
138            31470669,163778,200331,1098000,1,1098000,1,1098000,1,1098000,1,400000,1,400000,1,500000,1,500000,-1,0
139            30993650,39579,48376,300000,1,300000,1,300000,1,300000,1,400000,1,400000,1,500000,1,500000,-1,0
140            30144287,1396131,585581,574000,0,574000,1,574000,0,574000,0,553000,0,553000,0,500000,1,500000,0,0
141            30009881,"[NULL]","[NULL]",1328000,1,1328000,1,1328000,1,1328000,1,2253000,1,2253000,1,500000,1,500000,1,0
142            """))
143
144  # Test on eos to check that suspend states are being calculated appropriately.
145  def test_wattson_suspend(self):
146    return DiffTestBlueprint(
147        trace=DataPath('wattson_eos_suspend.pb'),
148        query="""
149        INCLUDE PERFETTO MODULE wattson.system_state;
150        SELECT
151          sum(dur) as duration,
152          freq_0, idle_0, freq_1, idle_1, freq_2, idle_2, freq_3, idle_3,
153          suspended
154        FROM wattson_system_states
155        GROUP BY
156          freq_0, idle_0, freq_1, idle_1, freq_2, idle_2, freq_3, idle_3,
157          suspended
158        ORDER BY duration desc
159        LIMIT 20;
160        """,
161        out=Csv("""
162            "duration","freq_0","idle_0","freq_1","idle_1","freq_2","idle_2","freq_3","idle_3","suspended"
163            16606175990,614400,1,614400,1,614400,1,614400,1,0
164            10648392546,1708800,-1,1708800,-1,1708800,-1,1708800,-1,1
165            6933558399,1708800,-1,1708800,-1,1708800,-1,1708800,-1,0
166            1649400745,614400,0,614400,0,614400,0,614400,0,0
167            1199187488,614400,-1,614400,1,614400,1,614400,1,0
168            945900007,1708800,0,1708800,0,1708800,0,1708800,0,0
169            936351409,1363200,0,1363200,0,1363200,0,1363200,1,0
170            708490325,1708800,0,1708800,0,1708800,0,1708800,1,0
171            706695995,1708800,1,1708800,1,1708800,1,1708800,1,0
172            656873956,1363200,1,1363200,1,1363200,1,1363200,1,0
173            633440914,1363200,0,1363200,0,1363200,0,1363200,0,0
174            627708654,1708800,-1,1708800,0,1708800,0,1708800,0,0
175            620315547,1708800,-1,1708800,1,1708800,1,1708800,1,0
176            578173274,1708800,-1,1708800,0,1708800,0,1708800,-1,0
177            530967964,1708800,-1,1708800,-1,1708800,0,1708800,-1,0
178            516281990,1708800,0,1708800,0,1708800,0,1708800,-1,0
179            473910837,1363200,-1,1363200,0,1363200,0,1363200,1,0
180            461831724,1708800,0,1708800,-1,1708800,0,1708800,0,0
181            402233299,1708800,-1,1708800,-1,1708800,-1,1708800,1,0
182            375051979,864000,1,864000,1,864000,1,864000,1,0
183            """))
184
185  # Test that the device name can be extracted from the trace's metadata.
186  def test_wattson_device_name(self):
187    return DiffTestBlueprint(
188        trace=DataPath('android_cpu_eos.pb'),
189        query=("""
190            INCLUDE PERFETTO MODULE wattson.device_infos;
191            select name from _wattson_device
192            """),
193        out=Csv("""
194            "name"
195            "monaco"
196            """))
197
198  # Tests intermediate table
199  def test_wattson_intermediate_table(self):
200    return DiffTestBlueprint(
201        trace=DataPath('wattson_dsu_pmu.pb'),
202        query=("""
203            INCLUDE PERFETTO MODULE wattson.curves.ungrouped;
204              select * from _w_independent_cpus_calc
205              WHERE ts > 359661672577
206              ORDER by ts ASC
207              LIMIT 10
208            """),
209        out=Csv("""
210            "ts","dur","l3_hit_count","l3_miss_count","freq_0","idle_0","freq_1","idle_1","freq_2","idle_2","freq_3","idle_3","freq_4","idle_4","freq_5","idle_5","freq_6","idle_6","freq_7","idle_7","policy_4","policy_5","policy_6","policy_7","no_static","cpu0_curve","cpu1_curve","cpu2_curve","cpu3_curve","cpu4_curve","cpu5_curve","cpu6_curve","cpu7_curve","static_4","static_5","static_6","static_7"
211            359661672578,75521,8326,9689,1401000,0,1401000,0,1401000,0,1401000,0,2253000,-1,2253000,0,2802000,-1,2802000,0,4,4,6,6,0,"[NULL]","[NULL]","[NULL]","[NULL]",527.050000,23.500000,1942.890000,121.430000,35.660000,-1.000000,35.640000,-1.000000
212            359661748099,2254517,248577,289258,1401000,0,1401000,0,1401000,0,1401000,0,2253000,0,2253000,0,2802000,-1,2802000,0,4,4,6,6,0,"[NULL]","[NULL]","[NULL]","[NULL]",23.500000,23.500000,1942.890000,121.430000,-1.000000,-1.000000,35.640000,-1.000000
213            359664003674,11596,1278,1487,1401000,-1,1401000,-1,1401000,-1,1401000,-1,2253000,-1,2253000,-1,2802000,-1,2802000,-1,4,4,6,6,-1,"[NULL]","[NULL]","[NULL]","[NULL]",527.050000,527.050000,1942.890000,1942.890000,35.660000,35.660000,35.640000,35.640000
214            359664015270,4720,520,605,1401000,-1,1401000,-1,1401000,-1,1401000,-1,2253000,-1,2253000,-1,2802000,-1,2802000,0,4,4,6,6,-1,"[NULL]","[NULL]","[NULL]","[NULL]",527.050000,527.050000,1942.890000,121.430000,35.660000,35.660000,35.640000,-1.000000
215            359664019990,18921,2086,2427,1401000,-1,1401000,-1,1401000,-1,1401000,-1,2253000,0,2253000,-1,2802000,-1,2802000,0,4,4,6,6,-1,"[NULL]","[NULL]","[NULL]","[NULL]",23.500000,527.050000,1942.890000,121.430000,-1.000000,35.660000,35.640000,-1.000000
216            359664038911,8871,978,1138,1401000,-1,1401000,-1,1401000,0,1401000,-1,2253000,0,2253000,-1,2802000,-1,2802000,0,4,4,6,6,-1,"[NULL]","[NULL]","[NULL]","[NULL]",23.500000,527.050000,1942.890000,121.430000,-1.000000,35.660000,35.640000,-1.000000
217            359664047782,1343,148,172,1401000,-1,1401000,0,1401000,0,1401000,-1,2253000,0,2253000,-1,2802000,-1,2802000,0,4,4,6,6,-1,"[NULL]","[NULL]","[NULL]","[NULL]",23.500000,527.050000,1942.890000,121.430000,-1.000000,35.660000,35.640000,-1.000000
218            359664049491,1383,152,177,1401000,0,1401000,0,1401000,0,1401000,-1,2253000,0,2253000,0,2802000,-1,2802000,0,4,4,6,6,-1,"[NULL]","[NULL]","[NULL]","[NULL]",23.500000,23.500000,1942.890000,121.430000,-1.000000,-1.000000,35.640000,-1.000000
219            359664050874,2409912,265711,309195,1401000,0,1401000,0,1401000,0,1401000,0,2253000,0,2253000,0,2802000,-1,2802000,0,4,4,6,6,0,"[NULL]","[NULL]","[NULL]","[NULL]",23.500000,23.500000,1942.890000,121.430000,-1.000000,-1.000000,35.640000,-1.000000
220            359666460786,13754,1516,1764,1401000,0,1401000,0,1401000,0,1401000,0,2253000,-1,2253000,0,2802000,-1,2802000,0,4,4,6,6,0,"[NULL]","[NULL]","[NULL]","[NULL]",527.050000,23.500000,1942.890000,121.430000,35.660000,-1.000000,35.640000,-1.000000
221            """))
222
223  # Tests that device static curve selection is only when CPUs are active
224  def test_wattson_static_curve_selection(self):
225    return DiffTestBlueprint(
226        trace=DataPath('wattson_dsu_pmu.pb'),
227        query=("""
228            INCLUDE PERFETTO MODULE wattson.curves.ungrouped;
229              select * from _system_state_curves
230              ORDER by ts ASC
231              LIMIT 5
232            """),
233        out=Csv("""
234            "ts","dur","cpu0_curve","cpu1_curve","cpu2_curve","cpu3_curve","cpu4_curve","cpu5_curve","cpu6_curve","cpu7_curve","static_curve","l3_hit_value","l3_miss_value"
235            359085636893,23030,0.000000,"[NULL]",0.000000,0.000000,0.000000,28.510000,0.000000,0.000000,0.000000,"[NULL]","[NULL]"
236            359085659923,6664673,0.000000,"[NULL]",0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
237            359092324596,1399699,0.000000,"[NULL]",0.000000,21.840000,0.000000,0.000000,0.000000,0.000000,3.730000,"[NULL]","[NULL]"
238            359093724295,6959391,0.000000,"[NULL]",0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
239            359100683686,375122,0.000000,"[NULL]",0.000000,0.000000,28.510000,0.000000,0.000000,0.000000,0.000000,"[NULL]","[NULL]"
240            """))
241
242  # Tests that L3 cache calculations are being done correctly
243  def test_wattson_l3_calculations(self):
244    return DiffTestBlueprint(
245        trace=DataPath('wattson_dsu_pmu.pb'),
246        query=("""
247            INCLUDE PERFETTO MODULE wattson.curves.ungrouped;
248              select * from _system_state_curves
249              WHERE ts > 359661672577
250              ORDER by ts ASC
251              LIMIT 5
252            """),
253        out=Csv("""
254            "ts","dur","cpu0_curve","cpu1_curve","cpu2_curve","cpu3_curve","cpu4_curve","cpu5_curve","cpu6_curve","cpu7_curve","static_curve","l3_hit_value","l3_miss_value"
255            359661672578,75521,3.410000,3.410000,3.410000,3.410000,527.050000,23.500000,1942.890000,121.430000,35.660000,16836.004600,1215.000600
256            359661748099,2254517,3.450000,3.450000,3.450000,3.450000,23.500000,23.500000,1942.890000,121.430000,35.640000,578637.540600,262212.377000
257            359664003674,11596,248.900000,248.900000,248.900000,248.900000,527.050000,527.050000,1942.890000,1942.890000,35.660000,2584.243800,186.469800
258            359664015270,4720,248.900000,248.900000,248.900000,248.900000,527.050000,527.050000,1942.890000,121.430000,35.660000,1051.492000,75.867000
259            359664019990,18921,248.900000,248.900000,248.900000,248.900000,23.500000,527.050000,1942.890000,121.430000,35.660000,4218.100600,304.345800
260            """))
261
262  # Tests that suspend values are being skipped
263  def test_wattson_suspend_calculations(self):
264    return DiffTestBlueprint(
265        trace=DataPath('wattson_eos_suspend.pb'),
266        query=("""
267            INCLUDE PERFETTO MODULE wattson.curves.ungrouped;
268              select * from _system_state_curves
269              WHERE ts > 24790009884888
270              ORDER by ts ASC
271              LIMIT 5
272            """),
273        out=Csv("""
274            "ts","dur","cpu0_curve","cpu1_curve","cpu2_curve","cpu3_curve","cpu4_curve","cpu5_curve","cpu6_curve","cpu7_curve","static_curve","l3_hit_value","l3_miss_value"
275            24790009886451,21406,39.690000,39.690000,39.690000,39.690000,0.000000,0.000000,0.000000,0.000000,18.390000,"[NULL]","[NULL]"
276            24790009907857,2784616769,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0,0
277            24792794524626,654584,39.690000,39.690000,39.690000,39.690000,0.000000,0.000000,0.000000,0.000000,18.390000,"[NULL]","[NULL]"
278            24792795179210,38854,39.690000,39.690000,39.690000,39.690000,0.000000,0.000000,0.000000,0.000000,18.390000,"[NULL]","[NULL]"
279            24792795218064,164583,39.690000,39.690000,39.690000,39.690000,0.000000,0.000000,0.000000,0.000000,18.390000,"[NULL]","[NULL]"
280            """))
281
282  # Tests that device curve table is being looked up correctly
283  def test_wattson_device_curve_per_policy(self):
284    return DiffTestBlueprint(
285        trace=DataPath('wattson_dsu_pmu.pb'),
286        query=("""
287            INCLUDE PERFETTO MODULE wattson.curves.grouped;
288              select * from wattson_estimate_per_component
289              WHERE ts > 359661672577
290              ORDER by ts ASC
291              LIMIT 10
292            """),
293        out=Csv("""
294            "ts","dur","l3","little_cpus","mid_cpus","big_cpus"
295            359661672578,75521,18051.005200,49.300000,550.550000,2064.320000
296            359661748099,2254517,840849.917600,49.440000,47.000000,2064.320000
297            359664003674,11596,2770.713600,1031.260000,1054.100000,3885.780000
298            359664015270,4720,1127.359000,1031.260000,1054.100000,2064.320000
299            359664019990,18921,4522.446400,1031.260000,550.550000,2064.320000
300            359664038911,8871,2120.319000,785.770000,550.550000,2064.320000
301            359664047782,1343,320.839600,540.280000,550.550000,2064.320000
302            359664049491,1383,514.276100,254.130000,47.000000,2064.320000
303            359664050874,2409912,898807.333300,49.440000,47.000000,2064.320000
304            359666460786,13754,3286.709200,49.300000,550.550000,2064.320000
305            """))
306
307  # Tests that total calculations are correct
308  def test_wattson_total_raven_calc(self):
309    return DiffTestBlueprint(
310        trace=DataPath('wattson_dsu_pmu.pb'),
311        query=("""
312            INCLUDE PERFETTO MODULE wattson.curves.grouped;
313               select * from _wattson_entire_trace
314            """),
315        out=Csv("""
316            "total_l3","total_little_cpus","total_mid_cpus","total_big_cpus","total"
317            500.120000,661.980000,370.730000,1490.970000,3023.800000
318            """))
319
320  # Tests that total calculations are correct
321  def test_wattson_total_eos_calc(self):
322    return DiffTestBlueprint(
323        trace=DataPath('wattson_eos_suspend.pb'),
324        query=("""
325            INCLUDE PERFETTO MODULE wattson.curves.grouped;
326               select * from _wattson_entire_trace
327            """),
328        out=Csv("""
329            "total_l3","total_little_cpus","total_mid_cpus","total_big_cpus","total"
330            0.000000,2603.100000,0.000000,0.000000,2603.100000
331            """))
332