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 file 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 */ 15 16import { BaseStruct } from './BaseStruct'; 17import { ColorUtils } from '../component/trace/base/ColorUtils'; 18 19export class ProcessMemStruct extends BaseStruct { 20 static hoverProcessMemStruct: ProcessMemStruct | undefined; 21 // trackId: number | undefined; 22 processName: string | undefined; 23 pid: number | undefined; 24 upid: number | undefined; 25 trackName: string | undefined; 26 type: string | undefined; 27 track_id: string | undefined; 28 value: number | undefined; 29 startTime: number | undefined; 30 duration: number | undefined; 31 maxValue: number | undefined; 32 delta: number | undefined; 33 34 static draw(processMemBeanStructCanvasCtx: CanvasRenderingContext2D, processMemBeanStructData: ProcessMemStruct) { 35 if (processMemBeanStructData.frame) { 36 let width = processMemBeanStructData.frame.width || 0; 37 if (processMemBeanStructData.startTime === ProcessMemStruct.hoverProcessMemStruct?.startTime) { 38 processMemBeanStructCanvasCtx.lineWidth = 1; 39 processMemBeanStructCanvasCtx.globalAlpha = 0.6; 40 let drawHeight: number = Math.floor( 41 ((processMemBeanStructData.value || 0) * (processMemBeanStructData.frame.height || 0) * 1.0) / 42 (processMemBeanStructData.maxValue || 0) 43 ); 44 processMemBeanStructCanvasCtx.fillRect( 45 processMemBeanStructData.frame.x, 46 processMemBeanStructData.frame.y + processMemBeanStructData.frame.height - drawHeight, 47 width, 48 drawHeight 49 ); 50 processMemBeanStructCanvasCtx.beginPath(); 51 processMemBeanStructCanvasCtx.arc( 52 processMemBeanStructData.frame.x, 53 processMemBeanStructData.frame.y + processMemBeanStructData.frame.height - drawHeight, 54 3, 55 0, 56 2 * Math.PI, 57 true 58 ); 59 processMemBeanStructCanvasCtx.fill(); 60 processMemBeanStructCanvasCtx.globalAlpha = 1.0; 61 processMemBeanStructCanvasCtx.stroke(); 62 processMemBeanStructCanvasCtx.beginPath(); 63 processMemBeanStructCanvasCtx.moveTo( 64 processMemBeanStructData.frame.x + 3, 65 processMemBeanStructData.frame.y + processMemBeanStructData.frame.height - drawHeight 66 ); 67 processMemBeanStructCanvasCtx.lineWidth = 3; 68 processMemBeanStructCanvasCtx.lineTo( 69 processMemBeanStructData.frame.x + width, 70 processMemBeanStructData.frame.y + processMemBeanStructData.frame.height - drawHeight 71 ); 72 processMemBeanStructCanvasCtx.stroke(); 73 } else { 74 processMemBeanStructCanvasCtx.fillStyle = ColorUtils.colorForTid(processMemBeanStructData.maxValue || 0); 75 processMemBeanStructCanvasCtx.strokeStyle = ColorUtils.colorForTid(processMemBeanStructData.maxValue || 0); 76 processMemBeanStructCanvasCtx.globalAlpha = 0.6; 77 processMemBeanStructCanvasCtx.lineWidth = 1; 78 let drawHeight: number = 79 ((processMemBeanStructData.value || 0) * (processMemBeanStructData.frame.height || 0) * 1.0) / 80 (processMemBeanStructData.maxValue || 1); 81 processMemBeanStructCanvasCtx.fillRect( 82 processMemBeanStructData.frame.x, 83 processMemBeanStructData.frame.y + processMemBeanStructData.frame.height - drawHeight, 84 width, 85 drawHeight 86 ); 87 } 88 } 89 processMemBeanStructCanvasCtx.globalAlpha = 1.0; 90 processMemBeanStructCanvasCtx.lineWidth = 1; 91 } 92} 93