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