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
16fb726d48Sopenharmony_ciimport { getThreadPoolTraceBufferCacheKey } from './database/SqlLite';
17fb726d48Sopenharmony_ci
18fb726d48Sopenharmony_ciexport enum TraceMode {
19fb726d48Sopenharmony_ci  NORMAL,
20fb726d48Sopenharmony_ci  LONG_TRACE,
21fb726d48Sopenharmony_ci  DISTRIBUTED,
22fb726d48Sopenharmony_ci}
23fb726d48Sopenharmony_ci
24fb726d48Sopenharmony_ciexport const applicationHtml: string = `
25fb726d48Sopenharmony_ci        <style>
26fb726d48Sopenharmony_ci        :host{
27fb726d48Sopenharmony_ci
28fb726d48Sopenharmony_ci        }
29fb726d48Sopenharmony_ci        .dark{
30fb726d48Sopenharmony_ci        --dark-background: #272C34;
31fb726d48Sopenharmony_ci        --dark-background1: #424851;
32fb726d48Sopenharmony_ci        --dark-background2: #262f3c;
33fb726d48Sopenharmony_ci        --dark-background3: #292D33;
34fb726d48Sopenharmony_ci        --dark-background4: #323841;
35fb726d48Sopenharmony_ci        --dark-background5: #333840;
36fb726d48Sopenharmony_ci        --dark-background6: rgba(82,145,255,0.2);
37fb726d48Sopenharmony_ci        --dark-background7: #494d52;
38fb726d48Sopenharmony_ci        --dark-background8: #5291FF;
39fb726d48Sopenharmony_ci        --dark-color: rgba(255,255,255,0.6);
40fb726d48Sopenharmony_ci        --dark-color1: rgba(255,255,255,0.86);
41fb726d48Sopenharmony_ci        --dark-color2: rgba(255,255,255,0.9);
42fb726d48Sopenharmony_ci        --dark-border: #474F59;
43fb726d48Sopenharmony_ci        --dark-color3:#4694C2;
44fb726d48Sopenharmony_ci        --dark-color4:#5AADA0;
45fb726d48Sopenharmony_ci        --dark-border1: #454E5A;
46fb726d48Sopenharmony_ci        --bark-expansion:#0076FF;
47fb726d48Sopenharmony_ci        --bark-prompt:#9e9e9e;
48fb726d48Sopenharmony_ci        --dark-icon:#adafb3;
49fb726d48Sopenharmony_ci        --dark-img: url('img/dark_pic.png');
50fb726d48Sopenharmony_ci            background: #272C34;
51fb726d48Sopenharmony_ci            color: #FFFFFF;
52fb726d48Sopenharmony_ci        }
53fb726d48Sopenharmony_ci        .root{
54fb726d48Sopenharmony_ci            display: grid;
55fb726d48Sopenharmony_ci            grid-template-rows: min-content 1fr;
56fb726d48Sopenharmony_ci            grid-template-columns: min-content 1fr;
57fb726d48Sopenharmony_ci            grid-template-areas: 'm s'
58fb726d48Sopenharmony_ci                                 'm b';
59fb726d48Sopenharmony_ci            height: 100vh;
60fb726d48Sopenharmony_ci            width: 100vw;
61fb726d48Sopenharmony_ci        }
62fb726d48Sopenharmony_ci        .filedrag::after {
63fb726d48Sopenharmony_ci             content: 'Drop the trace file to open it';
64fb726d48Sopenharmony_ci             position: fixed;
65fb726d48Sopenharmony_ci             z-index: 2001;
66fb726d48Sopenharmony_ci             top: 0;
67fb726d48Sopenharmony_ci             left: 0;
68fb726d48Sopenharmony_ci             right: 0;
69fb726d48Sopenharmony_ci             bottom: 0;
70fb726d48Sopenharmony_ci             border: 5px dashed var(--dark-color1,#404854);
71fb726d48Sopenharmony_ci             text-align: center;
72fb726d48Sopenharmony_ci             font-size: 3rem;
73fb726d48Sopenharmony_ci             line-height: 100vh;
74fb726d48Sopenharmony_ci             background: rgba(255, 255, 255, 0.5);
75fb726d48Sopenharmony_ci        }
76fb726d48Sopenharmony_ci        .menu{
77fb726d48Sopenharmony_ci            grid-area: m;
78fb726d48Sopenharmony_ci            /*transition: all 0.2s;*/
79fb726d48Sopenharmony_ci            box-shadow: 4px 0px 20px rgba(0,0,0,0.05);
80fb726d48Sopenharmony_ci            z-index: 2000;
81fb726d48Sopenharmony_ci        }
82fb726d48Sopenharmony_ci        .search-vessel{
83fb726d48Sopenharmony_ci            z-index: 999;
84fb726d48Sopenharmony_ci            position: relative;
85fb726d48Sopenharmony_ci            cursor: default;
86fb726d48Sopenharmony_ci        }
87fb726d48Sopenharmony_ci        .progress{
88fb726d48Sopenharmony_ci            bottom: 0;
89fb726d48Sopenharmony_ci            position: absolute;
90fb726d48Sopenharmony_ci            height: 1px;
91fb726d48Sopenharmony_ci            left: 0;
92fb726d48Sopenharmony_ci            right: 0;
93fb726d48Sopenharmony_ci        }
94fb726d48Sopenharmony_ci
95fb726d48Sopenharmony_ci        :host(:not([search])) .search-vessel  {
96fb726d48Sopenharmony_ci           display: none;
97fb726d48Sopenharmony_ci        }
98fb726d48Sopenharmony_ci        :host(:not([search])) .search-vessel .search  {
99fb726d48Sopenharmony_ci            background-color: var(--dark-background5,#F6F6F6);
100fb726d48Sopenharmony_ci        }
101fb726d48Sopenharmony_ci        .search{
102fb726d48Sopenharmony_ci            grid-area: s;
103fb726d48Sopenharmony_ci            background-color: var(--dark-background,#FFFFFF);
104fb726d48Sopenharmony_ci            height: 48px;
105fb726d48Sopenharmony_ci            display: flex;
106fb726d48Sopenharmony_ci            justify-content: center;
107fb726d48Sopenharmony_ci            align-items: center;
108fb726d48Sopenharmony_ci
109fb726d48Sopenharmony_ci        }
110fb726d48Sopenharmony_ci        .search .search-bg{
111fb726d48Sopenharmony_ci            background-color: var(--dark-background5,#fff);
112fb726d48Sopenharmony_ci            border-radius: 40px;
113fb726d48Sopenharmony_ci            padding: 3px 20px;
114fb726d48Sopenharmony_ci            display: flex;
115fb726d48Sopenharmony_ci            justify-content: center;
116fb726d48Sopenharmony_ci            align-items: center;
117fb726d48Sopenharmony_ci            border: 1px solid var(--dark-border,#c5c5c5);
118fb726d48Sopenharmony_ci        }
119fb726d48Sopenharmony_ci        lit-search input{
120fb726d48Sopenharmony_ci            outline: none;
121fb726d48Sopenharmony_ci            border: 0px;
122fb726d48Sopenharmony_ci            background-color: transparent;
123fb726d48Sopenharmony_ci            font-size: inherit;
124fb726d48Sopenharmony_ci            color: var(--dark-color,#666666);
125fb726d48Sopenharmony_ci            width: 30vw;
126fb726d48Sopenharmony_ci            height: auto;
127fb726d48Sopenharmony_ci            vertical-align:middle;
128fb726d48Sopenharmony_ci            line-height:inherit;
129fb726d48Sopenharmony_ci            height:inherit;
130fb726d48Sopenharmony_ci            padding: 6px 6px 6px 6px};
131fb726d48Sopenharmony_ci            max-height: inherit;
132fb726d48Sopenharmony_ci            box-sizing: border-box;
133fb726d48Sopenharmony_ci
134fb726d48Sopenharmony_ci        }
135fb726d48Sopenharmony_ci        ::placeholder { /* CSS 3 標準 */
136fb726d48Sopenharmony_ci          color: #b5b7ba;
137fb726d48Sopenharmony_ci          font-size: 1em;
138fb726d48Sopenharmony_ci        }
139fb726d48Sopenharmony_ci        lit-search input::placeholder {
140fb726d48Sopenharmony_ci          color: #b5b7ba;
141fb726d48Sopenharmony_ci          font-size: 1em;
142fb726d48Sopenharmony_ci        }
143fb726d48Sopenharmony_ci        .content{
144fb726d48Sopenharmony_ci            grid-area: b;
145fb726d48Sopenharmony_ci            background-color: #ffffff;
146fb726d48Sopenharmony_ci            height: 100%;
147fb726d48Sopenharmony_ci            overflow: auto;
148fb726d48Sopenharmony_ci            position:relative;
149fb726d48Sopenharmony_ci        }
150fb726d48Sopenharmony_ci        .sheet{
151fb726d48Sopenharmony_ci
152fb726d48Sopenharmony_ci        }
153fb726d48Sopenharmony_ci        .sidebar-button{
154fb726d48Sopenharmony_ci            position: absolute;
155fb726d48Sopenharmony_ci            top: 0;
156fb726d48Sopenharmony_ci            left: 0;
157fb726d48Sopenharmony_ci            background-color: var(--dark-background1,#FFFFFF);
158fb726d48Sopenharmony_ci            height: 100%;
159fb726d48Sopenharmony_ci            border-radius: 0 5px 5px 0;
160fb726d48Sopenharmony_ci            width: 48px;
161fb726d48Sopenharmony_ci            display: flex;
162fb726d48Sopenharmony_ci            align-content: center;
163fb726d48Sopenharmony_ci            justify-content: center;
164fb726d48Sopenharmony_ci            cursor: pointer;
165fb726d48Sopenharmony_ci        }
166fb726d48Sopenharmony_ci        :host{
167fb726d48Sopenharmony_ci            font-size: inherit;
168fb726d48Sopenharmony_ci            display: inline-block;
169fb726d48Sopenharmony_ci            transition: .3s;
170fb726d48Sopenharmony_ci         }
171fb726d48Sopenharmony_ci         :host([spin]){
172fb726d48Sopenharmony_ci            animation: rotate 1.75s linear infinite;
173fb726d48Sopenharmony_ci         }
174fb726d48Sopenharmony_ci         @keyframes rotate {
175fb726d48Sopenharmony_ci            to{
176fb726d48Sopenharmony_ci                transform: rotate(360deg);
177fb726d48Sopenharmony_ci            }
178fb726d48Sopenharmony_ci         }
179fb726d48Sopenharmony_ci         .icon{
180fb726d48Sopenharmony_ci            display: block;
181fb726d48Sopenharmony_ci            width: 1em;
182fb726d48Sopenharmony_ci            height: 1em;
183fb726d48Sopenharmony_ci            margin: auto;
184fb726d48Sopenharmony_ci            fill: currentColor;
185fb726d48Sopenharmony_ci            overflow: hidden;
186fb726d48Sopenharmony_ci            font-size: 20px;
187fb726d48Sopenharmony_ci            color: #1E4EEA;
188fb726d48Sopenharmony_ci         }
189fb726d48Sopenharmony_ci        :host([chart_filter]) .chart-filter {
190fb726d48Sopenharmony_ci            display: grid;
191fb726d48Sopenharmony_ci            grid-template-rows: min-content min-content min-content max-content auto;
192fb726d48Sopenharmony_ci            overflow-y: clip;
193fb726d48Sopenharmony_ci            height: 99%;
194fb726d48Sopenharmony_ci            visibility: visible;
195fb726d48Sopenharmony_ci            position: absolute;
196fb726d48Sopenharmony_ci            width: 40%;
197fb726d48Sopenharmony_ci            right: 0;
198fb726d48Sopenharmony_ci            z-index: 1001;
199fb726d48Sopenharmony_ci            top: 0;
200fb726d48Sopenharmony_ci        }
201fb726d48Sopenharmony_ci        :host([custom-color]) .custom-color {
202fb726d48Sopenharmony_ci            display: grid;
203fb726d48Sopenharmony_ci            grid-template-rows: min-content min-content min-content max-content auto;
204fb726d48Sopenharmony_ci            overflow-y: auto;
205fb726d48Sopenharmony_ci            height: 100%;
206fb726d48Sopenharmony_ci            visibility: visible;
207fb726d48Sopenharmony_ci            position: absolute;
208fb726d48Sopenharmony_ci            width: 50%;
209fb726d48Sopenharmony_ci            right: 0;
210fb726d48Sopenharmony_ci            z-index: 1002;
211fb726d48Sopenharmony_ci            top: 0;
212fb726d48Sopenharmony_ci        }
213fb726d48Sopenharmony_ci        .filter-config {
214fb726d48Sopenharmony_ci            opacity: 1;
215fb726d48Sopenharmony_ci            visibility: hidden;
216fb726d48Sopenharmony_ci        }
217fb726d48Sopenharmony_ci        .filter-config:hover {
218fb726d48Sopenharmony_ci            opacity: 0.7;
219fb726d48Sopenharmony_ci        }
220fb726d48Sopenharmony_ci        .page-button[prohibit] {
221fb726d48Sopenharmony_ci          cursor: none;
222fb726d48Sopenharmony_ci        }
223fb726d48Sopenharmony_ci        .page-button {
224fb726d48Sopenharmony_ci            background: #D8D8D8;
225fb726d48Sopenharmony_ci            border-radius: 12px;
226fb726d48Sopenharmony_ci            width: 24px;
227fb726d48Sopenharmony_ci            height: 24px;
228fb726d48Sopenharmony_ci            margin-right: 12px;
229fb726d48Sopenharmony_ci            display: flex;
230fb726d48Sopenharmony_ci            justify-content: center;
231fb726d48Sopenharmony_ci            align-items: center;
232fb726d48Sopenharmony_ci        }
233fb726d48Sopenharmony_ci        #preview-button:hover {
234fb726d48Sopenharmony_ci          cursor: pointer;
235fb726d48Sopenharmony_ci          background: #0A59F7;
236fb726d48Sopenharmony_ci          color: #FFFFFF;
237fb726d48Sopenharmony_ci          opacity: 1;
238fb726d48Sopenharmony_ci        }
239fb726d48Sopenharmony_ci        #next-button:hover {
240fb726d48Sopenharmony_ci          cursor: pointer;
241fb726d48Sopenharmony_ci          background: #0A59F7;
242fb726d48Sopenharmony_ci          color: #FFFFFF;
243fb726d48Sopenharmony_ci          opacity: 1;
244fb726d48Sopenharmony_ci        }
245fb726d48Sopenharmony_ci        .pagination:hover {
246fb726d48Sopenharmony_ci          cursor: pointer;
247fb726d48Sopenharmony_ci          background: #0A59F7;
248fb726d48Sopenharmony_ci          color: #FFFFFF;
249fb726d48Sopenharmony_ci          opacity: 1;
250fb726d48Sopenharmony_ci        }
251fb726d48Sopenharmony_ci        .confirm-button:hover {
252fb726d48Sopenharmony_ci          cursor: pointer;
253fb726d48Sopenharmony_ci          background: #0A59F7;
254fb726d48Sopenharmony_ci          color: #FFFFFF;
255fb726d48Sopenharmony_ci          opacity: 1;
256fb726d48Sopenharmony_ci        }
257fb726d48Sopenharmony_ci        .pagination {
258fb726d48Sopenharmony_ci            background: #D8D8D8;
259fb726d48Sopenharmony_ci            color: #000000;
260fb726d48Sopenharmony_ci            border-radius: 12px;
261fb726d48Sopenharmony_ci            width: 24px;
262fb726d48Sopenharmony_ci            height: 24px;
263fb726d48Sopenharmony_ci            margin-right: 12px;
264fb726d48Sopenharmony_ci            display: flex;
265fb726d48Sopenharmony_ci            justify-content: center;
266fb726d48Sopenharmony_ci            align-items: center;
267fb726d48Sopenharmony_ci            font-family: Helvetica;
268fb726d48Sopenharmony_ci            font-size: 12px;
269fb726d48Sopenharmony_ci            text-align: center;
270fb726d48Sopenharmony_ci            line-height: 20px;
271fb726d48Sopenharmony_ci            font-weight: 400;
272fb726d48Sopenharmony_ci            opacity: 0.6;
273fb726d48Sopenharmony_ci        }
274fb726d48Sopenharmony_ci        .pagination[selected] {
275fb726d48Sopenharmony_ci            background: #0A59F7;
276fb726d48Sopenharmony_ci            color: #FFFFFF;
277fb726d48Sopenharmony_ci            opacity: 1;
278fb726d48Sopenharmony_ci        }
279fb726d48Sopenharmony_ci        .page-jump-font {
280fb726d48Sopenharmony_ci            opacity: 0.6;
281fb726d48Sopenharmony_ci            font-family: Helvetica;
282fb726d48Sopenharmony_ci            font-size: 12px;
283fb726d48Sopenharmony_ci            color: #000000;
284fb726d48Sopenharmony_ci            text-align: center;
285fb726d48Sopenharmony_ci            line-height: 20px;
286fb726d48Sopenharmony_ci            font-weight: 400;
287fb726d48Sopenharmony_ci        }
288fb726d48Sopenharmony_ci        .page-input {
289fb726d48Sopenharmony_ci            background: #D8D8D8;
290fb726d48Sopenharmony_ci            border-radius: 10px;
291fb726d48Sopenharmony_ci            width: 40px;
292fb726d48Sopenharmony_ci            height: 24px;
293fb726d48Sopenharmony_ci            justify-content: center;
294fb726d48Sopenharmony_ci            align-items: center;
295fb726d48Sopenharmony_ci            text-align: center;
296fb726d48Sopenharmony_ci            margin-right: 8px;
297fb726d48Sopenharmony_ci            border: none;
298fb726d48Sopenharmony_ci        }
299fb726d48Sopenharmony_ci        .confirm-button {
300fb726d48Sopenharmony_ci            font-family: Helvetica;
301fb726d48Sopenharmony_ci            font-size: 12px;
302fb726d48Sopenharmony_ci            color: #0A59F7;
303fb726d48Sopenharmony_ci            text-align: center;
304fb726d48Sopenharmony_ci            font-weight: 400;
305fb726d48Sopenharmony_ci            border: 1px solid #0A59F7;
306fb726d48Sopenharmony_ci            border-radius: 10px;
307fb726d48Sopenharmony_ci            width: 64px;
308fb726d48Sopenharmony_ci            height: 24px;
309fb726d48Sopenharmony_ci            line-height: 24px;
310fb726d48Sopenharmony_ci        }
311fb726d48Sopenharmony_ci        .long_trace_page {
312fb726d48Sopenharmony_ci            justify-content: center;
313fb726d48Sopenharmony_ci            width: -webkit-fill-available;
314fb726d48Sopenharmony_ci            margin-right: 5.2em;
315fb726d48Sopenharmony_ci            align-items: center;
316fb726d48Sopenharmony_ci            display: none;
317fb726d48Sopenharmony_ci        }
318fb726d48Sopenharmony_ci        .content-center-option {
319fb726d48Sopenharmony_ci          justify-content: center;
320fb726d48Sopenharmony_ci          width: -webkit-fill-available;
321fb726d48Sopenharmony_ci          margin-right: 5.2em;
322fb726d48Sopenharmony_ci          align-items: center;
323fb726d48Sopenharmony_ci          width: auto;
324fb726d48Sopenharmony_ci        }
325fb726d48Sopenharmony_ci        .page-number-list {
326fb726d48Sopenharmony_ci            display: flex;
327fb726d48Sopenharmony_ci        }
328fb726d48Sopenharmony_ci
329fb726d48Sopenharmony_ci        #sp-ai-analysis {
330fb726d48Sopenharmony_ci            top:0px;
331fb726d48Sopenharmony_ci            right:0px;
332fb726d48Sopenharmony_ci            position:absolute;
333fb726d48Sopenharmony_ci            z-index:9999;
334fb726d48Sopenharmony_ci            min-width:430px;
335fb726d48Sopenharmony_ci            max-width:75%;
336fb726d48Sopenharmony_ci            width:430px;
337fb726d48Sopenharmony_ci            height:740px;
338fb726d48Sopenharmony_ci            box-shadow:3px 0px 14px #000;
339fb726d48Sopenharmony_ci            border-radius:8px;
340fb726d48Sopenharmony_ci            background-color:#fff;
341fb726d48Sopenharmony_ci            padding:10px 10px 10px 5px;
342fb726d48Sopenharmony_ci            user-select:none;
343fb726d48Sopenharmony_ci            box-sizing:border-box;
344fb726d48Sopenharmony_ci            visibility:hidden;
345fb726d48Sopenharmony_ci        }
346fb726d48Sopenharmony_ci        </style>
347fb726d48Sopenharmony_ci        <div class="root" style="position: relative;">
348fb726d48Sopenharmony_ci            <sp-bubble-ai style="visibility: visible; top:50%;right:2px;position: absolute;z-index: 1000" id="sp-bubbles"></sp-bubble-ai>
349fb726d48Sopenharmony_ci            <sp-advertisement style="bottom:2px;right:2px;position: absolute;z-index: 10086" id= "sp-advertisement"></sp-advertisement>
350fb726d48Sopenharmony_ci            <lit-main-menu id="main-menu" class="menu" data=''></lit-main-menu>
351fb726d48Sopenharmony_ci            <sp-keyboard style="width:100%;height:100%;overflow:auto;visibility:hidden;top:0px;left:0px;right:0;bottom:0px;position:absolute;z-index: 8888" id="sp-keyboard">
352fb726d48Sopenharmony_ci            </sp-keyboard>
353fb726d48Sopenharmony_ci            <div class="search-vessel">
354fb726d48Sopenharmony_ci                <div class="search" style="position: relative;">
355fb726d48Sopenharmony_ci                    <div class="sidebar-button" style="width: 0">
356fb726d48Sopenharmony_ci                        <svg class="icon" id="icon" aria-hidden="true" viewBox="0 0 1024 1024">
357fb726d48Sopenharmony_ci                             <use id="use" xlink:href="./base-ui/icon.svg#icon-menu"></use>
358fb726d48Sopenharmony_ci                        </svg>
359fb726d48Sopenharmony_ci                    </div>
360fb726d48Sopenharmony_ci                    <div class = "content-left-option" style="text-align: left;
361fb726d48Sopenharmony_ci                      position: absolute;left: 5px ; cursor: pointer;top: 15px">
362fb726d48Sopenharmony_ci                      <div title="Import Key Path" id="import-key-path" style="display: none ;text-align: left;cursor: pointer;">
363fb726d48Sopenharmony_ci                        <input id="import-config" style="display: none;pointer-events: none" type="file" accept=".json" >
364fb726d48Sopenharmony_ci                        <label style="width: 20px;height: 20px;cursor: pointer;" for="import-config">
365fb726d48Sopenharmony_ci                            <lit-icon id="import-btn" name="copy-csv" style="pointer-events: none" size="20">
366fb726d48Sopenharmony_ci                            </lit-icon>
367fb726d48Sopenharmony_ci                        </label>
368fb726d48Sopenharmony_ci                      </div>
369fb726d48Sopenharmony_ci                      <lit-icon  id="close-key-path" name="close" title="Close Key Path" color='#fff' size="20" style="display: none;text-align: left;cursor: pointer;">
370fb726d48Sopenharmony_ci                      </lit-icon>
371fb726d48Sopenharmony_ci                    </div>
372fb726d48Sopenharmony_ci                    <lit-search id="lit-search"></lit-search>
373fb726d48Sopenharmony_ci                    <lit-search id="lit-record-search"></lit-search>
374fb726d48Sopenharmony_ci                    <div class="content-center-option" style="display: ">
375fb726d48Sopenharmony_ci                      <div class="long_trace_page" style="display: none;">
376fb726d48Sopenharmony_ci                        <div class="page-button" id="preview-button">
377fb726d48Sopenharmony_ci                          <img title="preview" src="img/preview.png"/>
378fb726d48Sopenharmony_ci                        </div>
379fb726d48Sopenharmony_ci                        <div class="page-number-list"></div>
380fb726d48Sopenharmony_ci                        <div class="page-button" id="next-button" style="margin-right: 8px;">
381fb726d48Sopenharmony_ci                           <img title="next" src="img/next.png"/>
382fb726d48Sopenharmony_ci                        </div>
383fb726d48Sopenharmony_ci                        <div class="page-jump-font" style="margin-right: 8px;">To</div>
384fb726d48Sopenharmony_ci                        <input class="page-input" />
385fb726d48Sopenharmony_ci                        <div class="confirm-button">Confirm</div>
386fb726d48Sopenharmony_ci                      </div>
387fb726d48Sopenharmony_ci                    </div>
388fb726d48Sopenharmony_ci                </div>
389fb726d48Sopenharmony_ci                <div class = "content-right-option" style="display: flex;flex-flow: nowrap;text-align: right;position: absolute;right: 1.2em;cursor: pointer;top: 17px"">
390fb726d48Sopenharmony_ci                  <img class="ai_analysis" title="Display Template" src="img/ai-analysis.png" style="margin-left: 0.8em;width:16px;height:16px">
391fb726d48Sopenharmony_ci                  <lit-icon class="export-record" title="Download Mark Trace" name="download" size="16" style="margin-left: 0.8em;"></lit-icon>
392fb726d48Sopenharmony_ci                  <img class="cut-trace-file" title="Cut Trace File" src="img/menu-cut.svg" style="margin-left: 0.8em;">
393fb726d48Sopenharmony_ci                  <img class="filter-config" title="Display Template" src="img/config_filter.png" style="margin-left: 0.8em;">
394fb726d48Sopenharmony_ci                </div>
395fb726d48Sopenharmony_ci                <lit-progress-bar class="progress"></lit-progress-bar>
396fb726d48Sopenharmony_ci            </div>
397fb726d48Sopenharmony_ci            <div id="app-content" class="content">
398fb726d48Sopenharmony_ci                <sp-welcome style="visibility:visible;top:0px;left:0px;position:absolute;z-index: 100" id="sp-welcome">
399fb726d48Sopenharmony_ci                </sp-welcome>
400fb726d48Sopenharmony_ci                <sp-ai-analysis id="sp-ai-analysis">
401fb726d48Sopenharmony_ci                </sp-ai-analysis>
402fb726d48Sopenharmony_ci                <sp-system-trace style="visibility:hidden;z-index: 101;" id="sp-system-trace">
403fb726d48Sopenharmony_ci                </sp-system-trace>
404fb726d48Sopenharmony_ci                <sp-record-trace style="overflow:auto;width:100%;height:100%;visibility:hidden;top:0px;left:0px;right:0;bottom:0px;position:absolute;z-index: 102" id="sp-record-trace">
405fb726d48Sopenharmony_ci                </sp-record-trace>
406fb726d48Sopenharmony_ci                <sp-record-trace record_template='' style="overflow:auto;width:100%;height:100%;visibility:hidden;top:0px;left:0px;right:0;bottom:0px;position:absolute;z-index: 102" id="sp-record-template">
407fb726d48Sopenharmony_ci                </sp-record-trace>
408fb726d48Sopenharmony_ci                <sp-scheduling-analysis style="width:100%;height:100%;overflow:auto;visibility:hidden;top:0;left:0;right:0;bottom:0;position:absolute;" id="sp-scheduling-analysis"></sp-scheduling-analysis>
409fb726d48Sopenharmony_ci                <sp-metrics style="width:100%;height:100%;overflow:auto;visibility:hidden;top:0;left:0;right:0;bottom:0;position:absolute;z-index: 105" id="sp-metrics">
410fb726d48Sopenharmony_ci                </sp-metrics>
411fb726d48Sopenharmony_ci                <sp-query-sql style="width:100%;height:100%;overflow:auto;visibility:hidden;top:0;left:0;right:0;bottom:0;position:absolute;z-index: 106" id="sp-query-sql">
412fb726d48Sopenharmony_ci                </sp-query-sql>
413fb726d48Sopenharmony_ci                <sp-info-and-stats style="width:100%;height:100%;overflow:auto;visibility:hidden;top:0;left:0;right:0;bottom:0;position:absolute;z-index: 107" id="sp-info-and-stats">
414fb726d48Sopenharmony_ci                </sp-info-and-stats>
415fb726d48Sopenharmony_ci                <sp-convert-trace style="width:100%;height:100%;overflow:auto;visibility:hidden;top:0;left:0;right:0;bottom:0;position:absolute;z-index: 107" id="sp-convert-trace">
416fb726d48Sopenharmony_ci                </sp-convert-trace>
417fb726d48Sopenharmony_ci                <sp-help style="width:100%;height:100%;overflow:hidden;visibility:hidden;top:0px;left:0px;right:0;bottom:0px;position:absolute;z-index: 103" id="sp-help">
418fb726d48Sopenharmony_ci                </sp-help>
419fb726d48Sopenharmony_ci                <sp-flags style="width:100%;height:100%;overflow:auto;visibility:hidden;top:0px;left:0px;right:0;bottom:0px;position:absolute;z-index: 104" id="sp-flags">
420fb726d48Sopenharmony_ci                </sp-flags>
421fb726d48Sopenharmony_ci                <sp-third-party style="width:100%;height:100%;overflow:auto;visibility:hidden;top:0px;left:0px;right:0;bottom:0px;position:absolute;z-index: 104" id="sp-third-party">
422fb726d48Sopenharmony_ci                </sp-third-party>
423fb726d48Sopenharmony_ci                <trace-row-config class="chart-filter" style="height:100%;top:0px;right:0;bottom:0px;position:absolute;z-index: 1001"></trace-row-config>
424fb726d48Sopenharmony_ci                <custom-theme-color class="custom-color" style="height:100%;top:0px;right:0;bottom:0px;position:absolute;z-index: 1001"></custom-theme-color>
425fb726d48Sopenharmony_ci            </div>
426fb726d48Sopenharmony_ci        </div>
427fb726d48Sopenharmony_ci        `;
428fb726d48Sopenharmony_ci
429fb726d48Sopenharmony_ciexport function readTraceFileBuffer(): Promise<ArrayBuffer | undefined> {
430fb726d48Sopenharmony_ci  return new Promise((resolve) => {
431fb726d48Sopenharmony_ci    caches.match(getThreadPoolTraceBufferCacheKey('1')).then((res) => {
432fb726d48Sopenharmony_ci      if (res) {
433fb726d48Sopenharmony_ci        res.arrayBuffer().then((buffer) => {
434fb726d48Sopenharmony_ci          resolve(buffer);
435fb726d48Sopenharmony_ci        });
436fb726d48Sopenharmony_ci      } else {
437fb726d48Sopenharmony_ci        resolve(undefined);
438fb726d48Sopenharmony_ci      }
439fb726d48Sopenharmony_ci    });
440fb726d48Sopenharmony_ci  });
441fb726d48Sopenharmony_ci}
442fb726d48Sopenharmony_ci
443fb726d48Sopenharmony_ciexport function clearTraceFileCache(): void {
444fb726d48Sopenharmony_ci  caches.keys().then((keys) => {
445fb726d48Sopenharmony_ci    keys.forEach((key) => {
446fb726d48Sopenharmony_ci      if (key === getThreadPoolTraceBufferCacheKey('1')) {
447fb726d48Sopenharmony_ci        caches.delete(key).then();
448fb726d48Sopenharmony_ci      } else if (key.includes('/') && key.includes('-')) {
449fb726d48Sopenharmony_ci        let splits = key.split('/');
450fb726d48Sopenharmony_ci        let keyStr = splits[splits.length - 1];
451fb726d48Sopenharmony_ci        let time = keyStr.split('-')[0];
452fb726d48Sopenharmony_ci        let fileDate = new Date(parseInt(time));
453fb726d48Sopenharmony_ci        if (fileDate.toLocaleDateString() !== new Date().toLocaleDateString()) {
454fb726d48Sopenharmony_ci          //如果不是当天的缓存则删去缓存文件
455fb726d48Sopenharmony_ci          caches.delete(key).then();
456fb726d48Sopenharmony_ci        }
457fb726d48Sopenharmony_ci      } else {
458fb726d48Sopenharmony_ci        caches.delete(key).then();
459fb726d48Sopenharmony_ci      }
460fb726d48Sopenharmony_ci    });
461fb726d48Sopenharmony_ci  });
462fb726d48Sopenharmony_ci}
463fb726d48Sopenharmony_ci
464fb726d48Sopenharmony_ciexport function postLog(filename: string, fileSize: string): void {
465fb726d48Sopenharmony_ci  fetch(`https://${window.location.host.split(':')[0]}:${window.location.port}/logger`, {
466fb726d48Sopenharmony_ci    method: 'POST',
467fb726d48Sopenharmony_ci    headers: {
468fb726d48Sopenharmony_ci      'Content-Type': 'application/json',
469fb726d48Sopenharmony_ci    },
470fb726d48Sopenharmony_ci    body: JSON.stringify({
471fb726d48Sopenharmony_ci      fileName: filename,
472fb726d48Sopenharmony_ci      fileSize: fileSize,
473fb726d48Sopenharmony_ci    }),
474fb726d48Sopenharmony_ci  })
475fb726d48Sopenharmony_ci    .then((response) => response.json())
476fb726d48Sopenharmony_ci    .then((data) => { })
477fb726d48Sopenharmony_ci    .catch((error) => { });
478fb726d48Sopenharmony_ci}
479fb726d48Sopenharmony_ci
480fb726d48Sopenharmony_ciexport function indexedDataToBufferData(sourceData: unknown): ArrayBuffer {
481fb726d48Sopenharmony_ci  let uintArrayLength = 0;
482fb726d48Sopenharmony_ci  //@ts-ignore
483fb726d48Sopenharmony_ci  let uintDataList = sourceData.map((item: unknown) => {
484fb726d48Sopenharmony_ci    //@ts-ignore
485fb726d48Sopenharmony_ci    let currentBufData = new Uint8Array(item.buf);
486fb726d48Sopenharmony_ci    uintArrayLength += currentBufData.length;
487fb726d48Sopenharmony_ci    return currentBufData;
488fb726d48Sopenharmony_ci  });
489fb726d48Sopenharmony_ci  let resultArrayBuffer = new ArrayBuffer(uintArrayLength);
490fb726d48Sopenharmony_ci  let resultUintArray = new Uint8Array(resultArrayBuffer);
491fb726d48Sopenharmony_ci  let offset = 0;
492fb726d48Sopenharmony_ci  uintDataList.forEach((currentArray: Uint8Array) => {
493fb726d48Sopenharmony_ci    resultUintArray.set(currentArray, offset);
494fb726d48Sopenharmony_ci    offset += currentArray.length;
495fb726d48Sopenharmony_ci  });
496fb726d48Sopenharmony_ci  return resultArrayBuffer;
497fb726d48Sopenharmony_ci}
498fb726d48Sopenharmony_ci
499fb726d48Sopenharmony_ciexport function findFreeSizeAlgorithm(numbers: Array<number>, freeSize: number): Array<number> {
500fb726d48Sopenharmony_ci  let closestSize = 0;
501fb726d48Sopenharmony_ci  let currentSize = 0;
502fb726d48Sopenharmony_ci  let finalIndex: Array<number> = [];
503fb726d48Sopenharmony_ci  let currentSelectIndex: Array<number> = [];
504fb726d48Sopenharmony_ci
505fb726d48Sopenharmony_ci  function reBackFind(index: number): void {
506fb726d48Sopenharmony_ci    if (index === numbers.length) {
507fb726d48Sopenharmony_ci      const sumDifference = Math.abs(currentSize - freeSize);
508fb726d48Sopenharmony_ci      if (currentSize <= freeSize && sumDifference < Math.abs(closestSize - freeSize)) {
509fb726d48Sopenharmony_ci        closestSize = currentSize;
510fb726d48Sopenharmony_ci        finalIndex = [...currentSelectIndex];
511fb726d48Sopenharmony_ci      }
512fb726d48Sopenharmony_ci      return;
513fb726d48Sopenharmony_ci    }
514fb726d48Sopenharmony_ci    currentSize += numbers[index];
515fb726d48Sopenharmony_ci    currentSelectIndex.push(index);
516fb726d48Sopenharmony_ci    reBackFind(index + 1);
517fb726d48Sopenharmony_ci    currentSize -= numbers[index];
518fb726d48Sopenharmony_ci    currentSelectIndex.pop();
519fb726d48Sopenharmony_ci    reBackFind(index + 1);
520fb726d48Sopenharmony_ci  }
521fb726d48Sopenharmony_ci
522fb726d48Sopenharmony_ci  reBackFind(0);
523fb726d48Sopenharmony_ci  return finalIndex;
524fb726d48Sopenharmony_ci}
525fb726d48Sopenharmony_ci
526fb726d48Sopenharmony_ciexport function getCurrentDataTime(): string[] {
527fb726d48Sopenharmony_ci  let current = new Date();
528fb726d48Sopenharmony_ci  let year = '' + current.getFullYear();
529fb726d48Sopenharmony_ci  let month = ('0' + (current.getMonth() + 1)).slice(-2);
530fb726d48Sopenharmony_ci  let day = ('0' + current.getDate()).slice(-2);
531fb726d48Sopenharmony_ci  let hours = ('0' + current.getHours()).slice(-2);
532fb726d48Sopenharmony_ci  let minutes = ('0' + current.getMinutes()).slice(-2);
533fb726d48Sopenharmony_ci  let seconds = ('0' + current.getSeconds()).slice(-2);
534fb726d48Sopenharmony_ci  return [year, month, day, hours, minutes, seconds];
535fb726d48Sopenharmony_ci}
536