* Copyright (C) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { BaseStruct } from './BaseStruct';
export class HeapStruct extends BaseStruct {
static hoverHeapStruct: HeapStruct | undefined;
startTime: number | undefined;
endTime: number | undefined;
dur: number | undefined;
eventType: string | undefined;
heapsize: number | undefined;
density: number | undefined;
maxHeapSize: number = 0;
minHeapSize: number = 0;
static draw(heapCtx: CanvasRenderingContext2D, heapData: HeapStruct): void {
if (heapData.frame) {
let width = heapData.frame.width || 0;
heapCtx.fillStyle = '#2db3aa';
heapCtx.strokeStyle = '#2db3aa';
if (heapData.startTime === HeapStruct.hoverHeapStruct?.startTime) {
heapCtx.lineWidth = 1;
heapCtx.globalAlpha = 0.6;
let drawHeight: number = Math.ceil(
((heapData.heapsize || 0) * (heapData.frame.height || 0)) / heapData.maxHeapSize
);
heapCtx.fillRect(heapData.frame.x, heapData.frame.y + heapData.frame.height - drawHeight, width, drawHeight);
heapCtx.beginPath();
heapCtx.arc(heapData.frame.x, heapData.frame.y + heapData.frame.height - drawHeight, 3, 0, 2 * Math.PI, true);
heapCtx.fill();
heapCtx.globalAlpha = 1.0;
heapCtx.stroke();
heapCtx.beginPath();
heapCtx.moveTo(heapData.frame.x + 3, heapData.frame.y + heapData.frame.height - drawHeight);
heapCtx.lineWidth = 3;
heapCtx.lineTo(heapData.frame.x + width, heapData.frame.y + heapData.frame.height - drawHeight);
heapCtx.stroke();
} else {
heapCtx.globalAlpha = 0.6;
heapCtx.lineWidth = 1;
let drawHeight: number = Math.ceil(
((heapData.heapsize || 0) * (heapData.frame.height || 0)) / heapData.maxHeapSize
);
heapCtx.fillRect(heapData.frame.x, heapData.frame.y + heapData.frame.height - drawHeight, width, drawHeight);
}
}
heapCtx.globalAlpha = 1.0;
heapCtx.lineWidth = 1;
}
}