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 { SpFrameTimeChart } from '../../../../src/trace/component/chart/SpFrameTimeChart';
17fb726d48Sopenharmony_cijest.mock('../../../../src/trace/component/SpSystemTrace', () => {
18fb726d48Sopenharmony_ci  return {};
19fb726d48Sopenharmony_ci});
20fb726d48Sopenharmony_ciimport { TraceRow } from '../../../../src/trace/component/trace/base/TraceRow';
21fb726d48Sopenharmony_ciimport { FlagsConfig } from '../../../../src/trace/component/SpFlags';
22fb726d48Sopenharmony_ci
23fb726d48Sopenharmony_ciconst intersectionObserverMock = () => ({
24fb726d48Sopenharmony_ci  observe: () => null,
25fb726d48Sopenharmony_ci});
26fb726d48Sopenharmony_ciwindow.IntersectionObserver = jest.fn().mockImplementation(intersectionObserverMock);
27fb726d48Sopenharmony_cijest.mock('../../../../src/js-heap/model/DatabaseStruct');
28fb726d48Sopenharmony_ciconst sqlite = require('../../../../src/trace/database/sql/SqlLite.sql');
29fb726d48Sopenharmony_cijest.mock('../../../../src/trace/database/sql/SqlLite.sql');
30fb726d48Sopenharmony_cijest.mock('../../../../src/trace/database/ui-worker/ProcedureWorker', () => {
31fb726d48Sopenharmony_ci  return {};
32fb726d48Sopenharmony_ci});
33fb726d48Sopenharmony_ciconst jankSqlite = require('../../../../src/trace/database/sql/Janks.sql');
34fb726d48Sopenharmony_cijest.mock('../../../../src/trace/database/sql/Janks.sql');
35fb726d48Sopenharmony_ciconst processSqlite = require('../../../../src/trace/database/sql/ProcessThread.sql');
36fb726d48Sopenharmony_cijest.mock('../../../../src/trace/database/sql/ProcessThread.sql');
37fb726d48Sopenharmony_cijest.mock('../../../../src/trace/database/ui-worker/ProcedureWorkerSnapshot', () => {
38fb726d48Sopenharmony_ci  return {};
39fb726d48Sopenharmony_ci});
40fb726d48Sopenharmony_ciwindow.ResizeObserver =
41fb726d48Sopenharmony_ci  window.ResizeObserver ||
42fb726d48Sopenharmony_ci  jest.fn().mockImplementation(() => ({
43fb726d48Sopenharmony_ci    disconnect: jest.fn(),
44fb726d48Sopenharmony_ci    observe: jest.fn(),
45fb726d48Sopenharmony_ci    unobserve: jest.fn(),
46fb726d48Sopenharmony_ci  }));
47fb726d48Sopenharmony_ci
48fb726d48Sopenharmony_cidescribe('SpFrameTimeChart Test', () => {
49fb726d48Sopenharmony_ci  let htmlElement: any = document.createElement('sp-system-trace');
50fb726d48Sopenharmony_ci  let spFrameTimeChart = new SpFrameTimeChart(htmlElement);
51fb726d48Sopenharmony_ci  let queryFrameTime = sqlite.queryFrameTimeData;
52fb726d48Sopenharmony_ci  let queryFrameTimeData = [
53fb726d48Sopenharmony_ci    {
54fb726d48Sopenharmony_ci      pid: 256,
55fb726d48Sopenharmony_ci    },
56fb726d48Sopenharmony_ci  ];
57fb726d48Sopenharmony_ci  queryFrameTime.mockResolvedValue(queryFrameTimeData);
58fb726d48Sopenharmony_ci
59fb726d48Sopenharmony_ci  let queryExpectedFrame = jankSqlite.queryExpectedFrameDate;
60fb726d48Sopenharmony_ci  let queryExpectedFrameDate = [
61fb726d48Sopenharmony_ci    {
62fb726d48Sopenharmony_ci      dur: 2585,
63fb726d48Sopenharmony_ci      depth: 1,
64fb726d48Sopenharmony_ci    },
65fb726d48Sopenharmony_ci    {
66fb726d48Sopenharmony_ci      dur: 6688,
67fb726d48Sopenharmony_ci      depth: 1,
68fb726d48Sopenharmony_ci    },
69fb726d48Sopenharmony_ci  ];
70fb726d48Sopenharmony_ci  queryExpectedFrame.mockResolvedValue(queryExpectedFrameDate);
71fb726d48Sopenharmony_ci
72fb726d48Sopenharmony_ci  let queryActualFrame = jankSqlite.queryActualFrameDate;
73fb726d48Sopenharmony_ci  let queryActualFrameDate = [
74fb726d48Sopenharmony_ci    {
75fb726d48Sopenharmony_ci      dur: 6878,
76fb726d48Sopenharmony_ci      depth: 1,
77fb726d48Sopenharmony_ci    },
78fb726d48Sopenharmony_ci    {
79fb726d48Sopenharmony_ci      dur: 6238,
80fb726d48Sopenharmony_ci      depth: 1,
81fb726d48Sopenharmony_ci    },
82fb726d48Sopenharmony_ci  ];
83fb726d48Sopenharmony_ci  queryActualFrame.mockResolvedValue(queryActualFrameDate);
84fb726d48Sopenharmony_ci
85fb726d48Sopenharmony_ci  let frameApp = sqlite.queryFrameApp;
86fb726d48Sopenharmony_ci  let frameAppData = [
87fb726d48Sopenharmony_ci    {
88fb726d48Sopenharmony_ci      appName: 'test0',
89fb726d48Sopenharmony_ci    },
90fb726d48Sopenharmony_ci    {
91fb726d48Sopenharmony_ci      appName: 'test1',
92fb726d48Sopenharmony_ci    },
93fb726d48Sopenharmony_ci    {
94fb726d48Sopenharmony_ci      appName: 'test2',
95fb726d48Sopenharmony_ci    },
96fb726d48Sopenharmony_ci  ];
97fb726d48Sopenharmony_ci  frameApp.mockResolvedValue(frameAppData);
98fb726d48Sopenharmony_ci
99fb726d48Sopenharmony_ci  let frameAnimation = sqlite.queryFrameAnimationData;
100fb726d48Sopenharmony_ci  let frameAnimationData = [
101fb726d48Sopenharmony_ci    {animationId: 1, dynamicEndTs: 4774481414, dynamicStartTs: 4091445476, ts: 4091445476},
102fb726d48Sopenharmony_ci    {
103fb726d48Sopenharmony_ci      animationId: 2,
104fb726d48Sopenharmony_ci      dynamicEndTs: 8325095997,
105fb726d48Sopenharmony_ci      dynamicStartTs: 7652588184,
106fb726d48Sopenharmony_ci      ts: 7652588184,
107fb726d48Sopenharmony_ci    },
108fb726d48Sopenharmony_ci  ];
109fb726d48Sopenharmony_ci  frameAnimation.mockResolvedValue(frameAnimationData);
110fb726d48Sopenharmony_ci
111fb726d48Sopenharmony_ci  let allProcessNames = processSqlite.queryAllProcessNames;
112fb726d48Sopenharmony_ci  let allProcessNameData = [
113fb726d48Sopenharmony_ci    {
114fb726d48Sopenharmony_ci      id: 12,
115fb726d48Sopenharmony_ci      name: 'test name',
116fb726d48Sopenharmony_ci      pid: 255
117fb726d48Sopenharmony_ci    }
118fb726d48Sopenharmony_ci  ];
119fb726d48Sopenharmony_ci  allProcessNames.mockResolvedValue(allProcessNameData);
120fb726d48Sopenharmony_ci
121fb726d48Sopenharmony_ci  let dynamicIdAndName = sqlite.queryDynamicIdAndNameData;
122fb726d48Sopenharmony_ci  let data = [
123fb726d48Sopenharmony_ci    {
124fb726d48Sopenharmony_ci      id: 12,
125fb726d48Sopenharmony_ci      appName: 'name'
126fb726d48Sopenharmony_ci    }
127fb726d48Sopenharmony_ci  ];
128fb726d48Sopenharmony_ci  dynamicIdAndName.mockResolvedValue(data);
129fb726d48Sopenharmony_ci
130fb726d48Sopenharmony_ci  let animationTimeRange = sqlite.queryAnimationTimeRangeData;
131fb726d48Sopenharmony_ci  let rangeData = [
132fb726d48Sopenharmony_ci    {
133fb726d48Sopenharmony_ci      status: 'Response delay',
134fb726d48Sopenharmony_ci      startTs: 225,
135fb726d48Sopenharmony_ci      endTs: 6355
136fb726d48Sopenharmony_ci    }
137fb726d48Sopenharmony_ci  ];
138fb726d48Sopenharmony_ci  animationTimeRange.mockResolvedValue(rangeData);
139fb726d48Sopenharmony_ci
140fb726d48Sopenharmony_ci
141fb726d48Sopenharmony_ci  let animationIdAndName = sqlite.queryAnimationIdAndNameData;
142fb726d48Sopenharmony_ci  let animationIdAndNameData = [
143fb726d48Sopenharmony_ci    {
144fb726d48Sopenharmony_ci      id: 12,
145fb726d48Sopenharmony_ci      name: 'test',
146fb726d48Sopenharmony_ci      info: '{}'
147fb726d48Sopenharmony_ci    }
148fb726d48Sopenharmony_ci  ];
149fb726d48Sopenharmony_ci  animationIdAndName.mockResolvedValue(animationIdAndNameData);
150fb726d48Sopenharmony_ci
151fb726d48Sopenharmony_ci  let frameDynamic = sqlite.queryFrameDynamicData;
152fb726d48Sopenharmony_ci  let frameDynamicData = [
153fb726d48Sopenharmony_ci    {alpha: '1.00', appName: 'test0', height: 2772, id: 74, ts: 28565790, width: 1344, x: 0, y: 0},
154fb726d48Sopenharmony_ci    {
155fb726d48Sopenharmony_ci      alpha: '1.00',
156fb726d48Sopenharmony_ci      appName: 'test0',
157fb726d48Sopenharmony_ci      height: 2772,
158fb726d48Sopenharmony_ci      id: 75,
159fb726d48Sopenharmony_ci      ts: 42341310,
160fb726d48Sopenharmony_ci      width: 1344,
161fb726d48Sopenharmony_ci      x: 0,
162fb726d48Sopenharmony_ci      y: 0,
163fb726d48Sopenharmony_ci    },
164fb726d48Sopenharmony_ci  ];
165fb726d48Sopenharmony_ci  frameDynamic.mockResolvedValue(frameDynamicData);
166fb726d48Sopenharmony_ci
167fb726d48Sopenharmony_ci  let frameSpacing = sqlite.queryFrameSpacing;
168fb726d48Sopenharmony_ci  let frameSpacingData = [
169fb726d48Sopenharmony_ci    {
170fb726d48Sopenharmony_ci      currentFrameHeight: 2768,
171fb726d48Sopenharmony_ci      currentFrameWidth: 1344,
172fb726d48Sopenharmony_ci      currentTs: 17535295995,
173fb726d48Sopenharmony_ci      frameSpacingResult: 0.1,
174fb726d48Sopenharmony_ci      id: 1216,
175fb726d48Sopenharmony_ci      nameId: 'test0',
176fb726d48Sopenharmony_ci      preFrameHeight: 2767,
177fb726d48Sopenharmony_ci      preFrameWidth: 1343,
178fb726d48Sopenharmony_ci      preTs: 17523356412,
179fb726d48Sopenharmony_ci      x: 0,
180fb726d48Sopenharmony_ci      y: 1,
181fb726d48Sopenharmony_ci    },
182fb726d48Sopenharmony_ci    {
183fb726d48Sopenharmony_ci      currentFrameHeight: 2768,
184fb726d48Sopenharmony_ci      currentFrameWidth: 1344,
185fb726d48Sopenharmony_ci      currentTs: 17546478287,
186fb726d48Sopenharmony_ci      frameSpacingResult: 0,
187fb726d48Sopenharmony_ci      id: 1217,
188fb726d48Sopenharmony_ci      nameId: 'test0',
189fb726d48Sopenharmony_ci      preFrameHeight: 2768,
190fb726d48Sopenharmony_ci      preFrameWidth: 1344,
191fb726d48Sopenharmony_ci      preTs: 17535295995,
192fb726d48Sopenharmony_ci      x: 0,
193fb726d48Sopenharmony_ci      y: 1,
194fb726d48Sopenharmony_ci    },
195fb726d48Sopenharmony_ci  ];
196fb726d48Sopenharmony_ci  frameSpacing.mockResolvedValue(frameSpacingData);
197fb726d48Sopenharmony_ci
198fb726d48Sopenharmony_ci  let physical = sqlite.queryPhysicalData;
199fb726d48Sopenharmony_ci  let physicalData = [{physicalFrameRate: 90, physicalHeight: 2772, physicalWidth: 1344}];
200fb726d48Sopenharmony_ci  physical.mockResolvedValue(physicalData);
201fb726d48Sopenharmony_ci
202fb726d48Sopenharmony_ci  it('TabPaneFramesTest01', function () {
203fb726d48Sopenharmony_ci    expect(spFrameTimeChart.init()).toBeTruthy();
204fb726d48Sopenharmony_ci  });
205fb726d48Sopenharmony_ci
206fb726d48Sopenharmony_ci  it('TabPaneFramesTest02', function () {
207fb726d48Sopenharmony_ci    FlagsConfig.updateFlagsConfig('AnimationAnalysis', 'Enabled');
208fb726d48Sopenharmony_ci    spFrameTimeChart.initAnimatedScenesChart(
209fb726d48Sopenharmony_ci      TraceRow.skeleton(),
210fb726d48Sopenharmony_ci      {
211fb726d48Sopenharmony_ci        pid: 1,
212fb726d48Sopenharmony_ci        processName: 'render_service',
213fb726d48Sopenharmony_ci      },
214fb726d48Sopenharmony_ci      TraceRow.skeleton()
215fb726d48Sopenharmony_ci    );
216fb726d48Sopenharmony_ci  });
217fb726d48Sopenharmony_ci  it('TabPaneFramesTest03', function () {
218fb726d48Sopenharmony_ci    expect(spFrameTimeChart.frameNoExpandTimeOut()).toBeTruthy();
219fb726d48Sopenharmony_ci  });
220fb726d48Sopenharmony_ci  it('TabPaneFramesTest04', function () {
221fb726d48Sopenharmony_ci    expect(spFrameTimeChart.frameExpandTimeOut()).toBeTruthy();
222fb726d48Sopenharmony_ci  });
223fb726d48Sopenharmony_ci});
224