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 */ 15import { JanksStruct } from '../../bean/JanksStruct'; 16import { query } from '../SqlLite'; 17 18export const queryExpectedFrameDate = (): Promise<Array<JanksStruct>> => 19 query( 20 'queryExpectedFrameDate', 21 ` 22 SELECT 23 sf.id, 24 'frameTime' as frameType, 25 fs.ipid, 26 fs.vsync as name, 27 fs.dur as app_dur, 28 (sf.ts + sf.dur - fs.ts) as dur, 29 (fs.ts - TR.start_ts) AS ts, 30 fs.type, 31 fs.flag, 32 pro.pid, 33 pro.name as cmdline, 34 (sf.ts - TR.start_ts) AS rs_ts, 35 sf.vsync AS rs_vsync, 36 sf.dur AS rs_dur, 37 sf.ipid AS rs_ipid, 38 proc.pid AS rs_pid, 39 proc.name AS rs_name 40 FROM frame_slice AS fs 41 LEFT JOIN process AS pro ON pro.id = fs.ipid 42 LEFT JOIN frame_slice AS sf ON fs.dst = sf.id 43 LEFT JOIN process AS proc ON proc.id = sf.ipid 44 LEFT JOIN trace_range TR 45 WHERE fs.dst IS NOT NULL 46 AND fs.type = 1 47 UNION 48 SELECT 49 -1 as id, 50 'frameTime' as frameType, 51 fs.ipid, 52 fs.vsync as name, 53 fs.dur as app_dur, 54 fs.dur, 55 (fs.ts - TR.start_ts) AS ts, 56 fs.type, 57 fs.flag, 58 pro.pid, 59 pro.name as cmdline, 60 NULL AS rs_ts, 61 NULL AS rs_vsync, 62 NULL AS rs_dur, 63 NULL AS rs_ipid, 64 NULL AS rs_pid, 65 NULL AS rs_name 66 FROM frame_slice AS fs 67 LEFT JOIN process AS pro ON pro.id = fs.ipid 68 LEFT JOIN trace_range TR 69 WHERE fs.dst IS NULL 70 AND pro.name NOT LIKE '%render_service%' 71 AND fs.type = 1 72 ORDER BY ts;` 73 ); 74export const queryJumpJanksData = ( 75 processId: number, 76 vsync: number 77): //@ts-ignore 78Promise<Array<unknown>> => 79 query( 80 'queryJumpJanksData', 81 ` 82 SELECT 83 fs.id, 84 fs.ts - TR.start_ts as ts, 85 fs.vsync AS name, 86 fs.type, 87 fs.dur, 88 0 as depth, 89 'app' as frameType, 90 fs.src as src_slice, 91 fs.flag as jank_tag, 92 fs.dst as dst_slice, 93 p.pid, 94 p.name AS cmdline 95 FROM frame_slice AS fs, trace_range as TR 96 LEFT JOIN process AS p ON fs.ipid = p.ipid 97 WHERE fs.type = 0 and p.pid = $processId and fs.vsync = $vsync;`, 98 { $processId: processId, $vsync: vsync } 99 ); 100export const queryAllJankProcess = (): Promise< 101 Array<{ 102 pid: number; 103 }> 104> => 105 query( 106 'queryAllJankProcess', 107 ` 108 SELECT DISTINCT p.pid 109 FROM frame_slice AS a 110 LEFT JOIN process AS p ON a.ipid = p.ipid 111 WHERE a.flag <> 2; 112 ` 113 ); 114export const queryAllActualData = (): //@ts-ignore 115Promise<Array<unknown>> => 116 query( 117 'queryAllActualData', 118 ` 119 SELECT 120 a.id, 121 (a.ts - TR.start_ts) AS ts, 122 a.vsync AS name, 123 a.type, 124 a.dur, 125 a.src AS src_slice, 126 a.flag AS jank_tag, 127 a.dst AS dst_slice, 128 p.pid, 129 p.name AS cmdline, 130 (case when p.name like '%render_service' then 'render_service' else 'app' end) as frameType 131 FROM frame_slice AS a, trace_range AS TR 132 LEFT JOIN process AS p ON a.ipid = p.ipid 133 WHERE a.type = 0 134 AND a.flag <> 2 135 ORDER BY a.ipid, ts;` 136 ); 137export const queryActualFrameDate = (): //@ts-ignore 138Promise<Array<unknown>> => 139 query( 140 'queryActualFrameDate', 141 `SELECT 142 sf.id, 143 'frameTime' as frameType, 144 fs.ipid, 145 fs.vsync as name, 146 fs.dur as app_dur, 147 (sf.ts + sf.dur - fs.ts) as dur, 148 (fs.ts - TR.start_ts) AS ts, 149 fs.type, 150 (case when (sf.flag == 1 or fs.flag == 1 ) then 1 when (sf.flag == 3 or fs.flag == 3 ) then 3 else 0 end) as jank_tag, 151 pro.pid, 152 pro.name as cmdline, 153 (sf.ts - TR.start_ts) AS rs_ts, 154 sf.vsync AS rs_vsync, 155 sf.dur AS rs_dur, 156 sf.ipid AS rs_ipid, 157 proc.pid AS rs_pid, 158 proc.name AS rs_name 159 FROM frame_slice AS fs 160 LEFT JOIN process AS pro ON pro.id = fs.ipid 161 LEFT JOIN frame_slice AS sf ON fs.dst = sf.id 162 LEFT JOIN process AS proc ON proc.id = sf.ipid 163 LEFT JOIN trace_range TR 164 WHERE fs.dst IS NOT NULL 165 AND fs.type = 0 166 AND fs.flag <> 2 167 UNION 168 SELECT 169 -1 as id, 170 'frameTime' as frameType, 171 fs.ipid, 172 fs.vsync as name, 173 fs.dur as app_dur, 174 fs.dur, 175 (fs.ts - TR.start_ts) AS ts, 176 fs.type, 177 fs.flag as jank_tag, 178 pro.pid, 179 pro.name as cmdline, 180 NULL AS rs_ts, 181 NULL AS rs_vsync, 182 NULL AS rs_dur, 183 NULL AS rs_ipid, 184 NULL AS rs_pid, 185 NULL AS rs_name 186 FROM frame_slice AS fs 187 LEFT JOIN process AS pro ON pro.id = fs.ipid 188 LEFT JOIN trace_range TRs 189 WHERE fs.dst IS NULL 190 AND pro.name NOT LIKE '%render_service%' 191 AND fs.type = 0 192 AND fs.flag <> 2 193 ORDER BY ts;` 194 ); 195export const querySelectRangeData = ( 196 allPid: Array<number>, 197 leftNs: number, 198 rightNs: number 199): //@ts-ignore 200Promise<Array<unknown>> => 201 query( 202 'querySelectRangeData', 203 ` 204 SELECT 205 a.id, 206 (a.ts - TR.start_ts) AS startTs, 207 a.vsync AS name, 208 a.type, 209 a.dur, 210 a.src AS src_slice, 211 a.flag AS jank_tag, 212 a.dst AS dst_slice, 213 p.pid, 214 p.name AS cmdline, 215 (case when p.name like '%render_service' then 'render_service' else 'app' end) as frameType 216 FROM frame_slice AS a, trace_range AS TR 217 LEFT JOIN process AS p ON a.ipid = p.ipid 218 WHERE a.type = 0 219 AND a.flag <> 2 220 AND startTs + dur >= ${leftNs} 221 AND startTs <= ${rightNs} 222 AND p.pid IN (${allPid.join(',')});` 223 ); 224