1/* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required BY applicable law OR agreed to in writing, software 10 * distributed under the License IS distributed ON an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express OR implied. 12 * See the License for the specific language governing permissions AND 13 * limitations under the License. 14 */ 15 16const cpuSql: Array<DebugSql> = [ 17 { 18 sql: 19 'SELECT B.pid AS processId,B.cpu,B.tid,B.itid AS id,B.dur,B.ts - TR.start_ts AS startTime,B.arg_setid AS ' + 20 'argSetID FROM thread_state AS B LEFT JOIN trace_range AS TR WHERE B.itid IS NOT NULL;', 21 title: 'Cpu chart', 22 }, 23 { 24 sql: 25 'SELECT cpu,value,IFNULL(dur,tb.end_ts - c.ts) dur,ts-tb.start_ts AS startNS FROM measure c,trace_range tb ' + 26 "INNER JOIN cpu_measure_filter t ON c.filter_id = t.id WHERE (name = 'cpufreq' OR name='cpu_frequency');", 27 title: 'Cpu Frequency chart', 28 }, 29 { 30 sql: 'SELECT (A.ts - B.start_ts) AS startTs,IFNULL(dur,B.end_ts - A.ts) dur,value FROM measure A,trace_range B;', 31 title: 'Cpu State chart', 32 }, 33 { 34 sql: 35 'SELECT ts - T.start_ts AS startNs,dur,max(value) AS max,min(value) AS min FROM measure,trace_range ' + 36 'T GROUP BY ts;', 37 title: 'Cpu Freq Limit chart', 38 }, 39 { 40 sql: 41 'SELECT TS.pid AS pid,TS.tid AS tid,TS.cpu,SUM((TS.ts - TR.start_ts + TS.dur) - (TS.ts - TR.start_ts)) ' + 42 'wallDuration,count(TS.tid) AS occurrences FROM thread_state AS TS LEFT JOIN trace_range AS TR GROUP BY TS.cpu,' + 43 'TS.pid,TS.tid ORDER BY wallDuration DESC;', 44 title: 'CPU By Thread table', 45 }, 46 { 47 sql: 48 'SELECT B.pid AS pid, SUM(B.dur) AS wallDuration,AVG(B.dur) AS avgDuration,count(B.tid) AS occurrences FROM ' + 49 'thread_state AS B LEFT JOIN trace_range AS TR GROUP BY B.pid ORDER BY wallDuration DESC;', 50 title: 'CPU By Process table', 51 }, 52 { 53 sql: 54 'SELECT cpu,SUM(A.dur) / CAST(B.end_ts - B.start_ts AS float) AS usage FROM thread_state A,trace_range B ' + 55 'WHERE (A.ts - B.start_ts) > 0 AND A.dur > 0 GROUP BY cpu;', 56 title: 'CPU Usage table', 57 }, 58 { 59 sql: 60 'SELECT B.pid,B.tid,B.state,SUM(B.dur) AS wallDuration,AVG(IFNULL(B.dur,0)) AS ' + 61 'avgDuration,count(B.tid) AS occurrences FROM thread_state AS B LEFT JOIN trace_range AS TR ' + 62 'GROUP BY B.pid, B.tid, B.state ORDER BY wallDuration DESC;', 63 title: 'Thread States table', 64 }, 65 { 66 sql: 67 'SELECT value, filter_id AS filterId, ts, f.cpu FROM measure LEFT JOIN cpu_measure_filter AS f ON ' + 68 'f.id=filter_id ORDER BY ts ASC;', 69 title: 'Cpu State/Cpu Frequency table', 70 }, 71]; 72 73const threadSql: Array<DebugSql> = [ 74 { 75 sql: 76 'SELECT ta.cpu,dur, ts-TR.start_ts AS startTime FROM thread_state ta LEFT JOIN trace_range AS TR ' + 77 'WHERE ta.cpu IS NOT NULL;', 78 title: 'Process chart', 79 }, 80]; 81 82const memory: Array<DebugSql> = [ 83 { 84 sql: 85 'SELECT startNs, SUM( value ) AS value FROM ( SELECT m.ts - tr.start_ts AS startNs,SUM( m.value ) AS value ' + 86 'FROM sys_mem_measure m,trace_range tr LEFT JOIN sys_event_filter f ON f.id = m.filter_id WHERE m.ts < tr.end_ts ' + 87 'GROUP BY m.ts UNION ALL SELECT a.ts - tr.start_ts AS startNs,SUM( a.size ) AS value FROM memory_ashmem a,' + 88 'trace_range tr WHERE a.ts < tr.end_ts AND a.flag = 0 GROUP BY a.ts) GROUP BY startNs;', 89 title: 'Ability Monitor purgeable chart', 90 }, 91 { 92 sql: 93 'SELECT (A.ts - B.start_ts) AS startNs,SUM(A.size) AS value,E.data AS expTaskComm, A.flag AS flag ' + 94 'FROM memory_dma A,trace_range B LEFT JOIN data_dict AS E ON E.id=A.exp_task_comm_id WHERE A.flag = 0 ' + 95 'AND A.ts < B.end_ts GROUP BY A.ts;', 96 title: 'Ability Monitor DMA chart', 97 }, 98 { 99 sql: 100 'SELECT (A.ts - B.start_ts) AS startNs, SUM(A.used_gpu_size) AS value FROM memory_process_gpu A,trace_range B ' + 101 'WHERE A.ts < B.end_ts GROUP BY A.ts;', 102 title: 'Ability Monitor gpu memory chart', 103 }, 104 { 105 sql: 106 "SELECT (A.timestamp - B.start_ts) AS startNs, SUM(dirty) * 1024 AS value, 'dirty' AS name " + 107 'FROM smaps A,trace_range B WHERE A.timestamp < B.end_ts GROUP BY A.timestamp;', 108 title: 'VM Tracker Smaps chart(dirty)', 109 }, 110 { 111 sql: 112 "SELECT (A.timestamp - B.start_ts) AS startNs, SUM(swapped) * 1024 AS value, 'swapped' AS name " + 113 'FROM smaps A,trace_range B WHERE A.timestamp < B.end_ts GROUP BY A.timestamp;', 114 title: 'VM Tracker Smaps chart(swapped)', 115 }, 116 { 117 sql: 118 "SELECT (A.timestamp - B.start_ts) AS startNs, SUM(resident_size) * 1024 AS value, 'resident_size' AS name " + 119 'FROM smaps A,trace_range B WHERE A.timestamp < B.end_ts GROUP BY A.timestamp;', 120 title: 'VM Tracker Smaps chart(resident_size)', 121 }, 122 { 123 sql: 124 "SELECT (A.timestamp - B.start_ts) AS startNs, SUM(pss) * 1024 AS value, 'pss' AS name " + 125 'FROM smaps A,trace_range B WHERE A.timestamp < B.end_ts GROUP BY A.timestamp;', 126 title: 'VM Tracker Smaps chart(pss)', 127 }, 128 { 129 sql: 130 'SELECT (A.timestamp - B.start_ts) AS startNs, SUM(private_clean + private_dirty) * 1024 AS value,' + 131 "'private_clean + private_dirty' AS name FROM smaps A,trace_range B WHERE A.timestamp " + 132 '< B.end_ts GROUP BY A.timestamp;', 133 title: 'VM Tracker Smaps chart(private_clean + private_dirty)', 134 }, 135 { 136 sql: 137 'SELECT (A.ts - B.start_ts) AS startNs,SUM(A.size) AS value FROM memory_ashmem A,trace_range B ' + 138 'WHERE A.ts < B.end_ts AND flag = 0 GROUP BY A.ts;', 139 title: 'VM Tracker SHM chart', 140 }, 141 { 142 sql: 143 'SELECT (A.ts - B.start_ts) AS startNs,SUM(A.size) AS value,A.flag AS flag,A.ipid AS ipid,E.data AS ' + 144 'expTaskComm FROM memory_dma A,trace_range B LEFT JOIN data_dict AS E ON E.id=A.exp_task_comm_id ' + 145 'WHERE A.flag = 0 AND A.ts < B.end_ts GROUP BY A.ts;', 146 title: 'VM Tracker Dma chart', 147 }, 148 { 149 sql: 150 'SELECT startNs, SUM( value ) AS value FROM (SELECT m.ts - tr.start_ts AS startNs,SUM(m.value) AS value ' + 151 'FROM process_measure m, trace_range tr LEFT JOIN process_measure_filter f ON f.id = m.filter_id ' + 152 'WHERE m.ts < tr.end_ts GROUP BY m.ts UNION ALL SELECT a.ts - tr.start_ts AS startNs,SUM( a.pss ) AS value ' + 153 'FROM memory_ashmem a,trace_range tr WHERE a.ts < tr.end_ts AND a.flag = 0 GROUP BY a.ts) GROUP BY startNs;', 154 title: 'VM Tracker purgeable chart', 155 }, 156 { 157 sql: 158 'SELECT (ts - start_ts) startNs,SUM(value) value FROM process_measure, trace_range ' + 159 "WHERE filter_id = (SELECT id FROM process_measure_filter WHERE name = 'mem.gl_pss')AND ts " + 160 'BETWEEN start_ts AND end_ts GROUP BY ts;', 161 title: 'VM Tracker gpu GL chart', 162 }, 163 { 164 sql: 165 'SELECT (A.ts - B.start_ts) AS startNs,SUM(A.used_gpu_size) AS value,A.ipid AS ipid ' + 166 'FROM memory_process_gpu A,trace_range B WHERE A.ts < B.end_ts GROUP BY A.ts;', 167 title: 'VM Tracker gpu memory chart', 168 }, 169 { 170 sql: 171 'SELECT DISTINCT module_name_id id,data FROM memory_window_gpu A, trace_range TR LEFT JOIN data_dict B ' + 172 'ON A.module_name_id = B.id WHERE window_name_id = 0 AND A.ts < TR.end_ts;', 173 title: 'VM Tracker gpu total type chart', 174 }, 175 { 176 sql: 177 'SELECT DISTINCT A.window_name_id AS id,B.data, NULL AS pid FROM memory_window_gpu A, trace_range tr ' + 178 'LEFT JOIN data_dict B ON A.window_name_id = B.id WHERE window_name_id != 0 AND A.ts < tr.end_ts UNION ALL ' + 179 'SELECT DISTINCT A.module_name_id id, B.data, A.window_name_id pid FROM memory_window_gpu A, trace_range TR ' + 180 'LEFT JOIN data_dict B ON A.module_name_id = B.id WHERE window_name_id != 0 AND A.ts < TR.end_ts;', 181 title: 'VM Tracker gpu window type chart', 182 }, 183]; 184 185const bioSql: Array<DebugSql> = [ 186 { 187 sql: 188 'SELECT name,B.ipid,pid FROM (SELECT DISTINCT ipid FROM bio_latency_sample A,trace_range B WHERE A.start_ts ' + 189 'BETWEEN B.start_ts AND B.end_ts) A LEFT JOIN process B ON A.ipid = B.ipid;', 190 title: 'Disk IO process chart', 191 }, 192 { 193 sql: 194 'SELECT (A.start_ts -B.start_ts) AS startNS,(A.start_ts - B.start_ts + A.latency_dur) AS endNS,latency_dur ' + 195 'AS dur FROM bio_latency_sample A,trace_range B WHERE startNS > 0 ORDER BY A.start_ts;', 196 title: 'Disk IO latency chart', 197 }, 198]; 199 200const frameTimeSql: Array<DebugSql> = [ 201 { 202 sql: 203 "SELECT sf.id,'frameTime' AS frameType,fs.ipid,fs.vsync AS name,fs.dur AS app_dur,(sf.ts + sf.dur - fs.ts) " + 204 'AS dur,(fs.ts - TR.start_ts) AS ts,fs.type,fs.flag,pro.pid,pro.name AS cmdline,(sf.ts - TR.start_ts) AS rs_ts,' + 205 'sf.vsync AS rs_vsync,sf.dur AS rs_dur,sf.ipid AS rs_ipid,proc.pid AS rs_pid,proc.name AS rs_name FROM ' + 206 'frame_slice AS fs LEFT JOIN process AS pro ON pro.id = fs.ipid LEFT JOIN frame_slice AS sf ON fs.dst = sf.id ' + 207 'LEFT JOIN process AS proc ON proc.id = sf.ipid LEFT JOIN trace_range TR WHERE fs.dst IS NOT NULL AND fs.type ' + 208 "= 1 UNION SELECT -1 AS id,'frameTime' AS frameType,fs.ipid,fs.vsync AS name,fs.dur AS app_dur,fs.dur," + 209 '(fs.ts - TR.start_ts) AS ts,fs.type,fs.flag, pro.pid,pro.name AS cmdline,NULL AS rs_ts,NULL AS rs_vsync,' + 210 'NULL AS rs_dur,NULL AS rs_ipid,NULL AS rs_pid,NULL AS rs_name FROM frame_slice AS fs LEFT JOIN process AS pro' + 211 " ON pro.id = fs.ipid LEFT JOIN trace_range TR WHERE fs.dst IS NULL AND pro.name NOT LIKE '%render_service%' " + 212 'AND fs.type = 1 ORDER BY ts;', 213 title: 'Expected timeline chart', 214 }, 215 { 216 sql: 217 "SELECT sf.id,'frameTime' AS frameType,fs.ipid,fs.vsync AS name,fs.dur AS app_dur,(sf.ts + sf.dur - fs.ts) " + 218 'AS dur,(fs.ts - TR.start_ts) AS ts,fs.type,(CASE WHEN (sf.flag == 1 OR fs.flag == 1) THEN 1 WHEN (sf.flag == ' + 219 '3 OR fs.flag == 3 ) THEN 3 ELSE 0 end) AS jank_tag,pro.pid,pro.name AS cmdline,(sf.ts - TR.start_ts) ' + 220 'AS rs_ts,sf.vsync AS rs_vsync,sf.dur AS rs_dur,sf.ipid AS rs_ipid,proc.pid AS rs_pid, proc.name AS rs_name ' + 221 'FROM frame_slice AS fs LEFT JOIN process AS pro ON pro.id = fs.ipid LEFT JOIN frame_slice AS sf ON fs.dst = ' + 222 'sf.id LEFT JOIN process AS proc ON proc.id = sf.ipid LEFT JOIN trace_range TR WHERE fs.dst IS NOT NULL AND ' + 223 "fs.type = 0 AND fs.flag <> 2 UNION SELECT -1 AS id,'frameTime' AS frameType,fs.ipid,fs.vsync AS name," + 224 'fs.dur AS app_dur,fs.dur,(fs.ts - TR.start_ts) AS ts,fs.type,fs.flag AS jank_tag,pro.pid,pro.name AS ' + 225 'cmdline,NULL AS rs_ts,NULL AS rs_vsync,NULL AS rs_dur,NULL AS rs_ipid,NULL AS rs_pid,NULL AS rs_name FROM ' + 226 'frame_slice AS fs LEFT JOIN process AS pro ON pro.id = fs.ipid LEFT JOIN trace_range TR WHERE fs.dst IS NULL ' + 227 "AND pro.name NOT LIKE '%render_service%' AND fs.type = 0 AND fs.flag <> 2 ORDER BY ts;", 228 title: 'Actual timeline chart', 229 }, 230]; 231 232const appStartUpSql: Array<DebugSql> = [ 233 { 234 sql: 235 'SELECT P.pid,A.tid,A.call_id AS itid,(CASE WHEN A.start_time < B.start_ts THEN 0 ELSE (A.start_time - ' + 236 'B.start_ts) end) AS startTs,(CASE WHEN A.start_time < B.start_ts THEN (A.end_time - B.start_ts) WHEN ' + 237 'A.end_time = -1 THEN 0 ELSE (A.end_time - A.start_time) end) AS dur,A.start_name AS startName FROM ' + 238 'app_startup A,trace_range B LEFT JOIN process P ON A.ipid = P.ipid ORDER BY start_name;', 239 title: 'App start up chart', 240 }, 241]; 242 243const animationSql: Array<DebugSql> = [ 244 { 245 sql: 246 'SELECT a.id AS animationId,(CASE WHEN a.input_time NOT NULL THEN (a.input_time - R.start_ts) ' + 247 'ELSE (a.start_point- R.start_ts) END) AS ts,(a.start_point - R.start_ts) AS dynamicStartTs,(a.end_point ' + 248 '- R.start_ts) AS dynamicEndTs FROM animation AS a,trace_range AS R ORDER BY ts;', 249 title: 'Animation chart', 250 }, 251 { 252 sql: 253 'SELECT d.id,d.x,d.y,d.width,d.height,d.alpha,d.name AS appName,(d.end_time - R.start_ts) AS ts ' + 254 'FROM dynamic_frame AS d,trace_range AS R ORDER BY d.end_time;', 255 title: 'Animation effect curve chart', 256 }, 257 { 258 sql: 259 'SELECT d.id,d.width AS currentFrameWidth,d.height AS currentFrameHeight,d.name AS nameId,(d.end_time ' + 260 '- R.start_ts) AS currentTs,d.x,d.y FROM dynamic_frame AS d,trace_range AS R ORDER BY d.end_time;', 261 title: 'Frame spacing chart', 262 }, 263]; 264 265export function getAllSql(): Array<DebugSql> { 266 return [...cpuSql, ...threadSql, ...memory, ...bioSql, ...frameTimeSql, ...appStartUpSql, ...animationSql]; 267} 268 269export interface DebugSql { 270 sql: string; 271 title: string; 272} 273