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 { query } from '../SqlLite';
16fb726d48Sopenharmony_ciimport { Smaps } from '../../bean/SmapsStruct';
17fb726d48Sopenharmony_ci
18fb726d48Sopenharmony_ciexport const querySmapsExits = (): Promise<Array<unknown>> =>
19fb726d48Sopenharmony_ci  query(
20fb726d48Sopenharmony_ci    'querySmapsExits',
21fb726d48Sopenharmony_ci    `select
22fb726d48Sopenharmony_ci      event_name
23fb726d48Sopenharmony_ci      from stat s
24fb726d48Sopenharmony_ci      where s.event_name = 'trace_smaps'
25fb726d48Sopenharmony_ci      and s.stat_type ='received' and s.count > 0`
26fb726d48Sopenharmony_ci  );
27fb726d48Sopenharmony_ci
28fb726d48Sopenharmony_ciexport const querySmapsData = (columnName: string): Promise<Array<unknown>> =>
29fb726d48Sopenharmony_ci  query(
30fb726d48Sopenharmony_ci    'querySmapsCounterData',
31fb726d48Sopenharmony_ci    `SELECT 
32fb726d48Sopenharmony_ci    (A.timestamp - B.start_ts) as startNs, 
33fb726d48Sopenharmony_ci    sum(${columnName}) * 1024 as value, 
34fb726d48Sopenharmony_ci    $columnName as name 
35fb726d48Sopenharmony_ci    FROM smaps A,trace_range B WHERE A.timestamp < B.end_ts GROUP by A.timestamp;`,
36fb726d48Sopenharmony_ci    { $columnName: columnName }
37fb726d48Sopenharmony_ci  );
38fb726d48Sopenharmony_ci
39fb726d48Sopenharmony_ciexport const querySmapsDataMax = (columnName: string): Promise<Array<unknown>> =>
40fb726d48Sopenharmony_ci  query(
41fb726d48Sopenharmony_ci    'querySmapsDataMax',
42fb726d48Sopenharmony_ci    `
43fb726d48Sopenharmony_ci   SELECT 
44fb726d48Sopenharmony_ci   (A.timestamp - B.start_ts) as startNS,
45fb726d48Sopenharmony_ci   sum(${columnName}) as max_value 
46fb726d48Sopenharmony_ci   FROM smaps A,trace_range B GROUP by A.timestamp order by max_value desc LIMIT 1`
47fb726d48Sopenharmony_ci  );
48fb726d48Sopenharmony_ci
49fb726d48Sopenharmony_ciexport const getTabSmapsMaxSize = (leftNs: number, rightNs: number, dur: number):
50fb726d48Sopenharmony_ci  Promise<Array<unknown>> =>
51fb726d48Sopenharmony_ci  query<Smaps>(
52fb726d48Sopenharmony_ci    'getTabSmapsMaxRss',
53fb726d48Sopenharmony_ci    `
54fb726d48Sopenharmony_ci      SELECT 
55fb726d48Sopenharmony_ci      (A.timestamp - B.start_ts) as startNS, 
56fb726d48Sopenharmony_ci      sum(virtaul_size) *1024 as max_value 
57fb726d48Sopenharmony_ci      FROM smaps A,trace_range B where startNS <= $rightNs and (startNS+$dur)>=$leftNs`,
58fb726d48Sopenharmony_ci    { $rightNs: rightNs, $leftNs: leftNs, $dur: dur }
59fb726d48Sopenharmony_ci  );
60fb726d48Sopenharmony_ci
61fb726d48Sopenharmony_ciexport const getTabSmapsData = (leftNs: number, rightNs: number, dur: number):
62fb726d48Sopenharmony_ci  Promise<Array<Smaps>> =>
63fb726d48Sopenharmony_ci  query<Smaps>(
64fb726d48Sopenharmony_ci    'getTabSmapsData',
65fb726d48Sopenharmony_ci    `
66fb726d48Sopenharmony_ci    SELECT
67fb726d48Sopenharmony_ci     (A.timestamp - t.start_ts) AS startNs,
68fb726d48Sopenharmony_ci     start_addr as startAddr,
69fb726d48Sopenharmony_ci     end_addr as endAddr,
70fb726d48Sopenharmony_ci     A.type,
71fb726d48Sopenharmony_ci     resident_size * 1024 AS rss,
72fb726d48Sopenharmony_ci     protection_id as pid,
73fb726d48Sopenharmony_ci     pss * 1024 as pss,virtaul_size * 1024 AS size,reside,A.path_id AS path,
74fb726d48Sopenharmony_ci     shared_clean * 1024 as sharedClean,
75fb726d48Sopenharmony_ci     shared_dirty * 1024 as sharedDirty,
76fb726d48Sopenharmony_ci     private_clean * 1024 as privateClean,
77fb726d48Sopenharmony_ci     private_dirty * 1024 as privateDirty,swap * 1024 as swap,swap_pss * 1024 as swapPss
78fb726d48Sopenharmony_ci     FROM smaps A,
79fb726d48Sopenharmony_ci     trace_range AS t
80fb726d48Sopenharmony_ci     WHERE (startNs) <= $rightNs and (startNs+$dur) >=$leftNs`,
81fb726d48Sopenharmony_ci    { $rightNs: rightNs, $leftNs: leftNs, $dur: dur },
82fb726d48Sopenharmony_ci  );
83fb726d48Sopenharmony_ciexport const getTabSmapsSampleData = (leftNs: number): Promise<Array<Smaps>> =>
84fb726d48Sopenharmony_ci  query<Smaps>(
85fb726d48Sopenharmony_ci    'getTabSmapsSampleData',
86fb726d48Sopenharmony_ci    `
87fb726d48Sopenharmony_ci      SELECT
88fb726d48Sopenharmony_ci     (A.timestamp - t.start_ts) AS startNs,
89fb726d48Sopenharmony_ci     start_addr as startAddr,
90fb726d48Sopenharmony_ci     end_addr as endAddr,
91fb726d48Sopenharmony_ci     A.type,
92fb726d48Sopenharmony_ci     resident_size * 1024 AS rss,
93fb726d48Sopenharmony_ci     protection_id as pid,
94fb726d48Sopenharmony_ci     pss * 1024 as pss,virtaul_size * 1024 AS size,reside,A.path_id AS path,
95fb726d48Sopenharmony_ci     shared_clean * 1024 as sharedClean,
96fb726d48Sopenharmony_ci     shared_dirty * 1024 as sharedDirty,
97fb726d48Sopenharmony_ci     private_clean * 1024 as privateClean,
98fb726d48Sopenharmony_ci     private_dirty * 1024 as privateDirty,swap * 1024 as swap,swap_pss * 1024 as swapPss
99fb726d48Sopenharmony_ci     FROM smaps A,
100fb726d48Sopenharmony_ci     trace_range AS t
101fb726d48Sopenharmony_ci     WHERE (startNs) = ${leftNs}`,
102fb726d48Sopenharmony_ci    { $leftNs: leftNs },
103fb726d48Sopenharmony_ci  );
104fb726d48Sopenharmony_ci// VM Tracker Smaps Record Tab页
105fb726d48Sopenharmony_ciexport const querySmapsRecordTabData = (
106fb726d48Sopenharmony_ci  startNs: number,
107fb726d48Sopenharmony_ci  ipid: number,
108fb726d48Sopenharmony_ci  pixelmapId: number,
109fb726d48Sopenharmony_ci  typeId: number
110fb726d48Sopenharmony_ci): Promise<Array<{ name: string; size: number }>> =>
111fb726d48Sopenharmony_ci  query(
112fb726d48Sopenharmony_ci    'querySmapsRecordTabData',
113fb726d48Sopenharmony_ci    `select  'RenderServiceCpu' as name, IFNULL(sum(mem_size), 0) as size 
114fb726d48Sopenharmony_ci    from memory_rs_image, trace_range tr
115fb726d48Sopenharmony_ci    where ipid = ${ipid} and (ts - tr.start_ts) = ${startNs} and type_id = ${pixelmapId}
116fb726d48Sopenharmony_ci    union all
117fb726d48Sopenharmony_ci    select 'SkiaCpu' as name, total_size as size from memory_cpu,trace_range
118fb726d48Sopenharmony_ci    where (ts - start_ts) = ${startNs}
119fb726d48Sopenharmony_ci    union all
120fb726d48Sopenharmony_ci    select 'GLESHostCache' as name, 0
121fb726d48Sopenharmony_ci    union all
122fb726d48Sopenharmony_ci    select 'VirtaulSize' as name, sum(virtaul_size) * 1024 as size from smaps, trace_range
123fb726d48Sopenharmony_ci    where type = ${typeId} and (timeStamp - start_ts) = ${startNs}`
124fb726d48Sopenharmony_ci  );
125fb726d48Sopenharmony_ci
126fb726d48Sopenharmony_ciexport const getTabSmapsStatisticMaxSize = (rightNs: number): Promise<Array<unknown>> =>
127fb726d48Sopenharmony_ci  query<Smaps>(
128fb726d48Sopenharmony_ci    'getTabSmapsStatisticMaxRss',
129fb726d48Sopenharmony_ci    `
130fb726d48Sopenharmony_ci    SELECT 
131fb726d48Sopenharmony_ci    (A.timestamp - B.start_ts) as startNS, 
132fb726d48Sopenharmony_ci    sum(virtaul_size) * 1024 as max_value 
133fb726d48Sopenharmony_ci    FROM smaps A,trace_range B where startNS = $rightNs`,
134fb726d48Sopenharmony_ci    { $rightNs: rightNs }
135fb726d48Sopenharmony_ci  );
136fb726d48Sopenharmony_ci
137fb726d48Sopenharmony_ciexport const getTabSmapsStatisticData = (rightNs: number): Promise<Array<Smaps>> =>
138fb726d48Sopenharmony_ci  query<Smaps>(
139fb726d48Sopenharmony_ci    'getTabSmapsStatisticData',
140fb726d48Sopenharmony_ci    `SELECT
141fb726d48Sopenharmony_ci     (A.timestamp - t.start_ts) AS startNs,
142fb726d48Sopenharmony_ci     start_addr as startAddr,
143fb726d48Sopenharmony_ci     end_addr as endAddr,
144fb726d48Sopenharmony_ci     A.type,
145fb726d48Sopenharmony_ci     sum(resident_size) * 1024 AS rss,
146fb726d48Sopenharmony_ci     protection_id as pid,
147fb726d48Sopenharmony_ci     count(A.path_id) as count,
148fb726d48Sopenharmony_ci     sum(pss) * 1024 as pss ,
149fb726d48Sopenharmony_ci     sum(virtaul_size) * 1024 AS size,
150fb726d48Sopenharmony_ci     sum(reside) as reside,
151fb726d48Sopenharmony_ci     A.path_id AS path,
152fb726d48Sopenharmony_ci     sum(shared_clean) * 1024 as sharedClean,sum(shared_dirty) * 1024 as sharedDirty,
153fb726d48Sopenharmony_ci     sum(private_clean) * 1024 as privateClean,sum(private_dirty) * 1024 as privateDirty,
154fb726d48Sopenharmony_ci     sum(swap) * 1024 as swap,sum(swap_pss) * 1024 as swapPss
155fb726d48Sopenharmony_ci     FROM smaps A,
156fb726d48Sopenharmony_ci     trace_range AS t
157fb726d48Sopenharmony_ci     WHERE (startNs) =$rightNs
158fb726d48Sopenharmony_ci     group by type,path`,
159fb726d48Sopenharmony_ci    { $rightNs: rightNs }
160fb726d48Sopenharmony_ci  );
161fb726d48Sopenharmony_ci
162fb726d48Sopenharmony_ci
163fb726d48Sopenharmony_ciexport const getTabSmapsStatisticSelectData = (leftNs: number, rightNs: number, dur: number):
164fb726d48Sopenharmony_ci  Promise<Array<Smaps>> =>
165fb726d48Sopenharmony_ci  query<Smaps>(
166fb726d48Sopenharmony_ci    'getTabSmapsStatisticData',
167fb726d48Sopenharmony_ci    `SELECT
168fb726d48Sopenharmony_ci     (A.timestamp - t.start_ts) AS startNs,
169fb726d48Sopenharmony_ci     start_addr as startAddr,
170fb726d48Sopenharmony_ci     end_addr as endAddr,
171fb726d48Sopenharmony_ci     A.type,
172fb726d48Sopenharmony_ci     sum(resident_size) * 1024 AS rss,
173fb726d48Sopenharmony_ci     protection_id as pid,
174fb726d48Sopenharmony_ci     count(A.path_id) as count,
175fb726d48Sopenharmony_ci     sum(pss) * 1024 as pss ,sum(virtaul_size) * 1024 AS size,sum(reside) as reside,
176fb726d48Sopenharmony_ci     A.path_id AS path,
177fb726d48Sopenharmony_ci     sum(shared_clean) * 1024 as sharedClean,sum(shared_dirty) * 1024 as sharedDirty,
178fb726d48Sopenharmony_ci     sum(private_clean) * 1024 as privateClean,sum(private_dirty) * 1024 as privateDirty,
179fb726d48Sopenharmony_ci     sum(swap) * 1024 as swap,sum(swap_pss) * 1024 as swapPss
180fb726d48Sopenharmony_ci     FROM smaps A,
181fb726d48Sopenharmony_ci     trace_range AS t
182fb726d48Sopenharmony_ci     WHERE (startNs) <=$rightNs and (startNs+$dur)>=$leftNs
183fb726d48Sopenharmony_ci     group by type,path`,
184fb726d48Sopenharmony_ci    { $rightNs: rightNs, $leftNs: leftNs, $dur: dur },
185fb726d48Sopenharmony_ci  );
186