• 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 data 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 { BaseElement, element } from '../../../../../base-ui/BaseElement.js';
16import { LitSelect } from '../../../../../base-ui/select/LitSelect.js';
17import { LitTable } from '../../../../../base-ui/table/lit-table.js';
18import { LitSelectOption } from '../../../../../base-ui/select/LitSelectOption.js';
19import { SelectionParam } from '../../../../bean/BoxSelection.js';
20import { querySysPurgeableSelectionTab } from '../../../../database/SqlLite.js';
21import { Utils } from '../../base/Utils.js';
22import { CompareStruct, compare, resizeObserverFromMemory } from '../SheetUtils.js';
23import { TabPaneJsMemoryFilter } from '../TabPaneJsMemoryFilter.js';
24@element('tabpane-purgeable-pin-comparison-ability')
25export class TabPanePurgPinComparisonAbility extends BaseElement {
26  private purgeablePinTable: LitTable | null | undefined;
27  private purgeablePinSource: Array<unknown> = [];
28  private filterEl: TabPaneJsMemoryFilter | undefined | null;
29  private selectEl: LitSelect | undefined | null;
30
31  public initElements(): void {
32    this.purgeablePinTable = this.shadowRoot?.querySelector<LitTable>('#tb-purgeable-pin');
33    this.filterEl = this.shadowRoot!.querySelector<TabPaneJsMemoryFilter>('#filter');
34    this.selectEl = this.filterEl?.shadowRoot?.querySelector<LitSelect>('lit-select');
35  }
36  public totalData(purgePinComParam: SelectionParam | any, dataList: any): void {
37    //@ts-ignore
38    this.purgeablePinTable?.shadowRoot?.querySelector('.table')?.style?.height = `${
39      this.parentElement!.clientHeight - 45
40    }px`;
41    this.purgeablePinSource = [];
42    let fileArr: any[] = [];
43    for (let file of dataList) {
44      if (file.startNs !== purgePinComParam.startNs) {
45        fileArr.push(file);
46      }
47    }
48    fileArr = fileArr.sort();
49    this.initSelect(purgePinComParam.startNs, fileArr);
50    this.updateComparisonData(purgePinComParam.startNs, fileArr[0].startNs);
51  }
52  private initSelect(fileStartNs: number, purgePinComFileArr: Array<any>): void {
53    let that = this;
54    let input = this.selectEl!.shadowRoot?.querySelector('input') as HTMLInputElement;
55    this.selectEl!.innerHTML = '';
56    let option = new LitSelectOption();
57    option.innerHTML = 'File Name';
58    option.setAttribute('disabled', 'disabled');
59    this.selectEl?.appendChild(option);
60    if (purgePinComFileArr[0].name) {
61      option.setAttribute('value', purgePinComFileArr[0].name);
62    }
63    this.selectEl!.defaultValue = purgePinComFileArr[0].name;
64    this.selectEl!.placeholder = purgePinComFileArr[0].name;
65    this.selectEl!.dataSource = purgePinComFileArr;
66    this.selectEl!.querySelectorAll('lit-select-option').forEach((a) => {
67      a.addEventListener('onSelected', (e: any) => {
68        for (let f of purgePinComFileArr) {
69          if (input.value === f.name) {
70            that.updateComparisonData(fileStartNs, f.startNs);
71          }
72        }
73        e.stopPropagation();
74      });
75    });
76  }
77  private async updateComparisonData(baseTime: number, targetTime: number): Promise<any> {
78    this.purgeablePinSource = [];
79    let tableData = await this.queryTableData(baseTime, targetTime);
80    this.purgeablePinSource.push(tableData);
81    if (this.purgeablePinSource.length > 0) {
82      this.purgeablePinTable!.recycleDataSource = this.purgeablePinSource;
83    } else {
84      this.purgeablePinTable!.recycleDataSource = [];
85    }
86  }
87  private async queryTableData(baseTime: number, targetTime: number): Promise<any> {
88    let delta = {
89      purgPinedDelta: '0Bytes',
90      shmPurgPinDelta: '0Bytes',
91    };
92    const baseArr: CompareStruct[] = [];
93    const targetArr: CompareStruct[] = [];
94    // 点击的
95    await querySysPurgeableSelectionTab(baseTime, true).then(async (results) => {
96      for (let i = 0; i < results.length; i++) {
97        baseArr.push(new CompareStruct(results[i].name, results[i].value));
98      }
99      // 被比较的
100      await querySysPurgeableSelectionTab(targetTime, true).then((results) => {
101        for (let i = 0; i < results.length; i++) {
102          targetArr.push(new CompareStruct(results[i].name, results[i].value));
103        }
104        let compareData = compare(baseArr, targetArr);
105        for (let data of compareData) {
106          if (data.key === 'PinedPurg') {
107            delta.purgPinedDelta = Utils.getBinaryByteWithUnit(data.value);
108          } else {
109            delta.shmPurgPinDelta = Utils.getBinaryByteWithUnit(data.value);
110          }
111        }
112      });
113    });
114    return delta;
115  }
116
117  public connectedCallback(): void {
118    super.connectedCallback();
119    resizeObserverFromMemory(this.parentElement!, this.purgeablePinTable!, this.filterEl!);
120  }
121  public initHtml(): string {
122    return `
123    <style>
124        :host{
125            display: flex;
126            flex-direction: column;
127            padding: 10px 10px;
128        }
129    </style>
130    <lit-table id="tb-purgeable-pin" style="height: auto">
131        <lit-table-column width="1fr" title="PurgPinedDelta" data-index="purgPinedDelta" align="flex-start">
132        </lit-table-column>
133        <lit-table-column width="1fr" title="ShmPurgPinDelta" data-index="shmPurgPinDelta" align="flex-start">
134        </lit-table-column>
135    </lit-table>
136    <lit-progress-bar class="progress"></lit-progress-bar>
137    <tab-pane-js-memory-filter id="filter" first hideFilter></tab-pane-js-memory-filter>
138    `;
139  }
140}
141