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_ciimport { AllocationLogic } from '../../../src/js-heap/logic/Allocation'; 16fb726d48Sopenharmony_ciimport { AllocationFunction } from '../../../src/js-heap/model/UiStruct'; 17fb726d48Sopenharmony_ci 18fb726d48Sopenharmony_cijest.mock('../../../src/js-heap/model/UiStruct', () => { 19fb726d48Sopenharmony_ci return { 20fb726d48Sopenharmony_ci AllocationFunction: { 21fb726d48Sopenharmony_ci fileId: 0, 22fb726d48Sopenharmony_ci functionIndex: 0, 23fb726d48Sopenharmony_ci parentsId: [1, 2, 3], 24fb726d48Sopenharmony_ci parents: [], 25fb726d48Sopenharmony_ci combineId: new Set([]), 26fb726d48Sopenharmony_ci status: true, 27fb726d48Sopenharmony_ci id: '12', 28fb726d48Sopenharmony_ci name: 'name1', 29fb726d48Sopenharmony_ci scriptName: 'scriptName1', 30fb726d48Sopenharmony_ci scriptId: 1, 31fb726d48Sopenharmony_ci line: 1, 32fb726d48Sopenharmony_ci column: 1, 33fb726d48Sopenharmony_ci count: 1, 34fb726d48Sopenharmony_ci size: 1, 35fb726d48Sopenharmony_ci liveCount: 1, 36fb726d48Sopenharmony_ci liveSize: 1, 37fb726d48Sopenharmony_ci hasParent: true, 38fb726d48Sopenharmony_ci clone: () => { 39fb726d48Sopenharmony_ci return { 40fb726d48Sopenharmony_ci fileId: 1, 41fb726d48Sopenharmony_ci functionIndex: 324, 42fb726d48Sopenharmony_ci parentsId: [10, 56, 3], 43fb726d48Sopenharmony_ci parents: [], 44fb726d48Sopenharmony_ci combineId: new Set([]), 45fb726d48Sopenharmony_ci status: true, 46fb726d48Sopenharmony_ci id: '21', 47fb726d48Sopenharmony_ci name: 'name2', 48fb726d48Sopenharmony_ci scriptName: 'scriptName2', 49fb726d48Sopenharmony_ci scriptId: 21, 50fb726d48Sopenharmony_ci line: 321, 51fb726d48Sopenharmony_ci column: 3, 52fb726d48Sopenharmony_ci count: 43, 53fb726d48Sopenharmony_ci size: 45, 54fb726d48Sopenharmony_ci liveCount: 11, 55fb726d48Sopenharmony_ci liveSize: 43, 56fb726d48Sopenharmony_ci hasParent: true, 57fb726d48Sopenharmony_ci }; 58fb726d48Sopenharmony_ci }, 59fb726d48Sopenharmony_ci }, 60fb726d48Sopenharmony_ci clone: () => { 61fb726d48Sopenharmony_ci return { 62fb726d48Sopenharmony_ci fileId: 42, 63fb726d48Sopenharmony_ci functionIndex: 44, 64fb726d48Sopenharmony_ci parentsId: [1, 24], 65fb726d48Sopenharmony_ci parents: [], 66fb726d48Sopenharmony_ci combineId: new Set([]), 67fb726d48Sopenharmony_ci status: true, 68fb726d48Sopenharmony_ci id: '90', 69fb726d48Sopenharmony_ci name: 'name3', 70fb726d48Sopenharmony_ci scriptName: 'scriptName3', 71fb726d48Sopenharmony_ci scriptId: 65, 72fb726d48Sopenharmony_ci line: 6, 73fb726d48Sopenharmony_ci column: 87, 74fb726d48Sopenharmony_ci count: 23, 75fb726d48Sopenharmony_ci size: 54, 76fb726d48Sopenharmony_ci liveCount: 56, 77fb726d48Sopenharmony_ci liveSize: 44, 78fb726d48Sopenharmony_ci hasParent: true, 79fb726d48Sopenharmony_ci }; 80fb726d48Sopenharmony_ci }, 81fb726d48Sopenharmony_ci }; 82fb726d48Sopenharmony_ci}); 83fb726d48Sopenharmony_ci 84fb726d48Sopenharmony_cidescribe('Allocation Test', () => { 85fb726d48Sopenharmony_ci let set: Set<number> = new Set([]); 86fb726d48Sopenharmony_ci let data = { 87fb726d48Sopenharmony_ci end_ts: 342211, 88fb726d48Sopenharmony_ci id: 3, 89fb726d48Sopenharmony_ci isParseSuccess: true, 90fb726d48Sopenharmony_ci name: 'Test', 91fb726d48Sopenharmony_ci path: '', 92fb726d48Sopenharmony_ci pid: 34, 93fb726d48Sopenharmony_ci tart_ts: 8847320334, 94fb726d48Sopenharmony_ci type: 1, 95fb726d48Sopenharmony_ci heapLoader: { 96fb726d48Sopenharmony_ci rootNode: { 97fb726d48Sopenharmony_ci detachedness: 43, 98fb726d48Sopenharmony_ci displayName: '', 99fb726d48Sopenharmony_ci distance: 230000000, 100fb726d48Sopenharmony_ci edgeCount: 432, 101fb726d48Sopenharmony_ci fileId: 46, 102fb726d48Sopenharmony_ci firstEdgeIndex: 54, 103fb726d48Sopenharmony_ci flag: 5, 104fb726d48Sopenharmony_ci id: 54, 105fb726d48Sopenharmony_ci name: 'Test', 106fb726d48Sopenharmony_ci nodeIndex: 0, 107fb726d48Sopenharmony_ci nodeOldIndex: 0, 108fb726d48Sopenharmony_ci retainedSize: 5411, 109fb726d48Sopenharmony_ci retainsCount: 0, 110fb726d48Sopenharmony_ci retainsEdgeIdx: [0, 1], 111fb726d48Sopenharmony_ci retainsNodeIdx: [320, 49], 112fb726d48Sopenharmony_ci selfSize: 0, 113fb726d48Sopenharmony_ci traceNodeId: 0, 114fb726d48Sopenharmony_ci type: 34, 115fb726d48Sopenharmony_ci edges: [ 116fb726d48Sopenharmony_ci { 117fb726d48Sopenharmony_ci edgeIndex: 5, 118fb726d48Sopenharmony_ci edgeOldIndex: 31, 119fb726d48Sopenharmony_ci fromNodeId: 1, 120fb726d48Sopenharmony_ci nameOrIndex: '-test-', 121fb726d48Sopenharmony_ci nodeId: 425, 122fb726d48Sopenharmony_ci retainEdge: [], 123fb726d48Sopenharmony_ci retainsNode: [], 124fb726d48Sopenharmony_ci toNodeId: 1134, 125fb726d48Sopenharmony_ci type: 25, 126fb726d48Sopenharmony_ci }, 127fb726d48Sopenharmony_ci { 128fb726d48Sopenharmony_ci edgeIndex: 54, 129fb726d48Sopenharmony_ci edgeOldIndex: 35, 130fb726d48Sopenharmony_ci fromNodeId: 3, 131fb726d48Sopenharmony_ci nameOrIndex: '-test-', 132fb726d48Sopenharmony_ci nodeId: 9800, 133fb726d48Sopenharmony_ci retainEdge: [], 134fb726d48Sopenharmony_ci retainsNode: [], 135fb726d48Sopenharmony_ci toNodeId: 2311, 136fb726d48Sopenharmony_ci type: 5, 137fb726d48Sopenharmony_ci }, 138fb726d48Sopenharmony_ci ], 139fb726d48Sopenharmony_ci }, 140fb726d48Sopenharmony_ci }, 141fb726d48Sopenharmony_ci snapshotStruct: { 142fb726d48Sopenharmony_ci traceNodes: [ 143fb726d48Sopenharmony_ci { 144fb726d48Sopenharmony_ci fileId: 0, 145fb726d48Sopenharmony_ci functionIndex: 0, 146fb726d48Sopenharmony_ci parentsId: [1, 2, 3], 147fb726d48Sopenharmony_ci parents: [], 148fb726d48Sopenharmony_ci combineId: set, 149fb726d48Sopenharmony_ci status: true, 150fb726d48Sopenharmony_ci id: '12', 151fb726d48Sopenharmony_ci name: 'name1', 152fb726d48Sopenharmony_ci scriptName: 'scriptName1', 153fb726d48Sopenharmony_ci scriptId: 1, 154fb726d48Sopenharmony_ci line: 1, 155fb726d48Sopenharmony_ci column: 1, 156fb726d48Sopenharmony_ci count: 1, 157fb726d48Sopenharmony_ci size: 1, 158fb726d48Sopenharmony_ci liveCount: 1, 159fb726d48Sopenharmony_ci liveSize: 1, 160fb726d48Sopenharmony_ci hasParent: true, 161fb726d48Sopenharmony_ci clone: () => { 162fb726d48Sopenharmony_ci return { 163fb726d48Sopenharmony_ci fileId: 0, 164fb726d48Sopenharmony_ci functionIndex: 0, 165fb726d48Sopenharmony_ci parentsId: [1, 2, 3], 166fb726d48Sopenharmony_ci parents: [], 167fb726d48Sopenharmony_ci combineId: set, 168fb726d48Sopenharmony_ci status: true, 169fb726d48Sopenharmony_ci id: '12', 170fb726d48Sopenharmony_ci name: 'name1', 171fb726d48Sopenharmony_ci scriptName: 'scriptName1', 172fb726d48Sopenharmony_ci scriptId: 1, 173fb726d48Sopenharmony_ci line: 1, 174fb726d48Sopenharmony_ci column: 1, 175fb726d48Sopenharmony_ci count: 1, 176fb726d48Sopenharmony_ci size: 1, 177fb726d48Sopenharmony_ci liveCount: 1, 178fb726d48Sopenharmony_ci liveSize: 1, 179fb726d48Sopenharmony_ci hasParent: true, 180fb726d48Sopenharmony_ci }; 181fb726d48Sopenharmony_ci }, 182fb726d48Sopenharmony_ci }, 183fb726d48Sopenharmony_ci { 184fb726d48Sopenharmony_ci fileId: 65, 185fb726d48Sopenharmony_ci functionIndex: 6, 186fb726d48Sopenharmony_ci parentsId: [1, 65, 3], 187fb726d48Sopenharmony_ci parents: [], 188fb726d48Sopenharmony_ci combineId: set, 189fb726d48Sopenharmony_ci status: true, 190fb726d48Sopenharmony_ci id: '45', 191fb726d48Sopenharmony_ci name: 'name6', 192fb726d48Sopenharmony_ci scriptName: 'scriptName6', 193fb726d48Sopenharmony_ci scriptId: 1, 194fb726d48Sopenharmony_ci line: 64, 195fb726d48Sopenharmony_ci column: 65, 196fb726d48Sopenharmony_ci count: 66, 197fb726d48Sopenharmony_ci size: 6, 198fb726d48Sopenharmony_ci liveCount: 1, 199fb726d48Sopenharmony_ci liveSize: 120, 200fb726d48Sopenharmony_ci hasParent: true, 201fb726d48Sopenharmony_ci clone: () => { 202fb726d48Sopenharmony_ci return { 203fb726d48Sopenharmony_ci fileId: 21, 204fb726d48Sopenharmony_ci functionIndex: 33, 205fb726d48Sopenharmony_ci parentsId: [54, 23], 206fb726d48Sopenharmony_ci parents: [], 207fb726d48Sopenharmony_ci combineId: set, 208fb726d48Sopenharmony_ci status: true, 209fb726d48Sopenharmony_ci id: '12', 210fb726d48Sopenharmony_ci name: 'name7', 211fb726d48Sopenharmony_ci scriptName: 'scriptName7', 212fb726d48Sopenharmony_ci scriptId: 321, 213fb726d48Sopenharmony_ci line: 341, 214fb726d48Sopenharmony_ci column: 123, 215fb726d48Sopenharmony_ci count: 21, 216fb726d48Sopenharmony_ci size: 134, 217fb726d48Sopenharmony_ci liveCount: 16, 218fb726d48Sopenharmony_ci liveSize: 109, 219fb726d48Sopenharmony_ci hasParent: true, 220fb726d48Sopenharmony_ci }; 221fb726d48Sopenharmony_ci }, 222fb726d48Sopenharmony_ci }, 223fb726d48Sopenharmony_ci { 224fb726d48Sopenharmony_ci fileId: 23, 225fb726d48Sopenharmony_ci functionIndex: 1, 226fb726d48Sopenharmony_ci parentsId: [111, 24, 3], 227fb726d48Sopenharmony_ci parents: [], 228fb726d48Sopenharmony_ci combineId: set, 229fb726d48Sopenharmony_ci status: true, 230fb726d48Sopenharmony_ci id: '4345', 231fb726d48Sopenharmony_ci name: 'name7', 232fb726d48Sopenharmony_ci scriptName: 'scriptName7', 233fb726d48Sopenharmony_ci scriptId: 421, 234fb726d48Sopenharmony_ci line: 13, 235fb726d48Sopenharmony_ci column: 51, 236fb726d48Sopenharmony_ci count: 61, 237fb726d48Sopenharmony_ci size: 165, 238fb726d48Sopenharmony_ci liveCount: 10, 239fb726d48Sopenharmony_ci liveSize: 651, 240fb726d48Sopenharmony_ci hasParent: true, 241fb726d48Sopenharmony_ci clone: () => { 242fb726d48Sopenharmony_ci return { 243fb726d48Sopenharmony_ci fileId: 3, 244fb726d48Sopenharmony_ci functionIndex: 57, 245fb726d48Sopenharmony_ci parentsId: [1, 87, 31], 246fb726d48Sopenharmony_ci parents: [], 247fb726d48Sopenharmony_ci combineId: set, 248fb726d48Sopenharmony_ci status: true, 249fb726d48Sopenharmony_ci id: '251', 250fb726d48Sopenharmony_ci name: 'name8', 251fb726d48Sopenharmony_ci scriptName: 'scriptName8', 252fb726d48Sopenharmony_ci scriptId: 91, 253fb726d48Sopenharmony_ci line: 189, 254fb726d48Sopenharmony_ci column: 891, 255fb726d48Sopenharmony_ci count: 81, 256fb726d48Sopenharmony_ci size: 14, 257fb726d48Sopenharmony_ci liveCount: 431, 258fb726d48Sopenharmony_ci liveSize: 21, 259fb726d48Sopenharmony_ci hasParent: true, 260fb726d48Sopenharmony_ci }; 261fb726d48Sopenharmony_ci }, 262fb726d48Sopenharmony_ci }, 263fb726d48Sopenharmony_ci ], 264fb726d48Sopenharmony_ci nodeMap: new Map(), 265fb726d48Sopenharmony_ci nodeCount: 1, 266fb726d48Sopenharmony_ci edges: [ 267fb726d48Sopenharmony_ci { 268fb726d48Sopenharmony_ci edgeIndex: 6, 269fb726d48Sopenharmony_ci edgeOldIndex: 0, 270fb726d48Sopenharmony_ci fromNodeId: 1, 271fb726d48Sopenharmony_ci nameOrIndex: '-test-', 272fb726d48Sopenharmony_ci nodeId: 67, 273fb726d48Sopenharmony_ci retainEdge: [], 274fb726d48Sopenharmony_ci retainsNode: [], 275fb726d48Sopenharmony_ci toNodeId: 77, 276fb726d48Sopenharmony_ci type: 61, 277fb726d48Sopenharmony_ci }, 278fb726d48Sopenharmony_ci { 279fb726d48Sopenharmony_ci edgeIndex: 16, 280fb726d48Sopenharmony_ci edgeOldIndex: 37, 281fb726d48Sopenharmony_ci fromNodeId: 16, 282fb726d48Sopenharmony_ci nameOrIndex: '-test-', 283fb726d48Sopenharmony_ci nodeId: 67, 284fb726d48Sopenharmony_ci retainEdge: [], 285fb726d48Sopenharmony_ci retainsNode: [], 286fb726d48Sopenharmony_ci toNodeId: 876, 287fb726d48Sopenharmony_ci type: 8, 288fb726d48Sopenharmony_ci }, 289fb726d48Sopenharmony_ci ], 290fb726d48Sopenharmony_ci samples: [], 291fb726d48Sopenharmony_ci functionInfos: [1], 292fb726d48Sopenharmony_ci }, 293fb726d48Sopenharmony_ci }; 294fb726d48Sopenharmony_ci it('AllocationTest01', () => { 295fb726d48Sopenharmony_ci let allocationLogic = new AllocationLogic(data); 296fb726d48Sopenharmony_ci let nodeById = allocationLogic.getNodeById(12); 297fb726d48Sopenharmony_ci expect(nodeById).not.toBe(); 298fb726d48Sopenharmony_ci }); 299fb726d48Sopenharmony_ci 300fb726d48Sopenharmony_ci it('AllocationTest02', () => { 301fb726d48Sopenharmony_ci let allocationLogic = new AllocationLogic(data); 302fb726d48Sopenharmony_ci let nodeById = allocationLogic.getNodeById(11); 303fb726d48Sopenharmony_ci expect(nodeById).toBe(null); 304fb726d48Sopenharmony_ci }); 305fb726d48Sopenharmony_ci it('AllocationTest03', () => { 306fb726d48Sopenharmony_ci let allocationLogic = new AllocationLogic(data); 307fb726d48Sopenharmony_ci let nodeStack = allocationLogic.getNodeStack(12); 308fb726d48Sopenharmony_ci expect(nodeStack.length).toBe(0); 309fb726d48Sopenharmony_ci }); 310fb726d48Sopenharmony_ci it('AllocationTest04', () => { 311fb726d48Sopenharmony_ci let allocationLogic = new AllocationLogic(data); 312fb726d48Sopenharmony_ci let nodeStack = allocationLogic.getFunctionNodeIds(12); 313fb726d48Sopenharmony_ci expect(nodeStack).not.toBe([]); 314fb726d48Sopenharmony_ci }); 315fb726d48Sopenharmony_ci it('AllocationTest05', () => { 316fb726d48Sopenharmony_ci let allocationLogic = new AllocationLogic(data); 317fb726d48Sopenharmony_ci let parentData = data.snapshotStruct.traceNodes[0]; 318fb726d48Sopenharmony_ci let nodeStack = allocationLogic.getParent(parentData); 319fb726d48Sopenharmony_ci expect(nodeStack).toBeUndefined(); 320fb726d48Sopenharmony_ci }); 321fb726d48Sopenharmony_ci it('AllocationTest06', () => { 322fb726d48Sopenharmony_ci let allocationLogic = new AllocationLogic(data); 323fb726d48Sopenharmony_ci let parentData = { 324fb726d48Sopenharmony_ci fileId: 23, 325fb726d48Sopenharmony_ci functionIndex: 35, 326fb726d48Sopenharmony_ci parentsId: [1], 327fb726d48Sopenharmony_ci parents: [], 328fb726d48Sopenharmony_ci combineId: set, 329fb726d48Sopenharmony_ci status: true, 330fb726d48Sopenharmony_ci id: '2450', 331fb726d48Sopenharmony_ci name: 'name9', 332fb726d48Sopenharmony_ci scriptName: 'scriptName9', 333fb726d48Sopenharmony_ci scriptId: 981, 334fb726d48Sopenharmony_ci line: 8341, 335fb726d48Sopenharmony_ci column: 21, 336fb726d48Sopenharmony_ci count: 211, 337fb726d48Sopenharmony_ci size: 134, 338fb726d48Sopenharmony_ci liveCount: 541, 339fb726d48Sopenharmony_ci liveSize: 176, 340fb726d48Sopenharmony_ci hasParent: true, 341fb726d48Sopenharmony_ci }; 342fb726d48Sopenharmony_ci let nodeStack = allocationLogic.getParent(parentData); 343fb726d48Sopenharmony_ci expect(nodeStack).toBeUndefined(); 344fb726d48Sopenharmony_ci }); 345fb726d48Sopenharmony_ci 346fb726d48Sopenharmony_ci it('AllocationTest07', () => { 347fb726d48Sopenharmony_ci let allocationLogic = new AllocationLogic(data); 348fb726d48Sopenharmony_ci let nodeStack = allocationLogic.getFunctionList(); 349fb726d48Sopenharmony_ci expect(nodeStack.length).not.toEqual(0); 350fb726d48Sopenharmony_ci }); 351fb726d48Sopenharmony_ci 352fb726d48Sopenharmony_ci it('AllocationTest08', () => { 353fb726d48Sopenharmony_ci let allocationLogic = new AllocationLogic(data); 354fb726d48Sopenharmony_ci let parentData = data.snapshotStruct.traceNodes[0]; 355fb726d48Sopenharmony_ci let nodeStack = allocationLogic.getFunctionStack(parentData, []); 356fb726d48Sopenharmony_ci expect(nodeStack).toBeUndefined(); 357fb726d48Sopenharmony_ci }); 358fb726d48Sopenharmony_ci}); 359