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// VM Tracker Gpu Resourcet泳道图 16import type { SnapshotStruct } from '../ui-worker/ProcedureWorkerSnapshot'; 17import { query } from '../SqlLite'; 18 19export const queryGpuResourceData = (categoryNameId: number): Promise<Array<SnapshotStruct>> => 20 query( 21 'queryGpuResourceData', 22 `SELECT 23 subquery1.startNs, 24 IFNULL(subquery1.totalSize, 0) as aSize, 25 IFNULL(subquery2.size, 0) as bSize, 26 (IFNULL(subquery1.totalSize, 0) - IFNULL(subquery2.size, 0)) AS value 27 FROM 28 (SELECT (ts - start_ts) AS startNs,SUM(total_size) AS totalSize 29 FROM memory_profile, trace_range 30 WHERE ts between start_ts and end_ts 31 GROUP BY ts) AS subquery1 32 LEFT JOIN 33 (SELECT (ts - start_ts) AS startNs, SUM(size) AS size 34 FROM memory_window_gpu, trace_range 35 WHERE ts between start_ts and end_ts 36 AND category_name_id = ${categoryNameId} 37 GROUP BY ts) AS subquery2 38 ON subquery1.startNs = subquery2.startNs` 39 ); 40export const queryisExistsGpuResourceData = (categoryNameId: number): Promise<Array<SnapshotStruct>> => 41 query( 42 'queryisExistsGpuResourceData', 43 `SELECT EXISTS ( 44 SELECT 1 45 FROM 46 (SELECT (ts - start_ts) AS startNs 47 FROM memory_profile, trace_range 48 WHERE ts between start_ts and end_ts 49 GROUP BY ts) AS subquery1 50 LEFT JOIN 51 (SELECT (ts - start_ts) AS startNs 52 FROM memory_window_gpu, trace_range 53 WHERE ts between start_ts and end_ts 54 AND category_name_id = ${categoryNameId} 55 GROUP BY ts) AS subquery2 56 ON subquery1.startNs = subquery2.startNs 57 ) AS data_exists 58 ` 59 ); 60 61// VM Tracker Gpu Resource Tab页 62export const queryGpuResourceTabData = ( 63 startNs: number 64): Promise<Array<{ startNs: number; channelId: number; totalSize: number }>> => 65 query( 66 'queryGpuResourceTabData', 67 `SELECT (ts - start_ts) as startNs, channel_id as channelId, sum(total_size) as totalSize 68 FROM memory_profile, trace_range 69 WHERE (ts - start_ts) = ${startNs} 70 GROUP by ts, channelId` 71 ); 72 73export const queryGpuTotalType = (): Promise<Array<{ id: number; data: string }>> => 74 query( 75 'queryGpuTotalType', 76 ` 77 select distinct module_name_id id,data 78 from memory_window_gpu A, trace_range TR left join data_dict B on A.module_name_id = B.id 79 where window_name_id = 0 80 and A.ts < TR.end_ts 81 ` 82 ); 83 84export const queryGpuDataByTs = ( 85 ts: number, 86 window: number, 87 module: number | null 88): Promise< 89 Array<{ 90 windowNameId: number; 91 windowId: number; 92 moduleId: number; 93 categoryId: number; 94 size: number; 95 }> 96> => { 97 let condition = 98 module === null 99 ? `and window_name_id = ${window}` 100 : `and window_name_id = ${window} and module_name_id = ${module}`; 101 let sql = `select window_name_id as windowNameId, 102 window_id as windowId, 103 module_name_id as moduleId, 104 category_name_id as categoryId, 105 size 106 from memory_window_gpu, trace_range 107 where ts - start_ts = ${ts} ${condition} 108 `; 109 return query('queryGpuDataByTs', sql); 110}; 111 112export const queryGpuTotalData = (moduleId: number | null): Promise<Array<{ startNs: number; value: number }>> => { 113 let moduleCondition = moduleId === null ? '' : `and module_name_id = ${moduleId}`; 114 let sql = ` 115 select (ts - start_ts) startNs, sum(size) value 116 from memory_window_gpu,trace_range 117 where window_name_id = 0 ${moduleCondition} 118 and ts< end_ts 119 group by ts; 120 `; 121 return query('queryGpuTotalData', sql); 122}; 123 124// GL 或 Graph 泳道图 125export const queryGpuData = (ipid: number, name: string): Promise<Array<{ startNs: number; value: number }>> => { 126 let sql = ` 127 select (ts - start_ts) startNs,sum(value) value 128 from process_measure, trace_range 129 where filter_id = ( 130 select id 131 from process_measure_filter 132 where name = ${name} and ipid = ${ipid} 133 ) 134 and ts between start_ts and end_ts 135 group by ts; 136 `; 137 return query('queryGpuData', sql); 138}; 139// 判断VM Tracker Gl或 Graph泳道图是否有数据 140export const queryisExistsGpuData = ( 141 ipid: number, 142 name: string 143): Promise<Array<{ startNs: number; value: number }>> => { 144 let sql = ` 145 SELECT EXISTS ( 146 SELECT 1 147 FROM process_measure, trace_range 148 WHERE filter_id = ( 149 SELECT id 150 FROM process_measure_filter 151 WHERE name = ${name} AND ipid = ${ipid} 152 ) 153 AND ts BETWEEN start_ts AND end_ts 154 ) AS data_exists; 155 `; 156 return query('queryGpuData', sql); 157}; 158 159// GL 或 Graph 框选Tab页 160export const queryGpuDataTab = ( 161 ipid: number, 162 leftNs: number, 163 rightNs: number, 164 interval: number, 165 name: string 166): Promise<Array<{ startTs: number; size: number }>> => { 167 let sql = ` 168 select (ts - start_ts) startTs,sum(value) * 1024 size 169 from process_measure, trace_range 170 where filter_id = ( 171 select id 172 from process_measure_filter 173 where name = ${name} and ipid = ${ipid} 174 ) 175 and not ((startTs + ${interval} < ${leftNs}) or (startTs > ${rightNs})) 176 group by ts; 177 `; 178 return query('queryGpuGLDataByRange', sql); 179}; 180 181export const queryGpuDataByRange = ( 182 leftNs: number, 183 rightNs: number, 184 interval: number 185): Promise< 186 Array<{ 187 startTs: number; 188 windowId: number; 189 moduleId: number; 190 categoryId: number; 191 avgSize: number; 192 maxSize: number; 193 minSize: number; 194 }> 195> => { 196 let sql = `select (ts - start_ts) startTs, 197 window_name_id windowId, 198 module_name_id moduleId, 199 category_name_id categoryId, 200 avg(size) avgSize, 201 max(size) maxSize, 202 min(size) minSize 203 from memory_window_gpu,trace_range 204 where not ((startTs + ${interval} < ${leftNs}) or (startTs > ${rightNs})) 205 group by window_name_id,module_name_id,category_name_id 206 order by avgSize DESC; 207 `; 208 return query('queryGpuWindowData', sql); 209}; 210 211export const queryGpuWindowData = ( 212 windowId: number, 213 moduleId: number | null 214): Promise<Array<{ startNs: number; value: number }>> => { 215 let moduleCondition = moduleId === null ? '' : `and module_name_id = ${moduleId}`; 216 let sql = ` 217 select (ts - start_ts) startNs, sum(size) value 218 from memory_window_gpu,trace_range 219 where window_name_id = ${windowId} ${moduleCondition} 220 and ts < end_ts 221 group by ts; 222 `; 223 return query('queryGpuWindowData', sql); 224}; 225 226export const queryGpuWindowType = (): Promise<Array<{ id: number; data: string; pid: number }>> => 227 query( 228 'queryGpuWindowType', 229 ` 230 select distinct A.window_name_id as id,B.data, null as pid 231from memory_window_gpu A, trace_range tr left join data_dict B on A.window_name_id = B.id 232where window_name_id != 0 233and A.ts < tr.end_ts 234union all 235select distinct A.module_name_id id, B.data, A.window_name_id pid 236from memory_window_gpu A, trace_range TR left join data_dict B on A.module_name_id = B.id 237where window_name_id != 0 238and A.ts < TR.end_ts 239 ` 240 ); 241export const queryGpuDur = ( 242 id: number 243): //@ts-ignore 244Promise<unknown[]> => 245 query( 246 'queryGpuDur', 247 ` 248 SELECT dur AS gpu_dur 249 FROM gpu_slice 250 WHERE frame_row = $id;`, 251 { $id: id } 252 ); 253