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 ` 112 ); 113export const queryAllActualData = (): //@ts-ignore 114Promise<Array<unknown>> => 115 query( 116 'queryAllActualData', 117 ` 118 SELECT 119 a.id, 120 (a.ts - TR.start_ts) AS ts, 121 a.vsync AS name, 122 a.type, 123 a.dur, 124 a.src AS src_slice, 125 a.flag AS jank_tag, 126 a.dst AS dst_slice, 127 p.pid, 128 p.name AS cmdline, 129 (case when p.name like '%render_service' then 'render_service' else 'app' end) as frameType 130 FROM frame_slice AS a, trace_range AS TR 131 LEFT JOIN process AS p ON a.ipid = p.ipid 132 WHERE a.type = 0 133 AND a.flag <> 2 134 ORDER BY a.ipid, ts;` 135 ); 136export const queryActualFrameDate = (): //@ts-ignore 137Promise<Array<unknown>> => 138 query( 139 'queryActualFrameDate', 140 `SELECT 141 sf.id, 142 'frameTime' as frameType, 143 fs.ipid, 144 fs.vsync as name, 145 fs.dur as app_dur, 146 (sf.ts + sf.dur - fs.ts) as dur, 147 (fs.ts - TR.start_ts) AS ts, 148 fs.type, 149 (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, 150 pro.pid, 151 pro.name as cmdline, 152 (sf.ts - TR.start_ts) AS rs_ts, 153 sf.vsync AS rs_vsync, 154 sf.dur AS rs_dur, 155 sf.ipid AS rs_ipid, 156 proc.pid AS rs_pid, 157 proc.name AS rs_name 158 FROM frame_slice AS fs 159 LEFT JOIN process AS pro ON pro.id = fs.ipid 160 LEFT JOIN frame_slice AS sf ON fs.dst = sf.id 161 LEFT JOIN process AS proc ON proc.id = sf.ipid 162 LEFT JOIN trace_range TR 163 WHERE fs.dst IS NOT NULL 164 AND fs.type = 0 165 AND fs.flag <> 2 166 UNION 167 SELECT 168 -1 as id, 169 'frameTime' as frameType, 170 fs.ipid, 171 fs.vsync as name, 172 fs.dur as app_dur, 173 fs.dur, 174 (fs.ts - TR.start_ts) AS ts, 175 fs.type, 176 fs.flag as jank_tag, 177 pro.pid, 178 pro.name as cmdline, 179 NULL AS rs_ts, 180 NULL AS rs_vsync, 181 NULL AS rs_dur, 182 NULL AS rs_ipid, 183 NULL AS rs_pid, 184 NULL AS rs_name 185 FROM frame_slice AS fs 186 LEFT JOIN process AS pro ON pro.id = fs.ipid 187 LEFT JOIN trace_range TRs 188 WHERE fs.dst IS NULL 189 AND pro.name NOT LIKE '%render_service%' 190 AND fs.type = 0 191 AND fs.flag <> 2 192 ORDER BY ts;` 193 ); 194export const querySelectRangeData = ( 195 allPid: Array<number>, 196 leftNs: number, 197 rightNs: number 198): //@ts-ignore 199Promise<Array<unknown>> => 200 query( 201 'querySelectRangeData', 202 ` 203 SELECT 204 a.id, 205 (a.ts - TR.start_ts) AS startTs, 206 a.vsync AS name, 207 a.type, 208 a.dur, 209 a.src AS src_slice, 210 a.flag AS jank_tag, 211 a.dst AS dst_slice, 212 p.pid, 213 p.name AS cmdline, 214 (case when p.name like '%render_service' then 'render_service' else 'app' end) as frameType 215 FROM frame_slice AS a, trace_range AS TR 216 LEFT JOIN process AS p ON a.ipid = p.ipid 217 WHERE a.type = 0 218 AND a.flag <> 2 219 AND startTs + dur >= ${leftNs} 220 AND startTs <= ${rightNs} 221 AND p.pid IN (${allPid.join(',')});` 222 ); 223