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 { BaseStruct } from './BaseStruct';
17fb726d48Sopenharmony_ci
18fb726d48Sopenharmony_ciexport class HeapStruct extends BaseStruct {
19fb726d48Sopenharmony_ci  static hoverHeapStruct: HeapStruct | undefined;
20fb726d48Sopenharmony_ci  startTime: number | undefined;
21fb726d48Sopenharmony_ci  endTime: number | undefined;
22fb726d48Sopenharmony_ci  dur: number | undefined;
23fb726d48Sopenharmony_ci  eventType: string | undefined;
24fb726d48Sopenharmony_ci  heapsize: number | undefined;
25fb726d48Sopenharmony_ci  density: number | undefined;
26fb726d48Sopenharmony_ci  maxHeapSize: number = 0;
27fb726d48Sopenharmony_ci  minHeapSize: number = 0;
28fb726d48Sopenharmony_ci
29fb726d48Sopenharmony_ci  static draw(heapCtx: CanvasRenderingContext2D, heapData: HeapStruct): void {
30fb726d48Sopenharmony_ci    if (heapData.frame) {
31fb726d48Sopenharmony_ci      let width = heapData.frame.width || 0;
32fb726d48Sopenharmony_ci      heapCtx.fillStyle = '#2db3aa';
33fb726d48Sopenharmony_ci      heapCtx.strokeStyle = '#2db3aa';
34fb726d48Sopenharmony_ci      if (heapData.startTime === HeapStruct.hoverHeapStruct?.startTime) {
35fb726d48Sopenharmony_ci        heapCtx.lineWidth = 1;
36fb726d48Sopenharmony_ci        heapCtx.globalAlpha = 0.6;
37fb726d48Sopenharmony_ci        let drawHeight: number = Math.ceil(
38fb726d48Sopenharmony_ci          ((heapData.heapsize || 0) * (heapData.frame.height || 0)) / heapData.maxHeapSize
39fb726d48Sopenharmony_ci        );
40fb726d48Sopenharmony_ci        heapCtx.fillRect(heapData.frame.x, heapData.frame.y + heapData.frame.height - drawHeight, width, drawHeight);
41fb726d48Sopenharmony_ci        heapCtx.beginPath();
42fb726d48Sopenharmony_ci        heapCtx.arc(heapData.frame.x, heapData.frame.y + heapData.frame.height - drawHeight, 3, 0, 2 * Math.PI, true);
43fb726d48Sopenharmony_ci        heapCtx.fill();
44fb726d48Sopenharmony_ci        heapCtx.globalAlpha = 1.0;
45fb726d48Sopenharmony_ci        heapCtx.stroke();
46fb726d48Sopenharmony_ci        heapCtx.beginPath();
47fb726d48Sopenharmony_ci        heapCtx.moveTo(heapData.frame.x + 3, heapData.frame.y + heapData.frame.height - drawHeight);
48fb726d48Sopenharmony_ci        heapCtx.lineWidth = 3;
49fb726d48Sopenharmony_ci        heapCtx.lineTo(heapData.frame.x + width, heapData.frame.y + heapData.frame.height - drawHeight);
50fb726d48Sopenharmony_ci        heapCtx.stroke();
51fb726d48Sopenharmony_ci      } else {
52fb726d48Sopenharmony_ci        heapCtx.globalAlpha = 0.6;
53fb726d48Sopenharmony_ci        heapCtx.lineWidth = 1;
54fb726d48Sopenharmony_ci        let drawHeight: number = Math.ceil(
55fb726d48Sopenharmony_ci          ((heapData.heapsize || 0) * (heapData.frame.height || 0)) / heapData.maxHeapSize
56fb726d48Sopenharmony_ci        );
57fb726d48Sopenharmony_ci        heapCtx.fillRect(heapData.frame.x, heapData.frame.y + heapData.frame.height - drawHeight, width, drawHeight);
58fb726d48Sopenharmony_ci      }
59fb726d48Sopenharmony_ci    }
60fb726d48Sopenharmony_ci    heapCtx.globalAlpha = 1.0;
61fb726d48Sopenharmony_ci    heapCtx.lineWidth = 1;
62fb726d48Sopenharmony_ci  }
63fb726d48Sopenharmony_ci}
64