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 73 74export const queryGpuTotalType = (): Promise<Array<{ id: number; data: string }>> => 75 query( 76 'queryGpuTotalType', 77 ` 78 select distinct module_name_id id,data 79 from memory_window_gpu A, trace_range TR left join data_dict B on A.module_name_id = B.id 80 where window_name_id = 0 81 and A.ts < TR.end_ts 82 ` 83 ); 84 85export const queryGpuDataByTs = ( 86 ts: number, 87 window: number, 88 module: number | null 89): Promise< 90 Array<{ 91 windowNameId: number; 92 windowId: number; 93 moduleId: number; 94 categoryId: number; 95 size: number; 96 }> 97> => { 98 let condition = 99 module === null 100 ? `and window_name_id = ${window}` 101 : `and window_name_id = ${window} and module_name_id = ${module}`; 102 let sql = `select window_name_id as windowNameId, 103 window_id as windowId, 104 module_name_id as moduleId, 105 category_name_id as categoryId, 106 size 107 from memory_window_gpu, trace_range 108 where ts - start_ts = ${ts} ${condition} 109 `; 110 return query('queryGpuDataByTs', sql); 111}; 112 113export const queryGpuTotalData = (moduleId: number | null): Promise<Array<{ startNs: number; value: number }>> => { 114 let moduleCondition = moduleId === null ? '' : `and module_name_id = ${moduleId}`; 115 let sql = ` 116 select (ts - start_ts) startNs, sum(size) value 117 from memory_window_gpu,trace_range 118 where window_name_id = 0 ${moduleCondition} 119 and ts< end_ts 120 group by ts; 121 `; 122 return query('queryGpuTotalData', sql); 123}; 124 125// GL 或 Graph 泳道图 126export const queryGpuData = (ipid: number, name: string): Promise<Array<{ startNs: number; value: number }>> => { 127 let sql = ` 128 select (ts - start_ts) startNs,sum(value) value 129 from process_measure, trace_range 130 where filter_id = ( 131 select id 132 from process_measure_filter 133 where name = ${name} and ipid = ${ipid} 134 ) 135 and ts between start_ts and end_ts 136 group by ts; 137 `; 138 return query('queryGpuData', sql); 139}; 140// 判断VM Tracker Gl或 Graph泳道图是否有数据 141export const queryisExistsGpuData = ( 142 ipid: number, 143 name: string 144): Promise<Array<{ startNs: number; value: number }>> => { 145 let sql = ` 146 SELECT EXISTS ( 147 SELECT 1 148 FROM process_measure, trace_range 149 WHERE filter_id = ( 150 SELECT id 151 FROM process_measure_filter 152 WHERE name = ${name} AND ipid = ${ipid} 153 ) 154 AND ts BETWEEN start_ts AND end_ts 155 ) AS data_exists; 156 `; 157 return query('queryGpuData', sql); 158}; 159 160// GL 或 Graph 框选Tab页 161export const queryGpuDataTab = ( 162 ipid: number, 163 leftNs: number, 164 rightNs: number, 165 interval: number, 166 name: string 167): Promise<Array<{ startTs: number; size: number }>> => { 168 let sql = ` 169 select (ts - start_ts) startTs,sum(value) * 1024 size 170 from process_measure, trace_range 171 where filter_id = ( 172 select id 173 from process_measure_filter 174 where name = ${name} and ipid = ${ipid} 175 ) 176 and not ((startTs + ${interval} < ${leftNs}) or (startTs > ${rightNs})) 177 group by ts; 178 `; 179 return query('queryGpuGLDataByRange', sql); 180}; 181 182export const queryGpuDataByRange = ( 183 leftNs: number, 184 rightNs: number, 185 interval: number 186): Promise< 187 Array<{ 188 startTs: number; 189 windowId: number; 190 moduleId: number; 191 categoryId: number; 192 avgSize: number; 193 maxSize: number; 194 minSize: number; 195 }> 196> => { 197 let sql = `select (ts - start_ts) startTs, 198 window_name_id windowId, 199 module_name_id moduleId, 200 category_name_id categoryId, 201 avg(size) avgSize, 202 max(size) maxSize, 203 min(size) minSize 204 from memory_window_gpu,trace_range 205 where not ((startTs + ${interval} < ${leftNs}) or (startTs > ${rightNs})) 206 group by window_name_id,module_name_id,category_name_id 207 order by avgSize DESC; 208 `; 209 return query('queryGpuWindowData', sql); 210}; 211 212export const queryGpuWindowData = ( 213 windowId: number, 214 moduleId: number | null 215): Promise<Array<{ startNs: number; value: number }>> => { 216 let moduleCondition = moduleId === null ? '' : `and module_name_id = ${moduleId}`; 217 let sql = ` 218 select (ts - start_ts) startNs, sum(size) value 219 from memory_window_gpu,trace_range 220 where window_name_id = ${windowId} ${moduleCondition} 221 and ts < end_ts 222 group by ts; 223 `; 224 return query('queryGpuWindowData', sql); 225}; 226 227export const queryGpuWindowType = (): Promise<Array<{ id: number; data: string; pid: number }>> => 228 query( 229 'queryGpuWindowType', 230 ` 231 select distinct A.window_name_id as id,B.data, null as pid 232from memory_window_gpu A, trace_range tr left join data_dict B on A.window_name_id = B.id 233where window_name_id != 0 234and A.ts < tr.end_ts 235union all 236select distinct A.module_name_id id, B.data, A.window_name_id pid 237from memory_window_gpu A, trace_range TR left join data_dict B on A.module_name_id = B.id 238where window_name_id != 0 239and A.ts < TR.end_ts 240 ` 241 ); 242export const queryGpuDur = (id: number): Promise<any> => 243 query( 244 'queryGpuDur', 245 ` 246 SELECT dur AS gpu_dur 247 FROM gpu_slice 248 WHERE frame_row = $id;`, 249 { $id: id } 250 );