1fb726d48Sopenharmony_ci/* 2fb726d48Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3fb726d48Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb726d48Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb726d48Sopenharmony_ci * You may obtain a copy of the License at 6fb726d48Sopenharmony_ci * 7fb726d48Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb726d48Sopenharmony_ci * 9fb726d48Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb726d48Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb726d48Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb726d48Sopenharmony_ci * See the License for the specific language governing permissions and 13fb726d48Sopenharmony_ci * limitations under the License. 14fb726d48Sopenharmony_ci */ 15fb726d48Sopenharmony_ciimport { JanksStruct } from '../../bean/JanksStruct'; 16fb726d48Sopenharmony_ciimport { query } from '../SqlLite'; 17fb726d48Sopenharmony_ci 18fb726d48Sopenharmony_ciexport const queryExpectedFrameDate = (): Promise<Array<JanksStruct>> => 19fb726d48Sopenharmony_ci query( 20fb726d48Sopenharmony_ci 'queryExpectedFrameDate', 21fb726d48Sopenharmony_ci ` 22fb726d48Sopenharmony_ci SELECT 23fb726d48Sopenharmony_ci sf.id, 24fb726d48Sopenharmony_ci 'frameTime' as frameType, 25fb726d48Sopenharmony_ci fs.ipid, 26fb726d48Sopenharmony_ci fs.vsync as name, 27fb726d48Sopenharmony_ci fs.dur as app_dur, 28fb726d48Sopenharmony_ci (sf.ts + sf.dur - fs.ts) as dur, 29fb726d48Sopenharmony_ci (fs.ts - TR.start_ts) AS ts, 30fb726d48Sopenharmony_ci fs.type, 31fb726d48Sopenharmony_ci fs.flag, 32fb726d48Sopenharmony_ci pro.pid, 33fb726d48Sopenharmony_ci pro.name as cmdline, 34fb726d48Sopenharmony_ci (sf.ts - TR.start_ts) AS rs_ts, 35fb726d48Sopenharmony_ci sf.vsync AS rs_vsync, 36fb726d48Sopenharmony_ci sf.dur AS rs_dur, 37fb726d48Sopenharmony_ci sf.ipid AS rs_ipid, 38fb726d48Sopenharmony_ci proc.pid AS rs_pid, 39fb726d48Sopenharmony_ci proc.name AS rs_name 40fb726d48Sopenharmony_ci FROM frame_slice AS fs 41fb726d48Sopenharmony_ci LEFT JOIN process AS pro ON pro.id = fs.ipid 42fb726d48Sopenharmony_ci LEFT JOIN frame_slice AS sf ON fs.dst = sf.id 43fb726d48Sopenharmony_ci LEFT JOIN process AS proc ON proc.id = sf.ipid 44fb726d48Sopenharmony_ci LEFT JOIN trace_range TR 45fb726d48Sopenharmony_ci WHERE fs.dst IS NOT NULL 46fb726d48Sopenharmony_ci AND fs.type = 1 47fb726d48Sopenharmony_ci UNION 48fb726d48Sopenharmony_ci SELECT 49fb726d48Sopenharmony_ci -1 as id, 50fb726d48Sopenharmony_ci 'frameTime' as frameType, 51fb726d48Sopenharmony_ci fs.ipid, 52fb726d48Sopenharmony_ci fs.vsync as name, 53fb726d48Sopenharmony_ci fs.dur as app_dur, 54fb726d48Sopenharmony_ci fs.dur, 55fb726d48Sopenharmony_ci (fs.ts - TR.start_ts) AS ts, 56fb726d48Sopenharmony_ci fs.type, 57fb726d48Sopenharmony_ci fs.flag, 58fb726d48Sopenharmony_ci pro.pid, 59fb726d48Sopenharmony_ci pro.name as cmdline, 60fb726d48Sopenharmony_ci NULL AS rs_ts, 61fb726d48Sopenharmony_ci NULL AS rs_vsync, 62fb726d48Sopenharmony_ci NULL AS rs_dur, 63fb726d48Sopenharmony_ci NULL AS rs_ipid, 64fb726d48Sopenharmony_ci NULL AS rs_pid, 65fb726d48Sopenharmony_ci NULL AS rs_name 66fb726d48Sopenharmony_ci FROM frame_slice AS fs 67fb726d48Sopenharmony_ci LEFT JOIN process AS pro ON pro.id = fs.ipid 68fb726d48Sopenharmony_ci LEFT JOIN trace_range TR 69fb726d48Sopenharmony_ci WHERE fs.dst IS NULL 70fb726d48Sopenharmony_ci AND pro.name NOT LIKE '%render_service%' 71fb726d48Sopenharmony_ci AND fs.type = 1 72fb726d48Sopenharmony_ci ORDER BY ts;` 73fb726d48Sopenharmony_ci ); 74fb726d48Sopenharmony_ciexport const queryJumpJanksData = ( 75fb726d48Sopenharmony_ci processId: number, 76fb726d48Sopenharmony_ci vsync: number 77fb726d48Sopenharmony_ci): //@ts-ignore 78fb726d48Sopenharmony_ciPromise<Array<unknown>> => 79fb726d48Sopenharmony_ci query( 80fb726d48Sopenharmony_ci 'queryJumpJanksData', 81fb726d48Sopenharmony_ci ` 82fb726d48Sopenharmony_ci SELECT 83fb726d48Sopenharmony_ci fs.id, 84fb726d48Sopenharmony_ci fs.ts - TR.start_ts as ts, 85fb726d48Sopenharmony_ci fs.vsync AS name, 86fb726d48Sopenharmony_ci fs.type, 87fb726d48Sopenharmony_ci fs.dur, 88fb726d48Sopenharmony_ci 0 as depth, 89fb726d48Sopenharmony_ci 'app' as frameType, 90fb726d48Sopenharmony_ci fs.src as src_slice, 91fb726d48Sopenharmony_ci fs.flag as jank_tag, 92fb726d48Sopenharmony_ci fs.dst as dst_slice, 93fb726d48Sopenharmony_ci p.pid, 94fb726d48Sopenharmony_ci p.name AS cmdline 95fb726d48Sopenharmony_ci FROM frame_slice AS fs, trace_range as TR 96fb726d48Sopenharmony_ci LEFT JOIN process AS p ON fs.ipid = p.ipid 97fb726d48Sopenharmony_ci WHERE fs.type = 0 and p.pid = $processId and fs.vsync = $vsync;`, 98fb726d48Sopenharmony_ci { $processId: processId, $vsync: vsync } 99fb726d48Sopenharmony_ci ); 100fb726d48Sopenharmony_ciexport const queryAllJankProcess = (): Promise< 101fb726d48Sopenharmony_ci Array<{ 102fb726d48Sopenharmony_ci pid: number; 103fb726d48Sopenharmony_ci }> 104fb726d48Sopenharmony_ci> => 105fb726d48Sopenharmony_ci query( 106fb726d48Sopenharmony_ci 'queryAllJankProcess', 107fb726d48Sopenharmony_ci ` 108fb726d48Sopenharmony_ci SELECT DISTINCT p.pid 109fb726d48Sopenharmony_ci FROM frame_slice AS a 110fb726d48Sopenharmony_ci LEFT JOIN process AS p ON a.ipid = p.ipid 111fb726d48Sopenharmony_ci ` 112fb726d48Sopenharmony_ci ); 113fb726d48Sopenharmony_ciexport const queryAllActualData = (): //@ts-ignore 114fb726d48Sopenharmony_ciPromise<Array<unknown>> => 115fb726d48Sopenharmony_ci query( 116fb726d48Sopenharmony_ci 'queryAllActualData', 117fb726d48Sopenharmony_ci ` 118fb726d48Sopenharmony_ci SELECT 119fb726d48Sopenharmony_ci a.id, 120fb726d48Sopenharmony_ci (a.ts - TR.start_ts) AS ts, 121fb726d48Sopenharmony_ci a.vsync AS name, 122fb726d48Sopenharmony_ci a.type, 123fb726d48Sopenharmony_ci a.dur, 124fb726d48Sopenharmony_ci a.src AS src_slice, 125fb726d48Sopenharmony_ci a.flag AS jank_tag, 126fb726d48Sopenharmony_ci a.dst AS dst_slice, 127fb726d48Sopenharmony_ci p.pid, 128fb726d48Sopenharmony_ci p.name AS cmdline, 129fb726d48Sopenharmony_ci (case when p.name like '%render_service' then 'render_service' else 'app' end) as frameType 130fb726d48Sopenharmony_ci FROM frame_slice AS a, trace_range AS TR 131fb726d48Sopenharmony_ci LEFT JOIN process AS p ON a.ipid = p.ipid 132fb726d48Sopenharmony_ci WHERE a.type = 0 133fb726d48Sopenharmony_ci AND a.flag <> 2 134fb726d48Sopenharmony_ci ORDER BY a.ipid, ts;` 135fb726d48Sopenharmony_ci ); 136fb726d48Sopenharmony_ciexport const queryActualFrameDate = (): //@ts-ignore 137fb726d48Sopenharmony_ciPromise<Array<unknown>> => 138fb726d48Sopenharmony_ci query( 139fb726d48Sopenharmony_ci 'queryActualFrameDate', 140fb726d48Sopenharmony_ci `SELECT 141fb726d48Sopenharmony_ci sf.id, 142fb726d48Sopenharmony_ci 'frameTime' as frameType, 143fb726d48Sopenharmony_ci fs.ipid, 144fb726d48Sopenharmony_ci fs.vsync as name, 145fb726d48Sopenharmony_ci fs.dur as app_dur, 146fb726d48Sopenharmony_ci (sf.ts + sf.dur - fs.ts) as dur, 147fb726d48Sopenharmony_ci (fs.ts - TR.start_ts) AS ts, 148fb726d48Sopenharmony_ci fs.type, 149fb726d48Sopenharmony_ci (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, 150fb726d48Sopenharmony_ci pro.pid, 151fb726d48Sopenharmony_ci pro.name as cmdline, 152fb726d48Sopenharmony_ci (sf.ts - TR.start_ts) AS rs_ts, 153fb726d48Sopenharmony_ci sf.vsync AS rs_vsync, 154fb726d48Sopenharmony_ci sf.dur AS rs_dur, 155fb726d48Sopenharmony_ci sf.ipid AS rs_ipid, 156fb726d48Sopenharmony_ci proc.pid AS rs_pid, 157fb726d48Sopenharmony_ci proc.name AS rs_name 158fb726d48Sopenharmony_ci FROM frame_slice AS fs 159fb726d48Sopenharmony_ci LEFT JOIN process AS pro ON pro.id = fs.ipid 160fb726d48Sopenharmony_ci LEFT JOIN frame_slice AS sf ON fs.dst = sf.id 161fb726d48Sopenharmony_ci LEFT JOIN process AS proc ON proc.id = sf.ipid 162fb726d48Sopenharmony_ci LEFT JOIN trace_range TR 163fb726d48Sopenharmony_ci WHERE fs.dst IS NOT NULL 164fb726d48Sopenharmony_ci AND fs.type = 0 165fb726d48Sopenharmony_ci AND fs.flag <> 2 166fb726d48Sopenharmony_ci UNION 167fb726d48Sopenharmony_ci SELECT 168fb726d48Sopenharmony_ci -1 as id, 169fb726d48Sopenharmony_ci 'frameTime' as frameType, 170fb726d48Sopenharmony_ci fs.ipid, 171fb726d48Sopenharmony_ci fs.vsync as name, 172fb726d48Sopenharmony_ci fs.dur as app_dur, 173fb726d48Sopenharmony_ci fs.dur, 174fb726d48Sopenharmony_ci (fs.ts - TR.start_ts) AS ts, 175fb726d48Sopenharmony_ci fs.type, 176fb726d48Sopenharmony_ci fs.flag as jank_tag, 177fb726d48Sopenharmony_ci pro.pid, 178fb726d48Sopenharmony_ci pro.name as cmdline, 179fb726d48Sopenharmony_ci NULL AS rs_ts, 180fb726d48Sopenharmony_ci NULL AS rs_vsync, 181fb726d48Sopenharmony_ci NULL AS rs_dur, 182fb726d48Sopenharmony_ci NULL AS rs_ipid, 183fb726d48Sopenharmony_ci NULL AS rs_pid, 184fb726d48Sopenharmony_ci NULL AS rs_name 185fb726d48Sopenharmony_ci FROM frame_slice AS fs 186fb726d48Sopenharmony_ci LEFT JOIN process AS pro ON pro.id = fs.ipid 187fb726d48Sopenharmony_ci LEFT JOIN trace_range TRs 188fb726d48Sopenharmony_ci WHERE fs.dst IS NULL 189fb726d48Sopenharmony_ci AND pro.name NOT LIKE '%render_service%' 190fb726d48Sopenharmony_ci AND fs.type = 0 191fb726d48Sopenharmony_ci AND fs.flag <> 2 192fb726d48Sopenharmony_ci ORDER BY ts;` 193fb726d48Sopenharmony_ci ); 194fb726d48Sopenharmony_ciexport const querySelectRangeData = ( 195fb726d48Sopenharmony_ci allPid: Array<number>, 196fb726d48Sopenharmony_ci leftNs: number, 197fb726d48Sopenharmony_ci rightNs: number 198fb726d48Sopenharmony_ci): //@ts-ignore 199fb726d48Sopenharmony_ciPromise<Array<unknown>> => 200fb726d48Sopenharmony_ci query( 201fb726d48Sopenharmony_ci 'querySelectRangeData', 202fb726d48Sopenharmony_ci ` 203fb726d48Sopenharmony_ci SELECT 204fb726d48Sopenharmony_ci a.id, 205fb726d48Sopenharmony_ci (a.ts - TR.start_ts) AS startTs, 206fb726d48Sopenharmony_ci a.vsync AS name, 207fb726d48Sopenharmony_ci a.type, 208fb726d48Sopenharmony_ci a.dur, 209fb726d48Sopenharmony_ci a.src AS src_slice, 210fb726d48Sopenharmony_ci a.flag AS jank_tag, 211fb726d48Sopenharmony_ci a.dst AS dst_slice, 212fb726d48Sopenharmony_ci p.pid, 213fb726d48Sopenharmony_ci p.name AS cmdline, 214fb726d48Sopenharmony_ci (case when p.name like '%render_service' then 'render_service' else 'app' end) as frameType 215fb726d48Sopenharmony_ci FROM frame_slice AS a, trace_range AS TR 216fb726d48Sopenharmony_ci LEFT JOIN process AS p ON a.ipid = p.ipid 217fb726d48Sopenharmony_ci WHERE a.type = 0 218fb726d48Sopenharmony_ci AND a.flag <> 2 219fb726d48Sopenharmony_ci AND startTs + dur >= ${leftNs} 220fb726d48Sopenharmony_ci AND startTs <= ${rightNs} 221fb726d48Sopenharmony_ci AND p.pid IN (${allPid.join(',')});` 222fb726d48Sopenharmony_ci ); 223