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_ci//  VM Tracker Gpu Memory泳道图
16fb726d48Sopenharmony_ciimport type { SnapshotStruct } from '../ui-worker/ProcedureWorkerSnapshot';
17fb726d48Sopenharmony_ciimport { query } from '../SqlLite';
18fb726d48Sopenharmony_ciimport { GpuMemory, GpuMemoryComparison } from '../../bean/AbilityMonitor';
19fb726d48Sopenharmony_ciimport type { MemoryConfig } from '../../bean/MemoryConfig';
20fb726d48Sopenharmony_ci
21fb726d48Sopenharmony_ciexport const queryGpuMemoryData = (processId: number): Promise<Array<SnapshotStruct>> =>
22fb726d48Sopenharmony_ci  query(
23fb726d48Sopenharmony_ci    'queryGpuMemorySampsData',
24fb726d48Sopenharmony_ci    `SELECT
25fb726d48Sopenharmony_ci    (A.ts - B.start_ts) as startNs,
26fb726d48Sopenharmony_ci    sum(A.used_gpu_size) as value,
27fb726d48Sopenharmony_ci    A.ipid as ipid
28fb726d48Sopenharmony_ci    FROM memory_process_gpu A,trace_range B
29fb726d48Sopenharmony_ci    WHERE
30fb726d48Sopenharmony_ci    $pid = A.ipid
31fb726d48Sopenharmony_ci    AND A.ts < B.end_ts
32fb726d48Sopenharmony_ci    GROUP by A.ts;`,
33fb726d48Sopenharmony_ci    { $pid: processId }
34fb726d48Sopenharmony_ci  );
35fb726d48Sopenharmony_ci
36fb726d48Sopenharmony_ci// 判断VM Tracker Gpu Memory泳道图是否有数据
37fb726d48Sopenharmony_ciexport const queryisExistsGpuMemoryData = (processId: number): Promise<Array<SnapshotStruct>> =>
38fb726d48Sopenharmony_ci  query(
39fb726d48Sopenharmony_ci    'queryisExistsGpuMemoryData',
40fb726d48Sopenharmony_ci    `SELECT EXISTS (
41fb726d48Sopenharmony_ci      SELECT 1
42fb726d48Sopenharmony_ci      FROM memory_process_gpu A, trace_range B
43fb726d48Sopenharmony_ci      WHERE $pid = A.ipid
44fb726d48Sopenharmony_ci      AND A.ts < B.end_ts
45fb726d48Sopenharmony_ci      GROUP BY A.ts
46fb726d48Sopenharmony_ci   ) AS data_exists`,
47fb726d48Sopenharmony_ci    { $pid: processId }
48fb726d48Sopenharmony_ci  );
49fb726d48Sopenharmony_ci
50fb726d48Sopenharmony_ci//VM Tracker SkiaGpuMemory 框选
51fb726d48Sopenharmony_ciexport const getTabGpuMemoryData = (
52fb726d48Sopenharmony_ci  leftNs: number,
53fb726d48Sopenharmony_ci  rightNs: number,
54fb726d48Sopenharmony_ci  processId: number,
55fb726d48Sopenharmony_ci  dur: number
56fb726d48Sopenharmony_ci): Promise<Array<GpuMemory>> =>
57fb726d48Sopenharmony_ci  query<GpuMemory>(
58fb726d48Sopenharmony_ci    'getTabGpuMemoryData',
59fb726d48Sopenharmony_ci    `SELECT  
60fb726d48Sopenharmony_ci      (S.ts-TR.start_ts) as startNs,
61fb726d48Sopenharmony_ci      gpu_name_id as gpuNameId,
62fb726d48Sopenharmony_ci      T.tid as threadId,
63fb726d48Sopenharmony_ci      T.name as threadName,
64fb726d48Sopenharmony_ci      MAX(S.used_gpu_size) as maxSize,
65fb726d48Sopenharmony_ci      MIN(S.used_gpu_size) as minSize,
66fb726d48Sopenharmony_ci      Avg(S.used_gpu_size) as avgSize
67fb726d48Sopenharmony_ci      from trace_range as TR,memory_process_gpu as S
68fb726d48Sopenharmony_ci      left join thread as T on T.itid=S.itid
69fb726d48Sopenharmony_ci      where
70fb726d48Sopenharmony_ci       $leftNS <= startNs + ${dur}
71fb726d48Sopenharmony_ci      and
72fb726d48Sopenharmony_ci      $rightNS >= startNs
73fb726d48Sopenharmony_ci      and
74fb726d48Sopenharmony_ci        $pid = S.ipid
75fb726d48Sopenharmony_ci      group by gpu_name_id,threadId
76fb726d48Sopenharmony_ci              `,
77fb726d48Sopenharmony_ci    { $leftNS: leftNs, $rightNS: rightNs, $pid: processId }
78fb726d48Sopenharmony_ci  );
79fb726d48Sopenharmony_ci
80fb726d48Sopenharmony_ci//VM Tracker SkiaGpuMemory 点选
81fb726d48Sopenharmony_ciexport const getTabGpuMemoryVMTrackerClickData = (startNs: number, processId: number):
82fb726d48Sopenharmony_ci  Promise<Array<GpuMemory>> =>
83fb726d48Sopenharmony_ci  query<GpuMemory>(
84fb726d48Sopenharmony_ci    'getTabGpuMemoryVMTrackerClickData',
85fb726d48Sopenharmony_ci    `SELECT
86fb726d48Sopenharmony_ci    (S.ts-TR.start_ts) as startNs,
87fb726d48Sopenharmony_ci    S.used_gpu_size as size,
88fb726d48Sopenharmony_ci    T.tid as threadId,
89fb726d48Sopenharmony_ci    T.name as threadName,
90fb726d48Sopenharmony_ci    A.data as gpuName
91fb726d48Sopenharmony_ci    from trace_range as TR,memory_process_gpu as S
92fb726d48Sopenharmony_ci    left join thread as T on T.itid=S.itid
93fb726d48Sopenharmony_ci    left join data_dict as A on A.id=S.gpu_name_id
94fb726d48Sopenharmony_ci    WHERE
95fb726d48Sopenharmony_ci    startNs = ${startNs}
96fb726d48Sopenharmony_ci    AND
97fb726d48Sopenharmony_ci    $pid = S.ipid
98fb726d48Sopenharmony_ci              `,
99fb726d48Sopenharmony_ci    { $startNs: startNs, $pid: processId }
100fb726d48Sopenharmony_ci  );
101fb726d48Sopenharmony_ci
102fb726d48Sopenharmony_ci//VM Tracker Gpu Memory 点选比较
103fb726d48Sopenharmony_ciexport const getTabGpuMemoryVmTrackerComparisonData = (
104fb726d48Sopenharmony_ci  startNs: number,
105fb726d48Sopenharmony_ci  processId: number
106fb726d48Sopenharmony_ci): Promise<Array<GpuMemoryComparison>> =>
107fb726d48Sopenharmony_ci  query<GpuMemoryComparison>(
108fb726d48Sopenharmony_ci    'getTabGpuMemoryVmTrackerComparisonData',
109fb726d48Sopenharmony_ci    `SELECT
110fb726d48Sopenharmony_ci    (S.ts-TR.start_ts) as startNs,
111fb726d48Sopenharmony_ci    sum(S.used_gpu_size) as value,
112fb726d48Sopenharmony_ci    T.tid as threadId,
113fb726d48Sopenharmony_ci    T.name as threadName,
114fb726d48Sopenharmony_ci    S.gpu_name_id as gpuNameId
115fb726d48Sopenharmony_ci    from trace_range as TR,memory_process_gpu as S
116fb726d48Sopenharmony_ci    left join thread as T on T.itid=S.itid
117fb726d48Sopenharmony_ci    WHERE
118fb726d48Sopenharmony_ci    startNs = ${startNs}
119fb726d48Sopenharmony_ci    AND
120fb726d48Sopenharmony_ci    $pid = S.ipid
121fb726d48Sopenharmony_ci                `,
122fb726d48Sopenharmony_ci    { $startNs: startNs, $pid: processId }
123fb726d48Sopenharmony_ci  );
124fb726d48Sopenharmony_ci
125fb726d48Sopenharmony_ciexport const queryMemFilterIdMaxValue = (): Promise<Array<{ filterId: number; maxValue: number }>> => {
126fb726d48Sopenharmony_ci  return query(
127fb726d48Sopenharmony_ci    'queryMemFilterIdMaxValue',
128fb726d48Sopenharmony_ci    `select filter_id as filterId,max(value) maxValue from process_measure group by filter_id;`
129fb726d48Sopenharmony_ci  );
130fb726d48Sopenharmony_ci};
131fb726d48Sopenharmony_ci
132fb726d48Sopenharmony_ciexport const getTabVirtualMemoryType = (startTime: number, endTime: number): Promise<Array<string>> =>
133fb726d48Sopenharmony_ci  query(
134fb726d48Sopenharmony_ci    'getTabVirtualMemoryType',
135fb726d48Sopenharmony_ci    `
136fb726d48Sopenharmony_ci    SELECT type from paged_memory_sample s,trace_range t
137fb726d48Sopenharmony_ci     WHERE s.end_ts >= $startTime + t.start_ts 
138fb726d48Sopenharmony_ci     and s.start_ts <= $endTime + t.start_ts 
139fb726d48Sopenharmony_ci     group by type`,
140fb726d48Sopenharmony_ci    { $startTime: startTime, $endTime: endTime }
141fb726d48Sopenharmony_ci  );
142fb726d48Sopenharmony_ci
143fb726d48Sopenharmony_ciexport const queryNativeMemoryRealTime = (): //@ts-ignore
144fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
145fb726d48Sopenharmony_ci  query(
146fb726d48Sopenharmony_ci    'queryNativeMemoryRealTime',
147fb726d48Sopenharmony_ci    `select cs.ts,cs.clock_name from datasource_clockid dc 
148fb726d48Sopenharmony_ci    left join clock_snapshot cs on dc.clock_id = cs.clock_id 
149fb726d48Sopenharmony_ci    where data_source_name = 'memory-plugin' or data_source_name = 'nativehook'
150fb726d48Sopenharmony_ci`,
151fb726d48Sopenharmony_ci    {}
152fb726d48Sopenharmony_ci  );
153fb726d48Sopenharmony_ci
154fb726d48Sopenharmony_ciexport const queryJsMemoryData = (): //@ts-ignore
155fb726d48Sopenharmony_ci  Promise<Array<unknown>> => query('queryJsMemoryData',
156fb726d48Sopenharmony_ci    'SELECT 1 WHERE EXISTS(SELECT 1 FROM js_heap_nodes)');
157fb726d48Sopenharmony_ci
158fb726d48Sopenharmony_ciexport const queryVmTrackerShmData = (
159fb726d48Sopenharmony_ci  iPid: number
160fb726d48Sopenharmony_ci): //@ts-ignore
161fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
162fb726d48Sopenharmony_ci  query(
163fb726d48Sopenharmony_ci    'queryVmTrackerShmData',
164fb726d48Sopenharmony_ci    `SELECT (A.ts - B.start_ts) as startNs,
165fb726d48Sopenharmony_ci      sum(A.size) as value 
166fb726d48Sopenharmony_ci    FROM
167fb726d48Sopenharmony_ci      memory_ashmem A,trace_range B 
168fb726d48Sopenharmony_ci    where
169fb726d48Sopenharmony_ci      A.ipid = ${iPid}
170fb726d48Sopenharmony_ci      AND A.ts < B.end_ts
171fb726d48Sopenharmony_ci    and
172fb726d48Sopenharmony_ci      flag = 0
173fb726d48Sopenharmony_ci    GROUP by A.ts`,
174fb726d48Sopenharmony_ci    {}
175fb726d48Sopenharmony_ci  );
176fb726d48Sopenharmony_ciexport const queryVmTrackerShmSelectionData = (
177fb726d48Sopenharmony_ci  startNs: number,
178fb726d48Sopenharmony_ci  ipid: number
179fb726d48Sopenharmony_ci): //@ts-ignore
180fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
181fb726d48Sopenharmony_ci  query(
182fb726d48Sopenharmony_ci    'queryVmTrackerShmSelectionData',
183fb726d48Sopenharmony_ci    `SELECT (A.ts - B.start_ts) as startNS,A.ipid,
184fb726d48Sopenharmony_ci             A.fd,A.size,A.adj,A.ashmem_name_id as name,
185fb726d48Sopenharmony_ci             A.ashmem_id as id,A.time,A.purged,A.ref_count as count,
186fb726d48Sopenharmony_ci             A.flag
187fb726d48Sopenharmony_ci             FROM memory_ashmem A,trace_range B 
188fb726d48Sopenharmony_ci             where startNS = ${startNs} and ipid = ${ipid};`,
189fb726d48Sopenharmony_ci    {}
190fb726d48Sopenharmony_ci  );
191fb726d48Sopenharmony_ciexport const queryMemoryConfig = async (): Promise<Array<MemoryConfig>> => {
192fb726d48Sopenharmony_ci  let keyList = await query(
193fb726d48Sopenharmony_ci    'queryIsColorIndex',
194fb726d48Sopenharmony_ci    `select
195fb726d48Sopenharmony_ci        key
196fb726d48Sopenharmony_ci      from
197fb726d48Sopenharmony_ci        trace_config`,
198fb726d48Sopenharmony_ci    {},
199fb726d48Sopenharmony_ci  );
200fb726d48Sopenharmony_ci  //@ts-ignore
201fb726d48Sopenharmony_ci  let keySql = keyList && keyList.length > 0 && keyList.some(entry => entry.key === 'ipid') ? "AND key = 'ipid'" : '';
202fb726d48Sopenharmony_ci  return query(
203fb726d48Sopenharmony_ci    'queryMemoryConfiig',
204fb726d48Sopenharmony_ci    `SELECT ipid as iPid, process.pid AS pid,
205fb726d48Sopenharmony_ci    process.name AS processName,
206fb726d48Sopenharmony_ci    (
207fb726d48Sopenharmony_ci      SELECT value 
208fb726d48Sopenharmony_ci      FROM trace_config 
209fb726d48Sopenharmony_ci      WHERE trace_source = 'memory_config' AND key = 'sample_interval') AS interval
210fb726d48Sopenharmony_ci  FROM
211fb726d48Sopenharmony_ci    trace_config
212fb726d48Sopenharmony_ci    LEFT JOIN process ON value = ipid
213fb726d48Sopenharmony_ci  WHERE
214fb726d48Sopenharmony_ci    trace_source = 'memory_config'
215fb726d48Sopenharmony_ci    ${keySql}
216fb726d48Sopenharmony_ci    ;`
217fb726d48Sopenharmony_ci  );
218fb726d48Sopenharmony_ci};
219fb726d48Sopenharmony_ci
220fb726d48Sopenharmony_ci// VM Tracker Purgeable泳道图
221fb726d48Sopenharmony_ciexport const queryPurgeableProcessData = (
222fb726d48Sopenharmony_ci  ipid: number,
223fb726d48Sopenharmony_ci  isPin?: boolean
224fb726d48Sopenharmony_ci): //@ts-ignore
225fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
226fb726d48Sopenharmony_ci  const pinSql = isPin ? ' AND a.ref_count > 0' : '';
227fb726d48Sopenharmony_ci  const names = isPin ? " ('mem.purg_pin')" : "('mem.purg_sum')";
228fb726d48Sopenharmony_ci  return query(
229fb726d48Sopenharmony_ci    'queryPurgeableProcessData',
230fb726d48Sopenharmony_ci    `SELECT startNs, sum( value ) AS value 
231fb726d48Sopenharmony_ci    FROM
232fb726d48Sopenharmony_ci        (SELECT
233fb726d48Sopenharmony_ci            m.ts - tr.start_ts AS startNs,
234fb726d48Sopenharmony_ci            sum(m.value) AS value
235fb726d48Sopenharmony_ci        FROM
236fb726d48Sopenharmony_ci            process_measure m,
237fb726d48Sopenharmony_ci            trace_range tr
238fb726d48Sopenharmony_ci            LEFT JOIN process_measure_filter f ON f.id = m.filter_id
239fb726d48Sopenharmony_ci        WHERE
240fb726d48Sopenharmony_ci            m.ts < tr.end_ts
241fb726d48Sopenharmony_ci            AND f.name = ${names}
242fb726d48Sopenharmony_ci            AND f.ipid = ${ipid}
243fb726d48Sopenharmony_ci        GROUP BY m.ts
244fb726d48Sopenharmony_ci        UNION ALL
245fb726d48Sopenharmony_ci        SELECT
246fb726d48Sopenharmony_ci            a.ts - tr.start_ts AS startNs,
247fb726d48Sopenharmony_ci            sum( a.pss ) AS value 
248fb726d48Sopenharmony_ci        FROM
249fb726d48Sopenharmony_ci            memory_ashmem a,
250fb726d48Sopenharmony_ci            trace_range tr 
251fb726d48Sopenharmony_ci        WHERE
252fb726d48Sopenharmony_ci            a.ts < tr.end_ts
253fb726d48Sopenharmony_ci            AND a.flag = 0
254fb726d48Sopenharmony_ci            AND a.ipid = ${ipid}
255fb726d48Sopenharmony_ci            ${pinSql}
256fb726d48Sopenharmony_ci            GROUP BY a.ts) 
257fb726d48Sopenharmony_ci        GROUP BY startNs`
258fb726d48Sopenharmony_ci  );
259fb726d48Sopenharmony_ci};
260fb726d48Sopenharmony_ci
261fb726d48Sopenharmony_ciexport const queryVirtualMemory = (): //@ts-ignore
262fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
263fb726d48Sopenharmony_ci  query('queryVirtualMemory',
264fb726d48Sopenharmony_ci    `select 
265fb726d48Sopenharmony_ci    id,
266fb726d48Sopenharmony_ci    name 
267fb726d48Sopenharmony_ci    from sys_event_filter where type='sys_virtual_memory_filter'`);
268fb726d48Sopenharmony_ci
269fb726d48Sopenharmony_ciexport const queryVirtualMemoryData = (
270fb726d48Sopenharmony_ci  filterId: number
271fb726d48Sopenharmony_ci): //@ts-ignore
272fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
273fb726d48Sopenharmony_ci  query(
274fb726d48Sopenharmony_ci    'queryVirtualMemoryData',
275fb726d48Sopenharmony_ci    `select ts-${window.recordStartNS} as startTime,value,filter_id as filterID 
276fb726d48Sopenharmony_ci    from sys_mem_measure where filter_id=$filter_id`,
277fb726d48Sopenharmony_ci    { $filter_id: filterId }
278fb726d48Sopenharmony_ci  );
279fb726d48Sopenharmony_ci
280fb726d48Sopenharmony_ciexport const queryTraceMemory = (): Promise<
281fb726d48Sopenharmony_ci  Array<{
282fb726d48Sopenharmony_ci    maxNum: string;
283fb726d48Sopenharmony_ci    minNum: string;
284fb726d48Sopenharmony_ci    avgNum: string;
285fb726d48Sopenharmony_ci    name: string;
286fb726d48Sopenharmony_ci    processName: string;
287fb726d48Sopenharmony_ci  }>
288fb726d48Sopenharmony_ci> =>
289fb726d48Sopenharmony_ci  query(
290fb726d48Sopenharmony_ci    'queryTraceMemory',
291fb726d48Sopenharmony_ci    `
292fb726d48Sopenharmony_ci    select
293fb726d48Sopenharmony_ci        max(value) as maxNum,
294fb726d48Sopenharmony_ci        min(value) as minNum,
295fb726d48Sopenharmony_ci        avg(value) as avgNum,
296fb726d48Sopenharmony_ci        filter.name as name,
297fb726d48Sopenharmony_ci        p.name as processName
298fb726d48Sopenharmony_ci        from process_measure
299fb726d48Sopenharmony_ci        left join process_measure_filter as filter on filter.id= filter_id
300fb726d48Sopenharmony_ci        left join process as p on p.id = filter.ipid
301fb726d48Sopenharmony_ci    where 
302fb726d48Sopenharmony_ci    filter_id > 0 
303fb726d48Sopenharmony_ci    and 
304fb726d48Sopenharmony_ci    filter.name = 'mem.rss.anon' 
305fb726d48Sopenharmony_ci    group by 
306fb726d48Sopenharmony_ci    filter_id 
307fb726d48Sopenharmony_ci    order by 
308fb726d48Sopenharmony_ci    avgNum desc`
309fb726d48Sopenharmony_ci  );
310fb726d48Sopenharmony_ci
311fb726d48Sopenharmony_ciexport const queryTraceMemoryTop = (): Promise<
312fb726d48Sopenharmony_ci  Array<{
313fb726d48Sopenharmony_ci    maxNum: string;
314fb726d48Sopenharmony_ci    minNum: string;
315fb726d48Sopenharmony_ci    avgNum: string;
316fb726d48Sopenharmony_ci    name: string;
317fb726d48Sopenharmony_ci    processName: string;
318fb726d48Sopenharmony_ci  }>
319fb726d48Sopenharmony_ci> =>
320fb726d48Sopenharmony_ci  query(
321fb726d48Sopenharmony_ci    'queryTraceMemoryTop',
322fb726d48Sopenharmony_ci    `
323fb726d48Sopenharmony_ci    select
324fb726d48Sopenharmony_ci        max(value) as maxNum,
325fb726d48Sopenharmony_ci        min(value) as minNum,
326fb726d48Sopenharmony_ci        avg(value) as avgNum,
327fb726d48Sopenharmony_ci        f.name as name,
328fb726d48Sopenharmony_ci        p.name as processName
329fb726d48Sopenharmony_ci        from process_measure
330fb726d48Sopenharmony_ci        left join process_measure_filter as f on f.id= filter_id
331fb726d48Sopenharmony_ci        left join process as p on p.id = f.ipid
332fb726d48Sopenharmony_ci    where
333fb726d48Sopenharmony_ci    filter_id > 0
334fb726d48Sopenharmony_ci    and
335fb726d48Sopenharmony_ci    f.name = 'mem.rss.anon'
336fb726d48Sopenharmony_ci    group by
337fb726d48Sopenharmony_ci    filter_id
338fb726d48Sopenharmony_ci    order by
339fb726d48Sopenharmony_ci    avgNum desc limit 10`
340fb726d48Sopenharmony_ci  );
341fb726d48Sopenharmony_ci
342fb726d48Sopenharmony_ciexport const queryTraceMemoryUnAgg = (): Promise<
343fb726d48Sopenharmony_ci  Array<{
344fb726d48Sopenharmony_ci    processName: string;
345fb726d48Sopenharmony_ci    name: string;
346fb726d48Sopenharmony_ci    value: string;
347fb726d48Sopenharmony_ci    ts: string;
348fb726d48Sopenharmony_ci  }>
349fb726d48Sopenharmony_ci> =>
350fb726d48Sopenharmony_ci  query(
351fb726d48Sopenharmony_ci    'queryTraceMemoryUnAgg',
352fb726d48Sopenharmony_ci    `
353fb726d48Sopenharmony_ci    select
354fb726d48Sopenharmony_ci        p.name as processName,
355fb726d48Sopenharmony_ci        group_concat(filter.name) as name,
356fb726d48Sopenharmony_ci        cast(group_concat(value) as varchar) as value,
357fb726d48Sopenharmony_ci        cast(group_concat(ts) as varchar) as ts
358fb726d48Sopenharmony_ci        from process_measure m
359fb726d48Sopenharmony_ci        left join process_measure_filter as filter on filter.id= m.filter_id
360fb726d48Sopenharmony_ci        left join process as p on p.id = filter.ipid
361fb726d48Sopenharmony_ci        where 
362fb726d48Sopenharmony_ci        filter.name = 'mem.rss.anon' 
363fb726d48Sopenharmony_ci        or 
364fb726d48Sopenharmony_ci        filter.name = 'mem.rss.file' 
365fb726d48Sopenharmony_ci        or 
366fb726d48Sopenharmony_ci        filter.name = 'mem.swap' 
367fb726d48Sopenharmony_ci        or 
368fb726d48Sopenharmony_ci        filter.name = 'oom_score_adj'
369fb726d48Sopenharmony_ci    group by 
370fb726d48Sopenharmony_ci    p.name,filter.ipid 
371fb726d48Sopenharmony_ci    order by 
372fb726d48Sopenharmony_ci    filter.ipid`
373fb726d48Sopenharmony_ci  );
374fb726d48Sopenharmony_ci
375fb726d48Sopenharmony_ciexport const queryMemoryMaxData = (
376fb726d48Sopenharmony_ci  memoryName: string
377fb726d48Sopenharmony_ci): //@ts-ignore
378fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
379fb726d48Sopenharmony_ci  query(
380fb726d48Sopenharmony_ci    'queryMemoryMaxData',
381fb726d48Sopenharmony_ci    `SELECT ifnull(max(m.value),0) as maxValue,
382fb726d48Sopenharmony_ci            filter_id 
383fb726d48Sopenharmony_ci            from sys_mem_measure m 
384fb726d48Sopenharmony_ci            WHERE m.filter_id =
385fb726d48Sopenharmony_ci            (SELECT id FROM sys_event_filter WHERE name = $memoryName)
386fb726d48Sopenharmony_ci`,
387fb726d48Sopenharmony_ci    { $memoryName: memoryName }
388fb726d48Sopenharmony_ci  );
389fb726d48Sopenharmony_ci
390fb726d48Sopenharmony_ciexport const getTabPaneVirtualMemoryStatisticsData = (
391fb726d48Sopenharmony_ci  leftNs: number,
392fb726d48Sopenharmony_ci  rightNs: number
393fb726d48Sopenharmony_ci): //@ts-ignore
394fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
395fb726d48Sopenharmony_ci  query(
396fb726d48Sopenharmony_ci    'getTabPaneVirtualMemoryStatisticsData',
397fb726d48Sopenharmony_ci    `
398fb726d48Sopenharmony_ci    select p.pid,
399fb726d48Sopenharmony_ci       t.tid,
400fb726d48Sopenharmony_ci       ifnull(p.name,'Process') as pname,
401fb726d48Sopenharmony_ci       ifnull(t.name,'Thread') as tname,
402fb726d48Sopenharmony_ci       f.type,
403fb726d48Sopenharmony_ci       f.ipid,
404fb726d48Sopenharmony_ci       f.itid,
405fb726d48Sopenharmony_ci       count(f.ipid) as count,
406fb726d48Sopenharmony_ci       sum(dur) as allDuration,
407fb726d48Sopenharmony_ci       min(dur) as minDuration,
408fb726d48Sopenharmony_ci       max(dur) as maxDuration,
409fb726d48Sopenharmony_ci       avg(dur) as avgDuration
410fb726d48Sopenharmony_ci    from paged_memory_sample as f 
411fb726d48Sopenharmony_ci    left join process as p on f.ipid=p.ipid left join thread as t on f.itid=t.itid
412fb726d48Sopenharmony_ci    where f.end_ts >= $leftNs
413fb726d48Sopenharmony_ci    and f.start_ts <= $rightNs
414fb726d48Sopenharmony_ci    group by f.type,f.ipid,f.itid
415fb726d48Sopenharmony_ci    order by f.type;
416fb726d48Sopenharmony_ci`,
417fb726d48Sopenharmony_ci    { $leftNs: leftNs, $rightNs: rightNs }
418fb726d48Sopenharmony_ci  );
419fb726d48Sopenharmony_ci
420fb726d48Sopenharmony_ciexport const getFileSysVirtualMemoryChartData = (): //@ts-ignore
421fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
422fb726d48Sopenharmony_ci  query(
423fb726d48Sopenharmony_ci    'getFileSysVirtualMemoryChartData',
424fb726d48Sopenharmony_ci    `
425fb726d48Sopenharmony_ci    select
426fb726d48Sopenharmony_ci       (A.start_ts -B.start_ts) as startNS,
427fb726d48Sopenharmony_ci       (A.end_ts - B.start_ts) as endNS,
428fb726d48Sopenharmony_ci       dur as dur
429fb726d48Sopenharmony_ci    from paged_memory_sample A,trace_range B
430fb726d48Sopenharmony_ci    where startNS > 0
431fb726d48Sopenharmony_ci    order by A.start_ts;`,
432fb726d48Sopenharmony_ci    {}
433fb726d48Sopenharmony_ci  );
434fb726d48Sopenharmony_ci
435fb726d48Sopenharmony_ciexport const hasFileSysData = (): //@ts-ignore
436fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
437fb726d48Sopenharmony_ci  query(
438fb726d48Sopenharmony_ci    'hasFileSysData',
439fb726d48Sopenharmony_ci    `
440fb726d48Sopenharmony_ci    select 
441fb726d48Sopenharmony_ci        fsCount,
442fb726d48Sopenharmony_ci        vmCount,
443fb726d48Sopenharmony_ci        ioCount from
444fb726d48Sopenharmony_ci        (select count(1) as fsCount from file_system_sample s,trace_range t where (s.start_ts between t.start_ts and t.end_ts) or (s.end_ts between t.start_ts and t.end_ts) )
445fb726d48Sopenharmony_ci        ,(select count(1) as vmCount from paged_memory_sample s,trace_range t where (s.start_ts between t.start_ts and t.end_ts) or (s.end_ts between t.start_ts and t.end_ts) )
446fb726d48Sopenharmony_ci        ,(select count(1) as ioCount from bio_latency_sample s,trace_range t where (s.start_ts between t.start_ts and t.end_ts) or (s.end_ts between t.start_ts and t.end_ts) );
447fb726d48Sopenharmony_ci    `,
448fb726d48Sopenharmony_ci    {}
449fb726d48Sopenharmony_ci  );
450fb726d48Sopenharmony_ci
451fb726d48Sopenharmony_ciexport const queryEbpfSamplesCount = (
452fb726d48Sopenharmony_ci  startTime: number,
453fb726d48Sopenharmony_ci  endTime: number,
454fb726d48Sopenharmony_ci  ipids: number[]
455fb726d48Sopenharmony_ci): //@ts-ignore
456fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
457fb726d48Sopenharmony_ci  query(
458fb726d48Sopenharmony_ci    'queryEbpfSamplesCount',
459fb726d48Sopenharmony_ci    `
460fb726d48Sopenharmony_ci    select
461fb726d48Sopenharmony_ci    fsCount,
462fb726d48Sopenharmony_ci    vmCount 
463fb726d48Sopenharmony_ci    from
464fb726d48Sopenharmony_ci    (select count(1) as fsCount from file_system_sample s,trace_range t 
465fb726d48Sopenharmony_ci    where s.end_ts between $startTime + t.start_ts and $endTime + t.start_ts ${ipids.length > 0 ? `and s.ipid in (${ipids.join(',')})` : ''
466fb726d48Sopenharmony_ci    })
467fb726d48Sopenharmony_ci,(select count(1) as vmCount from paged_memory_sample s,trace_range t 
468fb726d48Sopenharmony_ciwhere s.end_ts between $startTime + t.start_ts and $endTime + t.start_ts ${ipids.length > 0 ? `and s.ipid in (${ipids.join(',')})` : ''
469fb726d48Sopenharmony_ci    });
470fb726d48Sopenharmony_ci`,
471fb726d48Sopenharmony_ci    { $startTime: startTime, $endTime: endTime }
472fb726d48Sopenharmony_ci  );
473fb726d48Sopenharmony_ci
474fb726d48Sopenharmony_ciexport const queryisExistsShmData = (
475fb726d48Sopenharmony_ci  iPid: number
476fb726d48Sopenharmony_ci): //@ts-ignore
477fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
478fb726d48Sopenharmony_ci  query(
479fb726d48Sopenharmony_ci    'queryisExistsShmData',
480fb726d48Sopenharmony_ci    `SELECT EXISTS (
481fb726d48Sopenharmony_ci        SELECT 1
482fb726d48Sopenharmony_ci        FROM memory_ashmem A,trace_range B 
483fb726d48Sopenharmony_ci        where A.ipid = ${iPid}
484fb726d48Sopenharmony_ci        AND A.ts < B.end_ts
485fb726d48Sopenharmony_ci        AND flag = 0
486fb726d48Sopenharmony_ci        GROUP BY A.ts
487fb726d48Sopenharmony_ci    ) AS data_exists`,
488fb726d48Sopenharmony_ci    {}
489fb726d48Sopenharmony_ci  );
490fb726d48Sopenharmony_ci
491fb726d48Sopenharmony_ciexport const queryVmTrackerShmSizeData = (
492fb726d48Sopenharmony_ci  leftNs: number,
493fb726d48Sopenharmony_ci  rightNs: number,
494fb726d48Sopenharmony_ci  iPid: number,
495fb726d48Sopenharmony_ci  dur: number
496fb726d48Sopenharmony_ci): //@ts-ignore
497fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
498fb726d48Sopenharmony_ci  query(
499fb726d48Sopenharmony_ci    'queryVmTrackerShmSizeData',
500fb726d48Sopenharmony_ci    `SELECT ( A.ts - B.start_ts ) AS startNS,
501fb726d48Sopenharmony_ci        A.flag,
502fb726d48Sopenharmony_ci        avg( A.size ) AS avg,
503fb726d48Sopenharmony_ci        max( A.size ) AS max,
504fb726d48Sopenharmony_ci        min( A.size ) AS min,
505fb726d48Sopenharmony_ci        sum( A.size ) AS sum 
506fb726d48Sopenharmony_ci      FROM
507fb726d48Sopenharmony_ci        memory_ashmem A,
508fb726d48Sopenharmony_ci        trace_range B 
509fb726d48Sopenharmony_ci      WHERE 
510fb726d48Sopenharmony_ci        startNS <= ${rightNs}  and (startNS+ ${dur}) >=${leftNs}
511fb726d48Sopenharmony_ci        AND ipid = ${iPid}`,
512fb726d48Sopenharmony_ci    {}
513fb726d48Sopenharmony_ci  );
514fb726d48Sopenharmony_ci
515fb726d48Sopenharmony_ciexport const queryisExistsPurgeableData = (
516fb726d48Sopenharmony_ci  ipid: number,
517fb726d48Sopenharmony_ci  isPin?: boolean
518fb726d48Sopenharmony_ci): //@ts-ignore
519fb726d48Sopenharmony_ci  Promise<Array<unknown>> => {
520fb726d48Sopenharmony_ci  const pinSql = isPin ? ' AND a.ref_count > 0' : '';
521fb726d48Sopenharmony_ci  const names = isPin ? " ('mem.purg_pin')" : "('mem.purg_sum')";
522fb726d48Sopenharmony_ci  return query(
523fb726d48Sopenharmony_ci    'queryisExistsPurgeableData',
524fb726d48Sopenharmony_ci    `SELECT EXISTS (
525fb726d48Sopenharmony_ci        SELECT 1
526fb726d48Sopenharmony_ci        FROM
527fb726d48Sopenharmony_ci          (SELECT 1
528fb726d48Sopenharmony_ci          FROM
529fb726d48Sopenharmony_ci              process_measure m,
530fb726d48Sopenharmony_ci              trace_range tr
531fb726d48Sopenharmony_ci              LEFT JOIN process_measure_filter f ON f.id = m.filter_id
532fb726d48Sopenharmony_ci          WHERE
533fb726d48Sopenharmony_ci              m.ts < tr.end_ts
534fb726d48Sopenharmony_ci              AND f.name = ${names}
535fb726d48Sopenharmony_ci              AND f.ipid = ${ipid}
536fb726d48Sopenharmony_ci          UNION ALL
537fb726d48Sopenharmony_ci          SELECT 1
538fb726d48Sopenharmony_ci          FROM
539fb726d48Sopenharmony_ci              memory_ashmem a,
540fb726d48Sopenharmony_ci              trace_range tr
541fb726d48Sopenharmony_ci          WHERE
542fb726d48Sopenharmony_ci              a.ts < tr.end_ts
543fb726d48Sopenharmony_ci              AND a.flag = 0
544fb726d48Sopenharmony_ci              AND a.ipid = ${ipid}
545fb726d48Sopenharmony_ci              ${pinSql})
546fb726d48Sopenharmony_ci        ) AS data_exists`
547fb726d48Sopenharmony_ci  );
548fb726d48Sopenharmony_ci};
549