• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {
16  GpuMemory,
17  GpuMemoryComparison,
18  SystemCpuSummary,
19  SystemDiskIOSummary,
20  SystemNetworkSummary
21} from "../../bean/AbilityMonitor";
22import {query} from "../SqlLite";
23import {CpuAbilityMonitorStruct} from "../ui-worker/ProcedureWorkerCpuAbility";
24import {MemoryAbilityMonitorStruct} from "../ui-worker/ProcedureWorkerMemoryAbility";
25import {DiskAbilityMonitorStruct} from "../ui-worker/ProcedureWorkerDiskIoAbility";
26import {NetworkAbilityMonitorStruct} from "../ui-worker/ProcedureWorkerNetworkAbility";
27import type {SnapshotStruct} from "../ui-worker/ProcedureWorkerSnapshot";
28
29export const getTabCpuAbilityData = (leftNs: number, rightNs: number): Promise<Array<SystemCpuSummary>> =>
30  query<SystemCpuSummary>(
31    'getTabCpuAbilityData',
32    `SELECT
33        ( n.ts - TR.start_ts ) AS startTime,
34        n.dur AS duration,
35        n.total_load AS totalLoad,
36        n.user_load AS userLoad,
37        n.system_load AS systemLoad,
38        n.process_num AS threads
39        FROM
40        cpu_usage AS n,
41        trace_range AS TR
42        WHERE
43        ( n.ts - TR.start_ts ) >= ifnull((
44        SELECT
45        ( usage.ts - TR.start_ts )
46        FROM
47        cpu_usage usage,
48        trace_range TR
49        WHERE
50        ( usage.ts - TR.start_ts ) <= $leftNS
51        ORDER BY
52        usage.ts DESC
53        LIMIT 1
54        ),0)
55        AND ( n.ts - TR.start_ts ) <= $rightNS
56        ORDER BY
57        startTime ASC;
58    `,
59    { $leftNS: leftNs, $rightNS: rightNs }
60  );
61export const getTabMemoryAbilityData = (
62  leftNs: number,
63  rightNs: number
64): Promise<
65  Array<{
66    startTime: number;
67    value: string;
68    name: string;
69  }>
70> =>
71  query(
72    'getTabMemoryAbilityData',
73    `SELECT
74        m.ts AS startTime,
75        GROUP_CONCAT( IFNULL( m.value, 0 ) ) AS value,
76        GROUP_CONCAT( f.name ) AS name
77        FROM
78        sys_mem_measure AS m
79        INNER JOIN sys_event_filter AS f ON m.filter_id = f.id
80        AND (f.name = 'sys.mem.total'
81         or f.name = 'sys.mem.free'
82         or f.name = 'sys.mem.buffers'
83         or f.name = 'sys.mem.cached'
84         or f.name = 'sys.mem.shmem'
85         or f.name = 'sys.mem.slab'
86         or f.name = 'sys.mem.swap.total'
87         or f.name = 'sys.mem.swap.free'
88         or f.name = 'sys.mem.mapped'
89         or f.name = 'sys.mem.vmalloc.used'
90         or f.name = 'sys.mem.page.tables'
91         or f.name = 'sys.mem.kernel.stack'
92         or f.name = 'sys.mem.active'
93         or f.name = 'sys.mem.inactive'
94         or f.name = 'sys.mem.unevictable'
95         or f.name = 'sys.mem.vmalloc.total'
96         or f.name = 'sys.mem.slab.unreclaimable'
97         or f.name = 'sys.mem.cma.total'
98         or f.name = 'sys.mem.cma.free'
99         or f.name = 'sys.mem.kernel.reclaimable'
100         or f.name = 'sys.mem.zram'
101         )
102        AND m.ts >= ifnull((
103        SELECT
104        m.ts AS startTime
105        FROM
106        sys_mem_measure AS m
107        INNER JOIN sys_event_filter AS f ON m.filter_id = f.id
108        AND m.ts <= $leftNS
109        AND (f.name = 'sys.mem.total'
110         or f.name = 'sys.mem.kernel.stack'
111         or f.name = 'sys.mem.free'
112         or f.name = 'sys.mem.swap.free'
113         or f.name = 'sys.mem.cma.free'
114         or f.name = 'sys.mem.inactive'
115         or f.name = 'sys.mem.buffers'
116         or f.name = 'sys.mem.cached'
117         or f.name = 'sys.mem.shmem'
118         or f.name = 'sys.mem.slab'
119         or f.name = 'sys.mem.swap.total'
120         or f.name = 'sys.mem.vmalloc.used'
121         or f.name = 'sys.mem.page.tables'
122         or f.name = 'sys.mem.active'
123         or f.name = 'sys.mem.unevictable'
124         or f.name = 'sys.mem.vmalloc.total'
125         or f.name = 'sys.mem.slab.unreclaimable'
126         or f.name = 'sys.mem.cma.total'
127         or f.name = 'sys.mem.mapped'
128         or f.name = 'sys.mem.kernel.reclaimable'
129         or f.name = 'sys.mem.zram'
130         )
131        ORDER BY
132        m.ts DESC
133        LIMIT 1
134        ),0)
135        AND m.ts <= $rightNS GROUP BY m.ts;`,
136    { $leftNS: leftNs, $rightNS: rightNs }
137  );
138export const getTabNetworkAbilityData = (leftNs: number, rightNs: number): Promise<Array<SystemNetworkSummary>> =>
139  query<SystemNetworkSummary>(
140    'getTabNetworkAbilityData',
141    `SELECT
142            ( n.ts - TR.start_ts ) AS startTime,
143            n.dur AS duration,
144            n.rx AS dataReceived,
145            n.tx_speed AS dataReceivedSec,
146            n.tx AS dataSend,
147            n.rx_speed AS dataSendSec,
148            n.packet_in AS packetsIn,
149            n.packet_in_sec AS packetsInSec,
150            n.packet_out AS packetsOut,
151            n.packet_out_sec AS packetsOutSec
152            FROM
153            network AS n,
154            trace_range AS TR
155            WHERE
156            ( n.ts - TR.start_ts ) >= ifnull((
157            SELECT
158            ( nn.ts - T.start_ts ) AS startTime
159            FROM
160            network nn,
161            trace_range T
162            WHERE
163            ( nn.ts - T.start_ts ) <= $leftNS
164            ORDER BY
165            nn.ts DESC
166            LIMIT 1
167            ),0)
168            AND ( n.ts - TR.start_ts ) <= $rightNS
169            ORDER BY
170            startTime ASC`,
171    { $leftNS: leftNs, $rightNS: rightNs }
172  );
173export const getTabDiskAbilityData = (leftNs: number, rightNs: number): Promise<Array<SystemDiskIOSummary>> =>
174  query<SystemDiskIOSummary>(
175    'getTabDiskAbilityData',
176    `SELECT
177        ( n.ts - TR.start_ts ) AS startTime,
178        n.dur AS duration,
179        n.rd AS dataRead,
180        n.rd_speed AS dataReadSec,
181        n.wr AS dataWrite,
182        n.wr_speed AS dataWriteSec,
183        n.rd_count AS readsIn,
184        n.rd_count_speed AS readsInSec,
185        n.wr_count AS writeOut,
186        n.wr_count_speed AS writeOutSec
187        FROM
188        diskio AS n,
189        trace_range AS TR
190        WHERE
191        ( n.ts - TR.start_ts ) >= ifnull((
192        SELECT
193        ( nn.ts - T.start_ts ) AS startTime
194        FROM
195        diskio AS nn,
196        trace_range AS T
197        WHERE
198        ( nn.ts - T.start_ts ) <= $leftNS
199        ORDER BY
200        nn.ts DESC
201        LIMIT 1
202        ),0)
203        AND ( n.ts - TR.start_ts ) <= $rightNS
204        ORDER BY
205        startTime ASC;
206    `,
207    { $leftNS: leftNs, $rightNS: rightNs }
208  );
209
210export const queryCpuAbilityData = (): Promise<Array<CpuAbilityMonitorStruct>> =>
211  query(
212    'queryCpuAbilityData',
213    `select
214        (t.total_load) as value,
215        (t.ts - TR.start_ts) as startNS
216        from cpu_usage t, trace_range AS TR;`
217  );
218
219export const queryCpuAbilityUserData = (): Promise<Array<CpuAbilityMonitorStruct>> =>
220  query(
221    'queryCpuAbilityUserData',
222    `select
223        t.user_load as value,
224        (t.ts - TR.start_ts) as startNS
225        from cpu_usage t, trace_range AS TR;`
226  );
227
228export const queryCpuAbilitySystemData = (): Promise<Array<CpuAbilityMonitorStruct>> =>
229  query(
230    'queryCpuAbilitySystemData',
231    `select
232        t.system_load as value,
233        (t.ts - TR.start_ts) as startNS
234        from cpu_usage t, trace_range AS TR;`
235  );
236
237export const queryMemoryUsedAbilityData = (id: string): Promise<Array<MemoryAbilityMonitorStruct>> =>
238  query(
239    'queryMemoryUsedAbilityData',
240    `select
241        t.value as value,
242        (t.ts - TR.start_ts) as startNS
243        from sys_mem_measure t, trace_range AS TR where t.filter_id = $id;`,
244    { $id: id }
245  );
246
247export const queryCachedFilesAbilityData = (id: string): Promise<Array<MemoryAbilityMonitorStruct>> =>
248  query(
249    'queryCachedFilesAbilityData',
250    `select
251        t.value as value,
252        (t.ts - TR.start_ts) as startNS
253        from sys_mem_measure t, trace_range AS TR where t.filter_id = $id;`,
254    { $id: id }
255  );
256
257
258export const queryCompressedAbilityData = (id: string): Promise<Array<MemoryAbilityMonitorStruct>> =>
259  query(
260    'queryCompressedAbilityData',
261    `select
262        t.value as value,
263        (t.ts - TR.start_ts) as startNS
264        from sys_mem_measure t, trace_range AS TR where t.filter_id = $id;`,
265    { $id: id }
266  );
267
268export const querySwapUsedAbilityData = (id: string): Promise<Array<MemoryAbilityMonitorStruct>> =>
269  query(
270    'querySwapUsedAbilityData',
271    `select
272        t.value as value,
273        (t.ts - TR.start_ts) as startNS
274        from sys_mem_measure t, trace_range AS TR where t.filter_id = $id;`,
275    { $id: id }
276  );
277
278export const queryBytesReadAbilityData = (): Promise<Array<DiskAbilityMonitorStruct>> =>
279  query(
280    'queryBytesReadAbilityData',
281    `select
282        t.rd_speed as value,
283        (t.ts - TR.start_ts) as startNS
284        from diskio t, trace_range AS TR;`
285  );
286
287export const queryBytesWrittenAbilityData = (): Promise<Array<DiskAbilityMonitorStruct>> =>
288  query(
289    'queryBytesWrittenAbilityData',
290    `select
291        t.wr_speed as value,
292        (t.ts - TR.start_ts) as startNS
293        from diskio t, trace_range AS TR;`
294  );
295
296export const queryReadAbilityData = (): Promise<Array<DiskAbilityMonitorStruct>> =>
297  query(
298    'queryReadAbilityData',
299    `select
300        t.rd_count_speed as value,
301        (t.ts - TR.start_ts) as startNS
302        from diskio t, trace_range AS TR;`
303  );
304
305export const queryWrittenAbilityData = (): Promise<Array<DiskAbilityMonitorStruct>> =>
306  query(
307    'queryWrittenAbilityData',
308    `select
309        t.wr_count_speed as value,
310        (t.ts - TR.start_ts) as startNS
311        from diskio t, trace_range AS TR;`
312  );
313
314export const queryBytesInAbilityData = (): Promise<Array<NetworkAbilityMonitorStruct>> =>
315  query(
316    'queryBytesInAbilityData',
317    `select
318        t.tx_speed as value,
319        (t.ts - TR.start_ts) as startNS
320        from network t, trace_range AS TR;`
321  );
322
323export const queryBytesOutAbilityData = (): Promise<Array<NetworkAbilityMonitorStruct>> =>
324  query(
325    'queryBytesOutAbilityData',
326    `select
327        t.rx_speed as value,
328        (t.ts - TR.start_ts) as startNS
329        from network t, trace_range AS TR;`
330  );
331
332export const queryPacketsInAbilityData = (): Promise<Array<NetworkAbilityMonitorStruct>> =>
333  query(
334    'queryPacketsInAbilityData',
335    `select
336        t.packet_in_sec as value,
337        (t.ts - TR.start_ts) as startNS
338        from network t, trace_range AS TR;`
339  );
340
341export const queryPacketsOutAbilityData = (): Promise<Array<NetworkAbilityMonitorStruct>> =>
342  query(
343    'queryPacketsOutAbilityData',
344    `select
345        t.packet_out_sec as value,
346        (t.ts - TR.start_ts) as startNS
347        from network t, trace_range AS TR;`
348  );
349export const queryAbilityExits = (): Promise<Array<any>> =>
350  query(
351    'queryAbilityExits',
352    `select
353      event_name
354      from stat s
355      where s.event_name in ('trace_diskio','trace_network', 'trace_cpu_usage','sys_memory')
356      and s.stat_type ='received' and s.count > 0`
357  );
358export const queryCPuAbilityMaxData = (): Promise<Array<any>> =>
359  query(
360    'queryCPuAbilityMaxData',
361    `select ifnull(max(total_load),0) as totalLoad,
362                ifnull(max(user_load),0) as userLoad,
363                ifnull(max(system_load),0) as systemLoad
364                from cpu_usage`
365  );
366//   Ability Monitor SkiaGpuMemory泳道图
367export const queryGpuMemoryAbilityData = (): Promise<Array<SnapshotStruct>> =>
368  query(
369    'queryGpuMemoryAbilityData',
370    `SELECT
371    (A.ts - B.start_ts) as startNs,
372    sum(A.used_gpu_size) as value
373    FROM memory_process_gpu A,trace_range B
374    WHERE A.ts < B.end_ts
375    GROUP by A.ts
376    LIMIT 1;`
377  );
378
379//   Ability Monitor Dma泳道图
380export const queryDmaAbilityData = (): Promise<Array<SnapshotStruct>> =>
381  query(
382    'queryDmaAbilityData',
383    `SELECT
384      (A.ts - B.start_ts) as startNs,
385      sum(A.size) as value,
386      E.data as expTaskComm,
387      A.flag as flag
388    FROM memory_dma A,trace_range B
389    left join data_dict as E on E.id=A.exp_task_comm_id
390    WHERE
391      A.flag = 0
392      AND A.ts < B.end_ts
393    GROUP by A.ts
394    LIMIT 1;`
395  );
396// Ability Monitor Purgeable泳道图
397export const queryPurgeableSysData = (isPin?: boolean): Promise<Array<any>> => {
398  const pinCondition = isPin ? ' AND a.ref_count > 0' : '';
399  const names = isPin ? " ('sys.mem.pined.purg')" : "('sys.mem.active.purg','sys.mem.inactive.purg')";
400  return query(
401    'queryPurgeableSysData',
402    `SELECT
403      startNs,
404      sum( value ) AS value
405  FROM
406      (
407      SELECT
408          m.ts - tr.start_ts AS startNs,
409          sum( m.value ) AS value
410      FROM
411          sys_mem_measure m,
412          trace_range tr
413          LEFT JOIN sys_event_filter f ON f.id = m.filter_id
414      WHERE
415          m.ts < tr.end_ts
416          AND f.name IN ${names}
417      GROUP BY
418          m.ts UNION ALL
419      SELECT
420          a.ts - tr.start_ts AS startNs,
421          sum( a.size ) AS value
422      FROM
423          memory_ashmem a,
424          trace_range tr
425      WHERE
426          a.ts < tr.end_ts
427          AND a.flag = 0
428          ${pinCondition}
429          GROUP BY
430              a.ts
431          )
432      GROUP BY startNs
433      LIMIT 1`
434  );
435};
436
437//Ability Monitor Purgeable 框选 tab页
438export const querySysPurgeableTab = (
439  leftNs: number,
440  rightNs: number,
441  dur: number,
442  isPin?: boolean
443): Promise<Array<any>> => {
444  let pinsql = isPin ? ' AND ref_count > 0' : '';
445  const names = isPin ? " ('sys.mem.pined.purg')" : "('sys.mem.active.purg','sys.mem.inactive.purg')";
446  return query(
447    'querySysPurgeableTab',
448    `SELECT name, MAX( size ) AS maxSize,MIN( size ) AS minSize,AVG( size ) AS avgSize
449    FROM
450        (SELECT
451          'ShmPurg' AS name,
452          ts - tr.start_ts AS startTs,
453          SUM( size ) AS size
454        FROM
455          memory_ashmem,
456          trace_range tr
457        WHERE flag = 0
458        ${pinsql}
459        GROUP BY ts UNION
460        SELECT
461        CASE
462          WHEN
463            f.name = 'sys.mem.active.purg' THEN
464              'ActivePurg'
465              WHEN f.name = 'sys.mem.inactive.purg' THEN
466              'InActivePurg' ELSE 'PinedPurg'
467            END AS name,
468            m.ts - tr.start_ts AS startTs,
469            m.value AS size
470          FROM
471            sys_mem_measure m,
472            trace_range tr
473            LEFT JOIN sys_event_filter f ON f.id = m.filter_id
474          WHERE
475            f.name IN ${names}
476          ),
477          trace_range tr
478        WHERE ${leftNs} <= startTs + ${dur} AND ${rightNs} >= startTs
479        GROUP BY name`
480  );
481};
482
483//Ability Monitor Purgeable 点选 tab页
484export const querySysPurgeableSelectionTab = (startNs: number, isPin?: boolean): Promise<Array<any>> => {
485  const pinSql = isPin ? ' AND ref_count > 0' : '';
486  const names = isPin ? " ('sys.mem.pined.purg')" : "('sys.mem.active.purg','sys.mem.inactive.purg')";
487  return query(
488    'querySysPurgeableSelectionTab',
489    `SELECT
490    ( CASE WHEN f.name = 'sys.mem.active.purg' THEN 'ActivePurg' WHEN f.name = 'sys.mem.inactive.purg' THEN 'InActivePurg' ELSE 'PinedPurg' END ) AS name,
491    m.value AS value
492    FROM
493    sys_mem_measure m,
494    trace_range tr
495    LEFT JOIN sys_event_filter f ON f.id = m.filter_id
496    WHERE
497    f.name IN ${names}
498    AND m.ts - tr.start_ts = ${startNs}
499    UNION
500    SELECT
501    'ShmPurg' AS name,
502    SUM( size ) AS value
503    FROM
504    memory_ashmem,
505    trace_range tr
506    WHERE
507    memory_ashmem.ts - tr.start_ts = ${startNs}
508    AND flag=0
509    ${pinSql}
510    GROUP BY ts`
511  );
512};
513//Ability Monitor SkiaGpuMemory 框选
514export const getTabGpuMemoryAbilityData = (leftNs: number, rightNs: number, dur: number): Promise<Array<GpuMemory>> =>
515  query<GpuMemory>(
516    'getTabGpuMemoryAbilityData',
517    `SELECT (S.ts-TR.start_ts) as startNs,
518    gpu_name_id as gpuNameId,
519    MAX(S.used_gpu_size) as maxSize,
520    MIN(S.used_gpu_size) as minSize,
521    Avg(S.used_gpu_size) as avgSize,
522    E.pid as processId,
523    E.name as processName
524    from trace_range as TR,memory_process_gpu as S
525    left join process as E on E.ipid=S.ipid
526    WHERE
527    $leftNS <= startNs + ${dur}
528    and
529    $rightNS >= startNs
530    GROUP by
531    E.pid ,S.gpu_name_id
532            `,
533    { $leftNS: leftNs, $rightNS: rightNs }
534  );
535//Ability Monitor SkiaGpuMemory 点选
536export const getTabGpuMemoryAbilityClickData = (startNs: number): Promise<Array<GpuMemory>> =>
537  query<GpuMemory>(
538    'getTabGpuMemoryAbilityClickData',
539    `SELECT
540    (S.ts-TR.start_ts) as startNs,
541    S.used_gpu_size as size,
542    E.pid as processId,
543    E.name as processName,
544    A.data as gpuName
545    from trace_range as TR,memory_process_gpu as S
546    left join process as E on E.ipid=S.ipid
547    left join data_dict as A on A.id=S.gpu_name_id
548    WHERE
549    startNs = ${startNs}
550              `,
551    { $startNs: startNs }
552  );
553//Ability Monitor Gpu Memory 点选比较
554export const getTabGpuMemoryComparisonData = (startNs: number): Promise<Array<GpuMemoryComparison>> =>
555  query<GpuMemoryComparison>(
556    'getTabGpuMemoryComparisonData',
557    `SELECT
558      (S.ts-TR.start_ts) as startNs,
559      sum(S.used_gpu_size) as value,
560      E.pid as processId,
561      S.gpu_name_id as gpuNameId,
562      E.name as processName
563      from trace_range as TR,memory_process_gpu as S
564      left join process as E on E.ipid=S.ipid
565      WHERE
566      startNs = ${startNs}
567      GROUP by
568      E.pid, S.gpu_name_id
569                `,
570    { $startNs: startNs }
571  );
572
573
574