1*90c8c64dSAndroid Build Coastguard Worker/* 2*90c8c64dSAndroid Build Coastguard Worker * Copyright (C) 2023 The Android Open Source Project 3*90c8c64dSAndroid Build Coastguard Worker * 4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*90c8c64dSAndroid Build Coastguard Worker * 8*90c8c64dSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*90c8c64dSAndroid Build Coastguard Worker * 10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License. 15*90c8c64dSAndroid Build Coastguard Worker */ 16*90c8c64dSAndroid Build Coastguard Worker 17*90c8c64dSAndroid Build Coastguard Workerimport {TIME_UNIT_TO_NANO} from 'common/time_units'; 18*90c8c64dSAndroid Build Coastguard Workerimport {ParserBuilder} from 'test/unit/parser_builder'; 19*90c8c64dSAndroid Build Coastguard Workerimport {TimestampConverterUtils} from 'test/unit/timestamp_converter_utils'; 20*90c8c64dSAndroid Build Coastguard Workerimport {TraceBuilder} from 'test/unit/trace_builder'; 21*90c8c64dSAndroid Build Coastguard Workerimport {TraceUtils} from 'test/unit/trace_utils'; 22*90c8c64dSAndroid Build Coastguard Workerimport {UnitTestUtils} from 'test/unit/utils'; 23*90c8c64dSAndroid Build Coastguard Workerimport {FrameMapBuilder} from './frame_map_builder'; 24*90c8c64dSAndroid Build Coastguard Workerimport {AbsoluteFrameIndex} from './index_types'; 25*90c8c64dSAndroid Build Coastguard Workerimport {Trace} from './trace'; 26*90c8c64dSAndroid Build Coastguard Workerimport {TraceType} from './trace_type'; 27*90c8c64dSAndroid Build Coastguard Worker 28*90c8c64dSAndroid Build Coastguard Workerdescribe('Trace', () => { 29*90c8c64dSAndroid Build Coastguard Worker let trace: Trace<string>; 30*90c8c64dSAndroid Build Coastguard Worker 31*90c8c64dSAndroid Build Coastguard Worker const time9 = TimestampConverterUtils.makeRealTimestamp(9n); 32*90c8c64dSAndroid Build Coastguard Worker const time10 = TimestampConverterUtils.makeRealTimestamp(10n); 33*90c8c64dSAndroid Build Coastguard Worker const time11 = TimestampConverterUtils.makeRealTimestamp(11n); 34*90c8c64dSAndroid Build Coastguard Worker const time12 = TimestampConverterUtils.makeRealTimestamp(12n); 35*90c8c64dSAndroid Build Coastguard Worker const time13 = TimestampConverterUtils.makeRealTimestamp(13n); 36*90c8c64dSAndroid Build Coastguard Worker const time14 = TimestampConverterUtils.makeRealTimestamp(14n); 37*90c8c64dSAndroid Build Coastguard Worker const time15 = TimestampConverterUtils.makeRealTimestamp(15n); 38*90c8c64dSAndroid Build Coastguard Worker 39*90c8c64dSAndroid Build Coastguard Worker beforeAll(() => { 40*90c8c64dSAndroid Build Coastguard Worker // Time: 10 11 12 13 41*90c8c64dSAndroid Build Coastguard Worker // Entry: 0 1-2 3 4 42*90c8c64dSAndroid Build Coastguard Worker // | | | | 43*90c8c64dSAndroid Build Coastguard Worker // Frame: 0 1 2 3 4-5 6 44*90c8c64dSAndroid Build Coastguard Worker trace = new TraceBuilder<string>() 45*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0', 'entry-1', 'entry-2', 'entry-3', 'entry-4']) 46*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([time10, time11, time11, time12, time13]) 47*90c8c64dSAndroid Build Coastguard Worker .setFrame(0, 0) 48*90c8c64dSAndroid Build Coastguard Worker .setFrame(1, 1) 49*90c8c64dSAndroid Build Coastguard Worker .setFrame(2, 1) 50*90c8c64dSAndroid Build Coastguard Worker .setFrame(3, 4) 51*90c8c64dSAndroid Build Coastguard Worker .setFrame(3, 5) 52*90c8c64dSAndroid Build Coastguard Worker .setFrame(4, 6) 53*90c8c64dSAndroid Build Coastguard Worker .build(); 54*90c8c64dSAndroid Build Coastguard Worker }); 55*90c8c64dSAndroid Build Coastguard Worker 56*90c8c64dSAndroid Build Coastguard Worker it('getEntry()', async () => { 57*90c8c64dSAndroid Build Coastguard Worker expect(await trace.getEntry(0).getValue()).toEqual('entry-0'); 58*90c8c64dSAndroid Build Coastguard Worker expect(await trace.getEntry(4).getValue()).toEqual('entry-4'); 59*90c8c64dSAndroid Build Coastguard Worker expect(() => { 60*90c8c64dSAndroid Build Coastguard Worker trace.getEntry(5); 61*90c8c64dSAndroid Build Coastguard Worker }).toThrow(); 62*90c8c64dSAndroid Build Coastguard Worker 63*90c8c64dSAndroid Build Coastguard Worker expect(await trace.getEntry(-1).getValue()).toEqual('entry-4'); 64*90c8c64dSAndroid Build Coastguard Worker expect(await trace.getEntry(-5).getValue()).toEqual('entry-0'); 65*90c8c64dSAndroid Build Coastguard Worker expect(() => { 66*90c8c64dSAndroid Build Coastguard Worker trace.getEntry(-6); 67*90c8c64dSAndroid Build Coastguard Worker }).toThrow(); 68*90c8c64dSAndroid Build Coastguard Worker }); 69*90c8c64dSAndroid Build Coastguard Worker 70*90c8c64dSAndroid Build Coastguard Worker it('getFrame()', async () => { 71*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.getFrame(0))).toEqual( 72*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[0, ['entry-0']]]), 73*90c8c64dSAndroid Build Coastguard Worker ); 74*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.getFrame(1))).toEqual( 75*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[1, ['entry-1', 'entry-2']]]), 76*90c8c64dSAndroid Build Coastguard Worker ); 77*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.getFrame(2))).toEqual( 78*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[2, []]]), 79*90c8c64dSAndroid Build Coastguard Worker ); 80*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.getFrame(3))).toEqual( 81*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[3, []]]), 82*90c8c64dSAndroid Build Coastguard Worker ); 83*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.getFrame(4))).toEqual( 84*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[4, ['entry-3']]]), 85*90c8c64dSAndroid Build Coastguard Worker ); 86*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.getFrame(5))).toEqual( 87*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[5, ['entry-3']]]), 88*90c8c64dSAndroid Build Coastguard Worker ); 89*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.getFrame(6))).toEqual( 90*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[6, ['entry-4']]]), 91*90c8c64dSAndroid Build Coastguard Worker ); 92*90c8c64dSAndroid Build Coastguard Worker }); 93*90c8c64dSAndroid Build Coastguard Worker 94*90c8c64dSAndroid Build Coastguard Worker it('findClosestEntry()', async () => { 95*90c8c64dSAndroid Build Coastguard Worker // empty 96*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(0, 0).findClosestEntry(time10)).toBeUndefined(); 97*90c8c64dSAndroid Build Coastguard Worker 98*90c8c64dSAndroid Build Coastguard Worker // slice 99*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceEntries(1, -1); 100*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findClosestEntry(time9)?.getValue()).toEqual('entry-1'); 101*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findClosestEntry(time10)?.getValue()).toEqual('entry-1'); 102*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findClosestEntry(time11)?.getValue()).toEqual('entry-1'); 103*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findClosestEntry(time12)?.getValue()).toEqual('entry-3'); 104*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findClosestEntry(time13)?.getValue()).toEqual('entry-3'); 105*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findClosestEntry(time14)?.getValue()).toEqual('entry-3'); 106*90c8c64dSAndroid Build Coastguard Worker 107*90c8c64dSAndroid Build Coastguard Worker // full trace 108*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findClosestEntry(time9)?.getValue()).toEqual('entry-0'); 109*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findClosestEntry(time10)?.getValue()).toEqual('entry-0'); 110*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findClosestEntry(time11)?.getValue()).toEqual('entry-1'); 111*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findClosestEntry(time12)?.getValue()).toEqual('entry-3'); 112*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findClosestEntry(time13)?.getValue()).toEqual('entry-4'); 113*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findClosestEntry(time14)?.getValue()).toEqual('entry-4'); 114*90c8c64dSAndroid Build Coastguard Worker }); 115*90c8c64dSAndroid Build Coastguard Worker 116*90c8c64dSAndroid Build Coastguard Worker it('findFirstGreaterOrEqualEntry()', async () => { 117*90c8c64dSAndroid Build Coastguard Worker // empty 118*90c8c64dSAndroid Build Coastguard Worker expect( 119*90c8c64dSAndroid Build Coastguard Worker trace.sliceEntries(0, 0).findFirstGreaterOrEqualEntry(time10), 120*90c8c64dSAndroid Build Coastguard Worker ).toBeUndefined(); 121*90c8c64dSAndroid Build Coastguard Worker 122*90c8c64dSAndroid Build Coastguard Worker // slice 123*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceEntries(1, -1); 124*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findFirstGreaterOrEqualEntry(time9)?.getValue()).toEqual( 125*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 126*90c8c64dSAndroid Build Coastguard Worker ); 127*90c8c64dSAndroid Build Coastguard Worker expect( 128*90c8c64dSAndroid Build Coastguard Worker await slice.findFirstGreaterOrEqualEntry(time10)?.getValue(), 129*90c8c64dSAndroid Build Coastguard Worker ).toEqual('entry-1'); 130*90c8c64dSAndroid Build Coastguard Worker expect( 131*90c8c64dSAndroid Build Coastguard Worker await slice.findFirstGreaterOrEqualEntry(time11)?.getValue(), 132*90c8c64dSAndroid Build Coastguard Worker ).toEqual('entry-1'); 133*90c8c64dSAndroid Build Coastguard Worker expect( 134*90c8c64dSAndroid Build Coastguard Worker await slice.findFirstGreaterOrEqualEntry(time12)?.getValue(), 135*90c8c64dSAndroid Build Coastguard Worker ).toEqual('entry-3'); 136*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findFirstGreaterOrEqualEntry(time13)).toBeUndefined(); 137*90c8c64dSAndroid Build Coastguard Worker 138*90c8c64dSAndroid Build Coastguard Worker // full trace 139*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findFirstGreaterOrEqualEntry(time9)?.getValue()).toEqual( 140*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 141*90c8c64dSAndroid Build Coastguard Worker ); 142*90c8c64dSAndroid Build Coastguard Worker expect( 143*90c8c64dSAndroid Build Coastguard Worker await trace.findFirstGreaterOrEqualEntry(time10)?.getValue(), 144*90c8c64dSAndroid Build Coastguard Worker ).toEqual('entry-0'); 145*90c8c64dSAndroid Build Coastguard Worker expect( 146*90c8c64dSAndroid Build Coastguard Worker await trace.findFirstGreaterOrEqualEntry(time11)?.getValue(), 147*90c8c64dSAndroid Build Coastguard Worker ).toEqual('entry-1'); 148*90c8c64dSAndroid Build Coastguard Worker expect( 149*90c8c64dSAndroid Build Coastguard Worker await trace.findFirstGreaterOrEqualEntry(time12)?.getValue(), 150*90c8c64dSAndroid Build Coastguard Worker ).toEqual('entry-3'); 151*90c8c64dSAndroid Build Coastguard Worker expect( 152*90c8c64dSAndroid Build Coastguard Worker await trace.findFirstGreaterOrEqualEntry(time13)?.getValue(), 153*90c8c64dSAndroid Build Coastguard Worker ).toEqual('entry-4'); 154*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findFirstGreaterOrEqualEntry(time14)).toBeUndefined(); 155*90c8c64dSAndroid Build Coastguard Worker }); 156*90c8c64dSAndroid Build Coastguard Worker 157*90c8c64dSAndroid Build Coastguard Worker it('findFirstGreaterEntry()', async () => { 158*90c8c64dSAndroid Build Coastguard Worker // empty 159*90c8c64dSAndroid Build Coastguard Worker expect( 160*90c8c64dSAndroid Build Coastguard Worker trace.sliceEntries(0, 0).findFirstGreaterEntry(time10), 161*90c8c64dSAndroid Build Coastguard Worker ).toBeUndefined(); 162*90c8c64dSAndroid Build Coastguard Worker 163*90c8c64dSAndroid Build Coastguard Worker // slice 164*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceEntries(1, -1); 165*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findFirstGreaterEntry(time9)?.getValue()).toEqual( 166*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 167*90c8c64dSAndroid Build Coastguard Worker ); 168*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findFirstGreaterEntry(time10)?.getValue()).toEqual( 169*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 170*90c8c64dSAndroid Build Coastguard Worker ); 171*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findFirstGreaterEntry(time11)?.getValue()).toEqual( 172*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 173*90c8c64dSAndroid Build Coastguard Worker ); 174*90c8c64dSAndroid Build Coastguard Worker expect(slice.findFirstGreaterEntry(time12)).toBeUndefined(); 175*90c8c64dSAndroid Build Coastguard Worker 176*90c8c64dSAndroid Build Coastguard Worker // full trace 177*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findFirstGreaterEntry(time9)?.getValue()).toEqual( 178*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 179*90c8c64dSAndroid Build Coastguard Worker ); 180*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findFirstGreaterEntry(time10)?.getValue()).toEqual( 181*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 182*90c8c64dSAndroid Build Coastguard Worker ); 183*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findFirstGreaterEntry(time11)?.getValue()).toEqual( 184*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 185*90c8c64dSAndroid Build Coastguard Worker ); 186*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findFirstGreaterEntry(time12)?.getValue()).toEqual( 187*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 188*90c8c64dSAndroid Build Coastguard Worker ); 189*90c8c64dSAndroid Build Coastguard Worker expect(trace.findFirstGreaterEntry(time13)).toBeUndefined(); 190*90c8c64dSAndroid Build Coastguard Worker }); 191*90c8c64dSAndroid Build Coastguard Worker 192*90c8c64dSAndroid Build Coastguard Worker it('findLastLowerOrEqualEntry()', async () => { 193*90c8c64dSAndroid Build Coastguard Worker // empty 194*90c8c64dSAndroid Build Coastguard Worker expect( 195*90c8c64dSAndroid Build Coastguard Worker trace.sliceEntries(0, 0).findLastLowerOrEqualEntry(time10), 196*90c8c64dSAndroid Build Coastguard Worker ).toBeUndefined(); 197*90c8c64dSAndroid Build Coastguard Worker 198*90c8c64dSAndroid Build Coastguard Worker // slice 199*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceEntries(1, -1); 200*90c8c64dSAndroid Build Coastguard Worker expect(slice.findLastLowerOrEqualEntry(time9)).toBeUndefined(); 201*90c8c64dSAndroid Build Coastguard Worker expect(slice.findLastLowerOrEqualEntry(time10)).toBeUndefined(); 202*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findLastLowerOrEqualEntry(time11)?.getValue()).toEqual( 203*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 204*90c8c64dSAndroid Build Coastguard Worker ); 205*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findLastLowerOrEqualEntry(time12)?.getValue()).toEqual( 206*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 207*90c8c64dSAndroid Build Coastguard Worker ); 208*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findLastLowerOrEqualEntry(time13)?.getValue()).toEqual( 209*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 210*90c8c64dSAndroid Build Coastguard Worker ); 211*90c8c64dSAndroid Build Coastguard Worker 212*90c8c64dSAndroid Build Coastguard Worker // full trace 213*90c8c64dSAndroid Build Coastguard Worker expect(trace.findLastLowerOrEqualEntry(time9)).toBeUndefined(); 214*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerOrEqualEntry(time10)?.getValue()).toEqual( 215*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 216*90c8c64dSAndroid Build Coastguard Worker ); 217*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerOrEqualEntry(time11)?.getValue()).toEqual( 218*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 219*90c8c64dSAndroid Build Coastguard Worker ); 220*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerOrEqualEntry(time12)?.getValue()).toEqual( 221*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 222*90c8c64dSAndroid Build Coastguard Worker ); 223*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerOrEqualEntry(time13)?.getValue()).toEqual( 224*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 225*90c8c64dSAndroid Build Coastguard Worker ); 226*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerOrEqualEntry(time14)?.getValue()).toEqual( 227*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 228*90c8c64dSAndroid Build Coastguard Worker ); 229*90c8c64dSAndroid Build Coastguard Worker }); 230*90c8c64dSAndroid Build Coastguard Worker 231*90c8c64dSAndroid Build Coastguard Worker it('findLastLowerEntry()', async () => { 232*90c8c64dSAndroid Build Coastguard Worker // empty 233*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(0, 0).findLastLowerEntry(time10)).toBeUndefined(); 234*90c8c64dSAndroid Build Coastguard Worker 235*90c8c64dSAndroid Build Coastguard Worker // slice 236*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceEntries(1, -1); 237*90c8c64dSAndroid Build Coastguard Worker expect(slice.findLastLowerEntry(time9)).toBeUndefined(); 238*90c8c64dSAndroid Build Coastguard Worker expect(slice.findLastLowerEntry(time10)).toBeUndefined(); 239*90c8c64dSAndroid Build Coastguard Worker expect(slice.findLastLowerEntry(time11)).toBeUndefined(); 240*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findLastLowerEntry(time12)?.getValue()).toEqual( 241*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 242*90c8c64dSAndroid Build Coastguard Worker ); 243*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findLastLowerEntry(time13)?.getValue()).toEqual( 244*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 245*90c8c64dSAndroid Build Coastguard Worker ); 246*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findLastLowerEntry(time14)?.getValue()).toEqual( 247*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 248*90c8c64dSAndroid Build Coastguard Worker ); 249*90c8c64dSAndroid Build Coastguard Worker expect(await slice.findLastLowerEntry(time15)?.getValue()).toEqual( 250*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 251*90c8c64dSAndroid Build Coastguard Worker ); 252*90c8c64dSAndroid Build Coastguard Worker 253*90c8c64dSAndroid Build Coastguard Worker // full trace 254*90c8c64dSAndroid Build Coastguard Worker expect(trace.findLastLowerEntry(time9)).toBeUndefined(); 255*90c8c64dSAndroid Build Coastguard Worker expect(trace.findLastLowerEntry(time10)).toBeUndefined(); 256*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerEntry(time11)?.getValue()).toEqual( 257*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 258*90c8c64dSAndroid Build Coastguard Worker ); 259*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerEntry(time12)?.getValue()).toEqual( 260*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 261*90c8c64dSAndroid Build Coastguard Worker ); 262*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerEntry(time13)?.getValue()).toEqual( 263*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 264*90c8c64dSAndroid Build Coastguard Worker ); 265*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerEntry(time14)?.getValue()).toEqual( 266*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 267*90c8c64dSAndroid Build Coastguard Worker ); 268*90c8c64dSAndroid Build Coastguard Worker expect(await trace.findLastLowerEntry(time15)?.getValue()).toEqual( 269*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 270*90c8c64dSAndroid Build Coastguard Worker ); 271*90c8c64dSAndroid Build Coastguard Worker }); 272*90c8c64dSAndroid Build Coastguard Worker 273*90c8c64dSAndroid Build Coastguard Worker // Hint: look at frame mapping specified in test's set up to fully understand the assertions 274*90c8c64dSAndroid Build Coastguard Worker it('sliceEntries()', async () => { 275*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceEntries(1, 4); 276*90c8c64dSAndroid Build Coastguard Worker 277*90c8c64dSAndroid Build Coastguard Worker const expectedEntriesFull = ['entry-1', 'entry-2', 'entry-3']; 278*90c8c64dSAndroid Build Coastguard Worker const expectedFramesEmpty = new Map<AbsoluteFrameIndex, string[]>(); 279*90c8c64dSAndroid Build Coastguard Worker const expectedFramesFull = new Map<AbsoluteFrameIndex, string[]>([ 280*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 281*90c8c64dSAndroid Build Coastguard Worker [2, []], 282*90c8c64dSAndroid Build Coastguard Worker [3, []], 283*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 284*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 285*90c8c64dSAndroid Build Coastguard Worker ]); 286*90c8c64dSAndroid Build Coastguard Worker 287*90c8c64dSAndroid Build Coastguard Worker // empty 288*90c8c64dSAndroid Build Coastguard Worker { 289*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(1, 1))).toEqual( 290*90c8c64dSAndroid Build Coastguard Worker expectedFramesEmpty, 291*90c8c64dSAndroid Build Coastguard Worker ); 292*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(1, 1))).toEqual( 293*90c8c64dSAndroid Build Coastguard Worker [], 294*90c8c64dSAndroid Build Coastguard Worker ); 295*90c8c64dSAndroid Build Coastguard Worker 296*90c8c64dSAndroid Build Coastguard Worker expect( 297*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(-1, -1)), 298*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 299*90c8c64dSAndroid Build Coastguard Worker expect( 300*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(-1, -1)), 301*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 302*90c8c64dSAndroid Build Coastguard Worker 303*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(2, 1))).toEqual( 304*90c8c64dSAndroid Build Coastguard Worker expectedFramesEmpty, 305*90c8c64dSAndroid Build Coastguard Worker ); 306*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(2, 1))).toEqual( 307*90c8c64dSAndroid Build Coastguard Worker [], 308*90c8c64dSAndroid Build Coastguard Worker ); 309*90c8c64dSAndroid Build Coastguard Worker 310*90c8c64dSAndroid Build Coastguard Worker expect( 311*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(-1, -2)), 312*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 313*90c8c64dSAndroid Build Coastguard Worker expect( 314*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(-1, -2)), 315*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 316*90c8c64dSAndroid Build Coastguard Worker } 317*90c8c64dSAndroid Build Coastguard Worker 318*90c8c64dSAndroid Build Coastguard Worker // full 319*90c8c64dSAndroid Build Coastguard Worker { 320*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries())).toEqual( 321*90c8c64dSAndroid Build Coastguard Worker expectedEntriesFull, 322*90c8c64dSAndroid Build Coastguard Worker ); 323*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries())).toEqual( 324*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 325*90c8c64dSAndroid Build Coastguard Worker ); 326*90c8c64dSAndroid Build Coastguard Worker 327*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(0))).toEqual( 328*90c8c64dSAndroid Build Coastguard Worker expectedEntriesFull, 329*90c8c64dSAndroid Build Coastguard Worker ); 330*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(0))).toEqual( 331*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 332*90c8c64dSAndroid Build Coastguard Worker ); 333*90c8c64dSAndroid Build Coastguard Worker 334*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(0, 3))).toEqual( 335*90c8c64dSAndroid Build Coastguard Worker expectedEntriesFull, 336*90c8c64dSAndroid Build Coastguard Worker ); 337*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(0, 3))).toEqual( 338*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 339*90c8c64dSAndroid Build Coastguard Worker ); 340*90c8c64dSAndroid Build Coastguard Worker 341*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(-3))).toEqual( 342*90c8c64dSAndroid Build Coastguard Worker expectedEntriesFull, 343*90c8c64dSAndroid Build Coastguard Worker ); 344*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(-3))).toEqual( 345*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 346*90c8c64dSAndroid Build Coastguard Worker ); 347*90c8c64dSAndroid Build Coastguard Worker 348*90c8c64dSAndroid Build Coastguard Worker expect( 349*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(-3, 3)), 350*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedEntriesFull); 351*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(-3, 3))).toEqual( 352*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 353*90c8c64dSAndroid Build Coastguard Worker ); 354*90c8c64dSAndroid Build Coastguard Worker } 355*90c8c64dSAndroid Build Coastguard Worker 356*90c8c64dSAndroid Build Coastguard Worker // slice away front (positive index) 357*90c8c64dSAndroid Build Coastguard Worker { 358*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(1))).toEqual([ 359*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 360*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 361*90c8c64dSAndroid Build Coastguard Worker ]); 362*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(1))).toEqual( 363*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 364*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-2']], 365*90c8c64dSAndroid Build Coastguard Worker [2, []], 366*90c8c64dSAndroid Build Coastguard Worker [3, []], 367*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 368*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 369*90c8c64dSAndroid Build Coastguard Worker ]), 370*90c8c64dSAndroid Build Coastguard Worker ); 371*90c8c64dSAndroid Build Coastguard Worker 372*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(2))).toEqual([ 373*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 374*90c8c64dSAndroid Build Coastguard Worker ]); 375*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(2))).toEqual( 376*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 377*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 378*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 379*90c8c64dSAndroid Build Coastguard Worker ]), 380*90c8c64dSAndroid Build Coastguard Worker ); 381*90c8c64dSAndroid Build Coastguard Worker 382*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(3))).toEqual( 383*90c8c64dSAndroid Build Coastguard Worker [], 384*90c8c64dSAndroid Build Coastguard Worker ); 385*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(3))).toEqual( 386*90c8c64dSAndroid Build Coastguard Worker expectedFramesEmpty, 387*90c8c64dSAndroid Build Coastguard Worker ); 388*90c8c64dSAndroid Build Coastguard Worker 389*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(4))).toEqual( 390*90c8c64dSAndroid Build Coastguard Worker [], 391*90c8c64dSAndroid Build Coastguard Worker ); 392*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(4))).toEqual( 393*90c8c64dSAndroid Build Coastguard Worker expectedFramesEmpty, 394*90c8c64dSAndroid Build Coastguard Worker ); 395*90c8c64dSAndroid Build Coastguard Worker 396*90c8c64dSAndroid Build Coastguard Worker expect( 397*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(1000000)), 398*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 399*90c8c64dSAndroid Build Coastguard Worker expect( 400*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(1000000)), 401*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 402*90c8c64dSAndroid Build Coastguard Worker } 403*90c8c64dSAndroid Build Coastguard Worker 404*90c8c64dSAndroid Build Coastguard Worker // slice away front (negative index) 405*90c8c64dSAndroid Build Coastguard Worker { 406*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(-3))).toEqual( 407*90c8c64dSAndroid Build Coastguard Worker expectedEntriesFull, 408*90c8c64dSAndroid Build Coastguard Worker ); 409*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(-3))).toEqual( 410*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 411*90c8c64dSAndroid Build Coastguard Worker ); 412*90c8c64dSAndroid Build Coastguard Worker 413*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(-2))).toEqual([ 414*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 415*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 416*90c8c64dSAndroid Build Coastguard Worker ]); 417*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(-2))).toEqual( 418*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 419*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-2']], 420*90c8c64dSAndroid Build Coastguard Worker [2, []], 421*90c8c64dSAndroid Build Coastguard Worker [3, []], 422*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 423*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 424*90c8c64dSAndroid Build Coastguard Worker ]), 425*90c8c64dSAndroid Build Coastguard Worker ); 426*90c8c64dSAndroid Build Coastguard Worker 427*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceEntries(-1))).toEqual([ 428*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 429*90c8c64dSAndroid Build Coastguard Worker ]); 430*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceEntries(-1))).toEqual( 431*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 432*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 433*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 434*90c8c64dSAndroid Build Coastguard Worker ]), 435*90c8c64dSAndroid Build Coastguard Worker ); 436*90c8c64dSAndroid Build Coastguard Worker } 437*90c8c64dSAndroid Build Coastguard Worker 438*90c8c64dSAndroid Build Coastguard Worker // slice away back (positive index) 439*90c8c64dSAndroid Build Coastguard Worker { 440*90c8c64dSAndroid Build Coastguard Worker expect( 441*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(undefined, 2)), 442*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1', 'entry-2']); 443*90c8c64dSAndroid Build Coastguard Worker expect( 444*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(undefined, 2)), 445*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 446*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[1, ['entry-1', 'entry-2']]]), 447*90c8c64dSAndroid Build Coastguard Worker ); 448*90c8c64dSAndroid Build Coastguard Worker 449*90c8c64dSAndroid Build Coastguard Worker expect( 450*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(undefined, 1)), 451*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1']); 452*90c8c64dSAndroid Build Coastguard Worker expect( 453*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(undefined, 1)), 454*90c8c64dSAndroid Build Coastguard Worker ).toEqual(new Map<AbsoluteFrameIndex, string[]>([[1, ['entry-1']]])); 455*90c8c64dSAndroid Build Coastguard Worker 456*90c8c64dSAndroid Build Coastguard Worker expect( 457*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(undefined, 0)), 458*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 459*90c8c64dSAndroid Build Coastguard Worker expect( 460*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(undefined, 0)), 461*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 462*90c8c64dSAndroid Build Coastguard Worker } 463*90c8c64dSAndroid Build Coastguard Worker 464*90c8c64dSAndroid Build Coastguard Worker // slice away back (negative index) 465*90c8c64dSAndroid Build Coastguard Worker { 466*90c8c64dSAndroid Build Coastguard Worker expect( 467*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(undefined, -1)), 468*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1', 'entry-2']); 469*90c8c64dSAndroid Build Coastguard Worker expect( 470*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(undefined, -1)), 471*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 472*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[1, ['entry-1', 'entry-2']]]), 473*90c8c64dSAndroid Build Coastguard Worker ); 474*90c8c64dSAndroid Build Coastguard Worker 475*90c8c64dSAndroid Build Coastguard Worker expect( 476*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(undefined, -2)), 477*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1']); 478*90c8c64dSAndroid Build Coastguard Worker expect( 479*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(undefined, -2)), 480*90c8c64dSAndroid Build Coastguard Worker ).toEqual(new Map<AbsoluteFrameIndex, string[]>([[1, ['entry-1']]])); 481*90c8c64dSAndroid Build Coastguard Worker 482*90c8c64dSAndroid Build Coastguard Worker expect( 483*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(undefined, -3)), 484*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 485*90c8c64dSAndroid Build Coastguard Worker expect( 486*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(undefined, -3)), 487*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 488*90c8c64dSAndroid Build Coastguard Worker 489*90c8c64dSAndroid Build Coastguard Worker expect( 490*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceEntries(undefined, -4)), 491*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 492*90c8c64dSAndroid Build Coastguard Worker expect( 493*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(undefined, -4)), 494*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 495*90c8c64dSAndroid Build Coastguard Worker 496*90c8c64dSAndroid Build Coastguard Worker expect( 497*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries( 498*90c8c64dSAndroid Build Coastguard Worker slice.sliceEntries(undefined, -1000000), 499*90c8c64dSAndroid Build Coastguard Worker ), 500*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 501*90c8c64dSAndroid Build Coastguard Worker expect( 502*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceEntries(undefined, -1000000)), 503*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 504*90c8c64dSAndroid Build Coastguard Worker } 505*90c8c64dSAndroid Build Coastguard Worker }); 506*90c8c64dSAndroid Build Coastguard Worker 507*90c8c64dSAndroid Build Coastguard Worker // Hint: look at frame mapping specified in test's set up to fully understand the assertions 508*90c8c64dSAndroid Build Coastguard Worker it('sliceTime()', async () => { 509*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceTime(time11, time13); // drop first + last entries 510*90c8c64dSAndroid Build Coastguard Worker 511*90c8c64dSAndroid Build Coastguard Worker const expectedEntriesFull = ['entry-1', 'entry-2', 'entry-3']; 512*90c8c64dSAndroid Build Coastguard Worker const expectedFramesEmpty = new Map<AbsoluteFrameIndex, string[]>(); 513*90c8c64dSAndroid Build Coastguard Worker const expectedFramesFull = new Map<AbsoluteFrameIndex, string[]>([ 514*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 515*90c8c64dSAndroid Build Coastguard Worker [2, []], 516*90c8c64dSAndroid Build Coastguard Worker [3, []], 517*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 518*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 519*90c8c64dSAndroid Build Coastguard Worker ]); 520*90c8c64dSAndroid Build Coastguard Worker 521*90c8c64dSAndroid Build Coastguard Worker // empty 522*90c8c64dSAndroid Build Coastguard Worker { 523*90c8c64dSAndroid Build Coastguard Worker expect( 524*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(time11, time11)), 525*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 526*90c8c64dSAndroid Build Coastguard Worker expect( 527*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(time11, time11)), 528*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 529*90c8c64dSAndroid Build Coastguard Worker 530*90c8c64dSAndroid Build Coastguard Worker expect( 531*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(time11, time10)), 532*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 533*90c8c64dSAndroid Build Coastguard Worker expect( 534*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(time11, time10)), 535*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 536*90c8c64dSAndroid Build Coastguard Worker 537*90c8c64dSAndroid Build Coastguard Worker expect( 538*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(time9, time10)), 539*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 540*90c8c64dSAndroid Build Coastguard Worker expect( 541*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(time9, time10)), 542*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 543*90c8c64dSAndroid Build Coastguard Worker 544*90c8c64dSAndroid Build Coastguard Worker expect( 545*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(time10, time9)), 546*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 547*90c8c64dSAndroid Build Coastguard Worker expect( 548*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(time10, time9)), 549*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 550*90c8c64dSAndroid Build Coastguard Worker 551*90c8c64dSAndroid Build Coastguard Worker expect( 552*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(time14, time15)), 553*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 554*90c8c64dSAndroid Build Coastguard Worker expect( 555*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(time14, time15)), 556*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 557*90c8c64dSAndroid Build Coastguard Worker 558*90c8c64dSAndroid Build Coastguard Worker expect( 559*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(time15, time14)), 560*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 561*90c8c64dSAndroid Build Coastguard Worker expect( 562*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(time15, time14)), 563*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 564*90c8c64dSAndroid Build Coastguard Worker } 565*90c8c64dSAndroid Build Coastguard Worker 566*90c8c64dSAndroid Build Coastguard Worker // full 567*90c8c64dSAndroid Build Coastguard Worker { 568*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceTime())).toEqual( 569*90c8c64dSAndroid Build Coastguard Worker expectedEntriesFull, 570*90c8c64dSAndroid Build Coastguard Worker ); 571*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceTime())).toEqual( 572*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 573*90c8c64dSAndroid Build Coastguard Worker ); 574*90c8c64dSAndroid Build Coastguard Worker 575*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceTime(time9))).toEqual( 576*90c8c64dSAndroid Build Coastguard Worker expectedEntriesFull, 577*90c8c64dSAndroid Build Coastguard Worker ); 578*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceTime(time9))).toEqual( 579*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 580*90c8c64dSAndroid Build Coastguard Worker ); 581*90c8c64dSAndroid Build Coastguard Worker 582*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceTime(time10))).toEqual( 583*90c8c64dSAndroid Build Coastguard Worker expectedEntriesFull, 584*90c8c64dSAndroid Build Coastguard Worker ); 585*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceTime(time10))).toEqual( 586*90c8c64dSAndroid Build Coastguard Worker expectedFramesFull, 587*90c8c64dSAndroid Build Coastguard Worker ); 588*90c8c64dSAndroid Build Coastguard Worker 589*90c8c64dSAndroid Build Coastguard Worker expect( 590*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(undefined, time14)), 591*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedEntriesFull); 592*90c8c64dSAndroid Build Coastguard Worker expect( 593*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(undefined, time14)), 594*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesFull); 595*90c8c64dSAndroid Build Coastguard Worker 596*90c8c64dSAndroid Build Coastguard Worker expect( 597*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(undefined, time15)), 598*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedEntriesFull); 599*90c8c64dSAndroid Build Coastguard Worker expect( 600*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(undefined, time15)), 601*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesFull); 602*90c8c64dSAndroid Build Coastguard Worker 603*90c8c64dSAndroid Build Coastguard Worker expect( 604*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(time10, time14)), 605*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedEntriesFull); 606*90c8c64dSAndroid Build Coastguard Worker expect( 607*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(time10, time14)), 608*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesFull); 609*90c8c64dSAndroid Build Coastguard Worker } 610*90c8c64dSAndroid Build Coastguard Worker 611*90c8c64dSAndroid Build Coastguard Worker // middle 612*90c8c64dSAndroid Build Coastguard Worker { 613*90c8c64dSAndroid Build Coastguard Worker expect( 614*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(time12, time13)), 615*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-3']); 616*90c8c64dSAndroid Build Coastguard Worker expect( 617*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(time12, time13)), 618*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 619*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 620*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 621*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 622*90c8c64dSAndroid Build Coastguard Worker ]), 623*90c8c64dSAndroid Build Coastguard Worker ); 624*90c8c64dSAndroid Build Coastguard Worker } 625*90c8c64dSAndroid Build Coastguard Worker 626*90c8c64dSAndroid Build Coastguard Worker // slice away front 627*90c8c64dSAndroid Build Coastguard Worker { 628*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceTime(time12))).toEqual([ 629*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 630*90c8c64dSAndroid Build Coastguard Worker ]); 631*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceTime(time12))).toEqual( 632*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 633*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 634*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 635*90c8c64dSAndroid Build Coastguard Worker ]), 636*90c8c64dSAndroid Build Coastguard Worker ); 637*90c8c64dSAndroid Build Coastguard Worker 638*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceTime(time13))).toEqual( 639*90c8c64dSAndroid Build Coastguard Worker [], 640*90c8c64dSAndroid Build Coastguard Worker ); 641*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceTime(time13))).toEqual( 642*90c8c64dSAndroid Build Coastguard Worker expectedFramesEmpty, 643*90c8c64dSAndroid Build Coastguard Worker ); 644*90c8c64dSAndroid Build Coastguard Worker 645*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceTime(time14))).toEqual( 646*90c8c64dSAndroid Build Coastguard Worker [], 647*90c8c64dSAndroid Build Coastguard Worker ); 648*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceTime(time14))).toEqual( 649*90c8c64dSAndroid Build Coastguard Worker expectedFramesEmpty, 650*90c8c64dSAndroid Build Coastguard Worker ); 651*90c8c64dSAndroid Build Coastguard Worker 652*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceTime(time15))).toEqual( 653*90c8c64dSAndroid Build Coastguard Worker [], 654*90c8c64dSAndroid Build Coastguard Worker ); 655*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceTime(time15))).toEqual( 656*90c8c64dSAndroid Build Coastguard Worker expectedFramesEmpty, 657*90c8c64dSAndroid Build Coastguard Worker ); 658*90c8c64dSAndroid Build Coastguard Worker } 659*90c8c64dSAndroid Build Coastguard Worker 660*90c8c64dSAndroid Build Coastguard Worker // slice away back 661*90c8c64dSAndroid Build Coastguard Worker { 662*90c8c64dSAndroid Build Coastguard Worker expect( 663*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(undefined, time12)), 664*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1', 'entry-2']); 665*90c8c64dSAndroid Build Coastguard Worker expect( 666*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(undefined, time12)), 667*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 668*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[1, ['entry-1', 'entry-2']]]), 669*90c8c64dSAndroid Build Coastguard Worker ); 670*90c8c64dSAndroid Build Coastguard Worker 671*90c8c64dSAndroid Build Coastguard Worker expect( 672*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(undefined, time11)), 673*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 674*90c8c64dSAndroid Build Coastguard Worker expect( 675*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(undefined, time11)), 676*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 677*90c8c64dSAndroid Build Coastguard Worker 678*90c8c64dSAndroid Build Coastguard Worker expect( 679*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(undefined, time10)), 680*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 681*90c8c64dSAndroid Build Coastguard Worker expect( 682*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(undefined, time10)), 683*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 684*90c8c64dSAndroid Build Coastguard Worker 685*90c8c64dSAndroid Build Coastguard Worker expect( 686*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceTime(undefined, time9)), 687*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 688*90c8c64dSAndroid Build Coastguard Worker expect( 689*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceTime(undefined, time9)), 690*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFramesEmpty); 691*90c8c64dSAndroid Build Coastguard Worker } 692*90c8c64dSAndroid Build Coastguard Worker }); 693*90c8c64dSAndroid Build Coastguard Worker 694*90c8c64dSAndroid Build Coastguard Worker // Hint: look at frame mapping specified in test's set up to fully understand the assertions 695*90c8c64dSAndroid Build Coastguard Worker it('sliceFrames()', async () => { 696*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceEntries(1, -1); 697*90c8c64dSAndroid Build Coastguard Worker 698*90c8c64dSAndroid Build Coastguard Worker // empty 699*90c8c64dSAndroid Build Coastguard Worker { 700*90c8c64dSAndroid Build Coastguard Worker const expectedEntries = new Array<string>(); 701*90c8c64dSAndroid Build Coastguard Worker const expectedFrames = new Map<AbsoluteFrameIndex, string[]>([]); 702*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(1, 1))).toEqual( 703*90c8c64dSAndroid Build Coastguard Worker expectedEntries, 704*90c8c64dSAndroid Build Coastguard Worker ); 705*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(1, 1))).toEqual( 706*90c8c64dSAndroid Build Coastguard Worker expectedFrames, 707*90c8c64dSAndroid Build Coastguard Worker ); 708*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(5, 1))).toEqual( 709*90c8c64dSAndroid Build Coastguard Worker expectedEntries, 710*90c8c64dSAndroid Build Coastguard Worker ); 711*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(5, 1))).toEqual( 712*90c8c64dSAndroid Build Coastguard Worker expectedFrames, 713*90c8c64dSAndroid Build Coastguard Worker ); 714*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(3, 2))).toEqual( 715*90c8c64dSAndroid Build Coastguard Worker expectedEntries, 716*90c8c64dSAndroid Build Coastguard Worker ); 717*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(3, 2))).toEqual( 718*90c8c64dSAndroid Build Coastguard Worker expectedFrames, 719*90c8c64dSAndroid Build Coastguard Worker ); 720*90c8c64dSAndroid Build Coastguard Worker } 721*90c8c64dSAndroid Build Coastguard Worker 722*90c8c64dSAndroid Build Coastguard Worker // middle 723*90c8c64dSAndroid Build Coastguard Worker { 724*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(2, 3))).toEqual( 725*90c8c64dSAndroid Build Coastguard Worker [], 726*90c8c64dSAndroid Build Coastguard Worker ); 727*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(2, 3))).toEqual( 728*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[2, []]]), 729*90c8c64dSAndroid Build Coastguard Worker ); 730*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(2, 4))).toEqual( 731*90c8c64dSAndroid Build Coastguard Worker [], 732*90c8c64dSAndroid Build Coastguard Worker ); 733*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(2, 4))).toEqual( 734*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 735*90c8c64dSAndroid Build Coastguard Worker [2, []], 736*90c8c64dSAndroid Build Coastguard Worker [3, []], 737*90c8c64dSAndroid Build Coastguard Worker ]), 738*90c8c64dSAndroid Build Coastguard Worker ); 739*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(2, 5))).toEqual([ 740*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 741*90c8c64dSAndroid Build Coastguard Worker ]); 742*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(2, 5))).toEqual( 743*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 744*90c8c64dSAndroid Build Coastguard Worker [2, []], 745*90c8c64dSAndroid Build Coastguard Worker [3, []], 746*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 747*90c8c64dSAndroid Build Coastguard Worker ]), 748*90c8c64dSAndroid Build Coastguard Worker ); 749*90c8c64dSAndroid Build Coastguard Worker } 750*90c8c64dSAndroid Build Coastguard Worker 751*90c8c64dSAndroid Build Coastguard Worker // full 752*90c8c64dSAndroid Build Coastguard Worker { 753*90c8c64dSAndroid Build Coastguard Worker const expectedEntries = ['entry-1', 'entry-2', 'entry-3']; 754*90c8c64dSAndroid Build Coastguard Worker const expectedFrames = new Map<AbsoluteFrameIndex, string[]>([ 755*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 756*90c8c64dSAndroid Build Coastguard Worker [2, []], 757*90c8c64dSAndroid Build Coastguard Worker [3, []], 758*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 759*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 760*90c8c64dSAndroid Build Coastguard Worker ]); 761*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames())).toEqual( 762*90c8c64dSAndroid Build Coastguard Worker expectedEntries, 763*90c8c64dSAndroid Build Coastguard Worker ); 764*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames())).toEqual( 765*90c8c64dSAndroid Build Coastguard Worker expectedFrames, 766*90c8c64dSAndroid Build Coastguard Worker ); 767*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(0))).toEqual( 768*90c8c64dSAndroid Build Coastguard Worker expectedEntries, 769*90c8c64dSAndroid Build Coastguard Worker ); 770*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(0))).toEqual( 771*90c8c64dSAndroid Build Coastguard Worker expectedFrames, 772*90c8c64dSAndroid Build Coastguard Worker ); 773*90c8c64dSAndroid Build Coastguard Worker expect( 774*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceFrames(undefined, 6)), 775*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedEntries); 776*90c8c64dSAndroid Build Coastguard Worker expect( 777*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceFrames(undefined, 6)), 778*90c8c64dSAndroid Build Coastguard Worker ).toEqual(expectedFrames); 779*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(1, 6))).toEqual( 780*90c8c64dSAndroid Build Coastguard Worker expectedEntries, 781*90c8c64dSAndroid Build Coastguard Worker ); 782*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(1, 6))).toEqual( 783*90c8c64dSAndroid Build Coastguard Worker expectedFrames, 784*90c8c64dSAndroid Build Coastguard Worker ); 785*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(0, 7))).toEqual( 786*90c8c64dSAndroid Build Coastguard Worker expectedEntries, 787*90c8c64dSAndroid Build Coastguard Worker ); 788*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(0, 7))).toEqual( 789*90c8c64dSAndroid Build Coastguard Worker expectedFrames, 790*90c8c64dSAndroid Build Coastguard Worker ); 791*90c8c64dSAndroid Build Coastguard Worker } 792*90c8c64dSAndroid Build Coastguard Worker 793*90c8c64dSAndroid Build Coastguard Worker // slice away front 794*90c8c64dSAndroid Build Coastguard Worker { 795*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(2))).toEqual([ 796*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 797*90c8c64dSAndroid Build Coastguard Worker ]); 798*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(2))).toEqual( 799*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 800*90c8c64dSAndroid Build Coastguard Worker [2, []], 801*90c8c64dSAndroid Build Coastguard Worker [3, []], 802*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 803*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 804*90c8c64dSAndroid Build Coastguard Worker ]), 805*90c8c64dSAndroid Build Coastguard Worker ); 806*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(4))).toEqual([ 807*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 808*90c8c64dSAndroid Build Coastguard Worker ]); 809*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(4))).toEqual( 810*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 811*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 812*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 813*90c8c64dSAndroid Build Coastguard Worker ]), 814*90c8c64dSAndroid Build Coastguard Worker ); 815*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(5))).toEqual([ 816*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 817*90c8c64dSAndroid Build Coastguard Worker ]); 818*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(5))).toEqual( 819*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[5, ['entry-3']]]), 820*90c8c64dSAndroid Build Coastguard Worker ); 821*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(6))).toEqual([]); 822*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(6))).toEqual( 823*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([]), 824*90c8c64dSAndroid Build Coastguard Worker ); 825*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(slice.sliceFrames(1000))).toEqual( 826*90c8c64dSAndroid Build Coastguard Worker [], 827*90c8c64dSAndroid Build Coastguard Worker ); 828*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice.sliceFrames(1000))).toEqual( 829*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([]), 830*90c8c64dSAndroid Build Coastguard Worker ); 831*90c8c64dSAndroid Build Coastguard Worker } 832*90c8c64dSAndroid Build Coastguard Worker 833*90c8c64dSAndroid Build Coastguard Worker // slice away back 834*90c8c64dSAndroid Build Coastguard Worker { 835*90c8c64dSAndroid Build Coastguard Worker expect( 836*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceFrames(undefined, 6)), 837*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1', 'entry-2', 'entry-3']); 838*90c8c64dSAndroid Build Coastguard Worker expect( 839*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceFrames(undefined, 6)), 840*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 841*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 842*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 843*90c8c64dSAndroid Build Coastguard Worker [2, []], 844*90c8c64dSAndroid Build Coastguard Worker [3, []], 845*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 846*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 847*90c8c64dSAndroid Build Coastguard Worker ]), 848*90c8c64dSAndroid Build Coastguard Worker ); 849*90c8c64dSAndroid Build Coastguard Worker expect( 850*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceFrames(undefined, 5)), 851*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1', 'entry-2', 'entry-3']); 852*90c8c64dSAndroid Build Coastguard Worker expect( 853*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceFrames(undefined, 5)), 854*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 855*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 856*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 857*90c8c64dSAndroid Build Coastguard Worker [2, []], 858*90c8c64dSAndroid Build Coastguard Worker [3, []], 859*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 860*90c8c64dSAndroid Build Coastguard Worker ]), 861*90c8c64dSAndroid Build Coastguard Worker ); 862*90c8c64dSAndroid Build Coastguard Worker expect( 863*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceFrames(undefined, 4)), 864*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1', 'entry-2']); 865*90c8c64dSAndroid Build Coastguard Worker expect( 866*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceFrames(undefined, 4)), 867*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 868*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 869*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 870*90c8c64dSAndroid Build Coastguard Worker [2, []], 871*90c8c64dSAndroid Build Coastguard Worker [3, []], 872*90c8c64dSAndroid Build Coastguard Worker ]), 873*90c8c64dSAndroid Build Coastguard Worker ); 874*90c8c64dSAndroid Build Coastguard Worker expect( 875*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceFrames(undefined, 3)), 876*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1', 'entry-2']); 877*90c8c64dSAndroid Build Coastguard Worker expect( 878*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceFrames(undefined, 3)), 879*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 880*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 881*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 882*90c8c64dSAndroid Build Coastguard Worker [2, []], 883*90c8c64dSAndroid Build Coastguard Worker ]), 884*90c8c64dSAndroid Build Coastguard Worker ); 885*90c8c64dSAndroid Build Coastguard Worker expect( 886*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceFrames(undefined, 2)), 887*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1', 'entry-2']); 888*90c8c64dSAndroid Build Coastguard Worker expect( 889*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceFrames(undefined, 2)), 890*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 891*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[1, ['entry-1', 'entry-2']]]), 892*90c8c64dSAndroid Build Coastguard Worker ); 893*90c8c64dSAndroid Build Coastguard Worker expect( 894*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceFrames(undefined, 1)), 895*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 896*90c8c64dSAndroid Build Coastguard Worker expect( 897*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceFrames(undefined, 1)), 898*90c8c64dSAndroid Build Coastguard Worker ).toEqual(new Map<AbsoluteFrameIndex, string[]>()); 899*90c8c64dSAndroid Build Coastguard Worker expect( 900*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(slice.sliceFrames(undefined, 0)), 901*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 902*90c8c64dSAndroid Build Coastguard Worker expect( 903*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(slice.sliceFrames(undefined, 0)), 904*90c8c64dSAndroid Build Coastguard Worker ).toEqual(new Map<AbsoluteFrameIndex, string[]>()); 905*90c8c64dSAndroid Build Coastguard Worker } 906*90c8c64dSAndroid Build Coastguard Worker }); 907*90c8c64dSAndroid Build Coastguard Worker 908*90c8c64dSAndroid Build Coastguard Worker it('can slice full trace', async () => { 909*90c8c64dSAndroid Build Coastguard Worker // entries 910*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(1, 1))).toEqual( 911*90c8c64dSAndroid Build Coastguard Worker [], 912*90c8c64dSAndroid Build Coastguard Worker ); 913*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries())).toEqual([ 914*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 915*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 916*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 917*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 918*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 919*90c8c64dSAndroid Build Coastguard Worker ]); 920*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(2))).toEqual([ 921*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 922*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 923*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 924*90c8c64dSAndroid Build Coastguard Worker ]); 925*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(-3))).toEqual([ 926*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 927*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 928*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 929*90c8c64dSAndroid Build Coastguard Worker ]); 930*90c8c64dSAndroid Build Coastguard Worker expect( 931*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(trace.sliceEntries(undefined, 3)), 932*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-0', 'entry-1', 'entry-2']); 933*90c8c64dSAndroid Build Coastguard Worker expect( 934*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(trace.sliceEntries(undefined, -2)), 935*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-0', 'entry-1', 'entry-2']); 936*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(1, 4))).toEqual([ 937*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 938*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 939*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 940*90c8c64dSAndroid Build Coastguard Worker ]); 941*90c8c64dSAndroid Build Coastguard Worker 942*90c8c64dSAndroid Build Coastguard Worker // time 943*90c8c64dSAndroid Build Coastguard Worker const time12 = TimestampConverterUtils.makeRealTimestamp(12n); 944*90c8c64dSAndroid Build Coastguard Worker const time13 = TimestampConverterUtils.makeRealTimestamp(13n); 945*90c8c64dSAndroid Build Coastguard Worker expect( 946*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(trace.sliceTime(time12, time12)), 947*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 948*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime())).toEqual([ 949*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 950*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 951*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 952*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 953*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 954*90c8c64dSAndroid Build Coastguard Worker ]); 955*90c8c64dSAndroid Build Coastguard Worker expect( 956*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(trace.sliceTime(time12, time13)), 957*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-3']); 958*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime(time12))).toEqual([ 959*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 960*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 961*90c8c64dSAndroid Build Coastguard Worker ]); 962*90c8c64dSAndroid Build Coastguard Worker expect( 963*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(trace.sliceTime(undefined, time12)), 964*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-0', 'entry-1', 'entry-2']); 965*90c8c64dSAndroid Build Coastguard Worker 966*90c8c64dSAndroid Build Coastguard Worker // frames 967*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceFrames(1, 1))).toEqual( 968*90c8c64dSAndroid Build Coastguard Worker [], 969*90c8c64dSAndroid Build Coastguard Worker ); 970*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceFrames())).toEqual([ 971*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 972*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 973*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 974*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 975*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 976*90c8c64dSAndroid Build Coastguard Worker ]); 977*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceFrames(2))).toEqual([ 978*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 979*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 980*90c8c64dSAndroid Build Coastguard Worker ]); 981*90c8c64dSAndroid Build Coastguard Worker expect( 982*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(trace.sliceFrames(undefined, 5)), 983*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-0', 'entry-1', 'entry-2', 'entry-3']); 984*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceFrames(2, 5))).toEqual([ 985*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 986*90c8c64dSAndroid Build Coastguard Worker ]); 987*90c8c64dSAndroid Build Coastguard Worker }); 988*90c8c64dSAndroid Build Coastguard Worker 989*90c8c64dSAndroid Build Coastguard Worker it('can slice empty trace', async () => { 990*90c8c64dSAndroid Build Coastguard Worker const empty = trace.sliceEntries(0, 0); 991*90c8c64dSAndroid Build Coastguard Worker 992*90c8c64dSAndroid Build Coastguard Worker // entries 993*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(empty.sliceEntries())).toEqual([]); 994*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(empty.sliceEntries(1))).toEqual([]); 995*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(empty.sliceEntries(1, 2))).toEqual( 996*90c8c64dSAndroid Build Coastguard Worker [], 997*90c8c64dSAndroid Build Coastguard Worker ); 998*90c8c64dSAndroid Build Coastguard Worker 999*90c8c64dSAndroid Build Coastguard Worker // time 1000*90c8c64dSAndroid Build Coastguard Worker const time12 = TimestampConverterUtils.makeRealTimestamp(12n); 1001*90c8c64dSAndroid Build Coastguard Worker const time13 = TimestampConverterUtils.makeRealTimestamp(13n); 1002*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(empty.sliceTime())).toEqual([]); 1003*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(empty.sliceTime(time12))).toEqual( 1004*90c8c64dSAndroid Build Coastguard Worker [], 1005*90c8c64dSAndroid Build Coastguard Worker ); 1006*90c8c64dSAndroid Build Coastguard Worker expect( 1007*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(empty.sliceTime(time12, time13)), 1008*90c8c64dSAndroid Build Coastguard Worker ).toEqual([]); 1009*90c8c64dSAndroid Build Coastguard Worker 1010*90c8c64dSAndroid Build Coastguard Worker // frames 1011*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(empty.sliceFrames())).toEqual([]); 1012*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(empty.sliceFrames(1))).toEqual([]); 1013*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(empty.sliceFrames(1, 2))).toEqual( 1014*90c8c64dSAndroid Build Coastguard Worker [], 1015*90c8c64dSAndroid Build Coastguard Worker ); 1016*90c8c64dSAndroid Build Coastguard Worker }); 1017*90c8c64dSAndroid Build Coastguard Worker 1018*90c8c64dSAndroid Build Coastguard Worker it('forEachEntry()', async () => { 1019*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace)).toEqual([ 1020*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 1021*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1022*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1023*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1024*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1025*90c8c64dSAndroid Build Coastguard Worker ]); 1026*90c8c64dSAndroid Build Coastguard Worker }); 1027*90c8c64dSAndroid Build Coastguard Worker 1028*90c8c64dSAndroid Build Coastguard Worker it('forEachTimestamp()', () => { 1029*90c8c64dSAndroid Build Coastguard Worker expect(TraceUtils.extractTimestamps(trace)).toEqual([ 1030*90c8c64dSAndroid Build Coastguard Worker time10, 1031*90c8c64dSAndroid Build Coastguard Worker time11, 1032*90c8c64dSAndroid Build Coastguard Worker time11, 1033*90c8c64dSAndroid Build Coastguard Worker time12, 1034*90c8c64dSAndroid Build Coastguard Worker time13, 1035*90c8c64dSAndroid Build Coastguard Worker ]); 1036*90c8c64dSAndroid Build Coastguard Worker expect(TraceUtils.extractTimestamps(trace.sliceEntries(1, -1))).toEqual([ 1037*90c8c64dSAndroid Build Coastguard Worker time11, 1038*90c8c64dSAndroid Build Coastguard Worker time11, 1039*90c8c64dSAndroid Build Coastguard Worker time12, 1040*90c8c64dSAndroid Build Coastguard Worker ]); 1041*90c8c64dSAndroid Build Coastguard Worker }); 1042*90c8c64dSAndroid Build Coastguard Worker 1043*90c8c64dSAndroid Build Coastguard Worker // Hint: look at frame mapping specified in test's set up to fully understand the assertions 1044*90c8c64dSAndroid Build Coastguard Worker it('forEachFrame()', async () => { 1045*90c8c64dSAndroid Build Coastguard Worker // full trace 1046*90c8c64dSAndroid Build Coastguard Worker { 1047*90c8c64dSAndroid Build Coastguard Worker const expected = new Map<AbsoluteFrameIndex, string[]>([ 1048*90c8c64dSAndroid Build Coastguard Worker [0, ['entry-0']], 1049*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 1050*90c8c64dSAndroid Build Coastguard Worker [2, []], 1051*90c8c64dSAndroid Build Coastguard Worker [3, []], 1052*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 1053*90c8c64dSAndroid Build Coastguard Worker [5, ['entry-3']], 1054*90c8c64dSAndroid Build Coastguard Worker [6, ['entry-4']], 1055*90c8c64dSAndroid Build Coastguard Worker ]); 1056*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace)).toEqual(expected); 1057*90c8c64dSAndroid Build Coastguard Worker } 1058*90c8c64dSAndroid Build Coastguard Worker // slice 1059*90c8c64dSAndroid Build Coastguard Worker { 1060*90c8c64dSAndroid Build Coastguard Worker const slice = trace.sliceFrames(1, 5); 1061*90c8c64dSAndroid Build Coastguard Worker const expected = new Map<AbsoluteFrameIndex, string[]>([ 1062*90c8c64dSAndroid Build Coastguard Worker [1, ['entry-1', 'entry-2']], 1063*90c8c64dSAndroid Build Coastguard Worker [2, []], 1064*90c8c64dSAndroid Build Coastguard Worker [3, []], 1065*90c8c64dSAndroid Build Coastguard Worker [4, ['entry-3']], 1066*90c8c64dSAndroid Build Coastguard Worker ]); 1067*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(slice)).toEqual(expected); 1068*90c8c64dSAndroid Build Coastguard Worker } 1069*90c8c64dSAndroid Build Coastguard Worker }); 1070*90c8c64dSAndroid Build Coastguard Worker 1071*90c8c64dSAndroid Build Coastguard Worker it('updates frames range when slicing', () => { 1072*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(0).getFramesRange()).toEqual({start: 0, end: 7}); 1073*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(1).getFramesRange()).toEqual({start: 1, end: 7}); 1074*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(2).getFramesRange()).toEqual({start: 1, end: 7}); 1075*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(3).getFramesRange()).toEqual({start: 4, end: 7}); 1076*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(4).getFramesRange()).toEqual({start: 6, end: 7}); 1077*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(5).getFramesRange()).toEqual(undefined); 1078*90c8c64dSAndroid Build Coastguard Worker 1079*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(undefined, 5).getFramesRange()).toEqual({ 1080*90c8c64dSAndroid Build Coastguard Worker start: 0, 1081*90c8c64dSAndroid Build Coastguard Worker end: 7, 1082*90c8c64dSAndroid Build Coastguard Worker }); 1083*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(undefined, 4).getFramesRange()).toEqual({ 1084*90c8c64dSAndroid Build Coastguard Worker start: 0, 1085*90c8c64dSAndroid Build Coastguard Worker end: 6, 1086*90c8c64dSAndroid Build Coastguard Worker }); 1087*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(undefined, 3).getFramesRange()).toEqual({ 1088*90c8c64dSAndroid Build Coastguard Worker start: 0, 1089*90c8c64dSAndroid Build Coastguard Worker end: 2, 1090*90c8c64dSAndroid Build Coastguard Worker }); 1091*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(undefined, 2).getFramesRange()).toEqual({ 1092*90c8c64dSAndroid Build Coastguard Worker start: 0, 1093*90c8c64dSAndroid Build Coastguard Worker end: 2, 1094*90c8c64dSAndroid Build Coastguard Worker }); 1095*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(undefined, 1).getFramesRange()).toEqual({ 1096*90c8c64dSAndroid Build Coastguard Worker start: 0, 1097*90c8c64dSAndroid Build Coastguard Worker end: 1, 1098*90c8c64dSAndroid Build Coastguard Worker }); 1099*90c8c64dSAndroid Build Coastguard Worker expect(trace.sliceEntries(undefined, 0).getFramesRange()).toEqual( 1100*90c8c64dSAndroid Build Coastguard Worker undefined, 1101*90c8c64dSAndroid Build Coastguard Worker ); 1102*90c8c64dSAndroid Build Coastguard Worker }); 1103*90c8c64dSAndroid Build Coastguard Worker 1104*90c8c64dSAndroid Build Coastguard Worker it('can handle some trace entries with unavailable frame info', async () => { 1105*90c8c64dSAndroid Build Coastguard Worker // Entry: 0 1 2 3 4 1106*90c8c64dSAndroid Build Coastguard Worker // | | 1107*90c8c64dSAndroid Build Coastguard Worker // Frame: 0 2 1108*90c8c64dSAndroid Build Coastguard Worker // Time: 10 11 12 13 14 1109*90c8c64dSAndroid Build Coastguard Worker const trace = new TraceBuilder<string>() 1110*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0', 'entry-1', 'entry-2', 'entry-3', 'entry-4']) 1111*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([time10, time11, time12, time13, time14]) 1112*90c8c64dSAndroid Build Coastguard Worker .setFrame(1, 0) 1113*90c8c64dSAndroid Build Coastguard Worker .setFrame(3, 2) 1114*90c8c64dSAndroid Build Coastguard Worker .build(); 1115*90c8c64dSAndroid Build Coastguard Worker 1116*90c8c64dSAndroid Build Coastguard Worker // Slice entries 1117*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries())).toEqual([ 1118*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 1119*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1120*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1121*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1122*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1123*90c8c64dSAndroid Build Coastguard Worker ]); 1124*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceEntries())).toEqual( 1125*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 1126*90c8c64dSAndroid Build Coastguard Worker [0, ['entry-1']], 1127*90c8c64dSAndroid Build Coastguard Worker [1, []], 1128*90c8c64dSAndroid Build Coastguard Worker [2, ['entry-3']], 1129*90c8c64dSAndroid Build Coastguard Worker ]), 1130*90c8c64dSAndroid Build Coastguard Worker ); 1131*90c8c64dSAndroid Build Coastguard Worker 1132*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(1))).toEqual([ 1133*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1134*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1135*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1136*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1137*90c8c64dSAndroid Build Coastguard Worker ]); 1138*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceEntries(1))).toEqual( 1139*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 1140*90c8c64dSAndroid Build Coastguard Worker [0, ['entry-1']], 1141*90c8c64dSAndroid Build Coastguard Worker [1, []], 1142*90c8c64dSAndroid Build Coastguard Worker [2, ['entry-3']], 1143*90c8c64dSAndroid Build Coastguard Worker ]), 1144*90c8c64dSAndroid Build Coastguard Worker ); 1145*90c8c64dSAndroid Build Coastguard Worker 1146*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(2))).toEqual([ 1147*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1148*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1149*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1150*90c8c64dSAndroid Build Coastguard Worker ]); 1151*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceEntries(2))).toEqual( 1152*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[2, ['entry-3']]]), 1153*90c8c64dSAndroid Build Coastguard Worker ); 1154*90c8c64dSAndroid Build Coastguard Worker 1155*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(3))).toEqual([ 1156*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1157*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1158*90c8c64dSAndroid Build Coastguard Worker ]); 1159*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceEntries(3))).toEqual( 1160*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[2, ['entry-3']]]), 1161*90c8c64dSAndroid Build Coastguard Worker ); 1162*90c8c64dSAndroid Build Coastguard Worker 1163*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(4))).toEqual([ 1164*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1165*90c8c64dSAndroid Build Coastguard Worker ]); 1166*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceEntries(4))).toEqual( 1167*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1168*90c8c64dSAndroid Build Coastguard Worker ); 1169*90c8c64dSAndroid Build Coastguard Worker 1170*90c8c64dSAndroid Build Coastguard Worker // Slice time 1171*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime())).toEqual([ 1172*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 1173*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1174*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1175*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1176*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1177*90c8c64dSAndroid Build Coastguard Worker ]); 1178*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceTime())).toEqual( 1179*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 1180*90c8c64dSAndroid Build Coastguard Worker [0, ['entry-1']], 1181*90c8c64dSAndroid Build Coastguard Worker [1, []], 1182*90c8c64dSAndroid Build Coastguard Worker [2, ['entry-3']], 1183*90c8c64dSAndroid Build Coastguard Worker ]), 1184*90c8c64dSAndroid Build Coastguard Worker ); 1185*90c8c64dSAndroid Build Coastguard Worker 1186*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime(time11))).toEqual([ 1187*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1188*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1189*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1190*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1191*90c8c64dSAndroid Build Coastguard Worker ]); 1192*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceTime(time11))).toEqual( 1193*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 1194*90c8c64dSAndroid Build Coastguard Worker [0, ['entry-1']], 1195*90c8c64dSAndroid Build Coastguard Worker [1, []], 1196*90c8c64dSAndroid Build Coastguard Worker [2, ['entry-3']], 1197*90c8c64dSAndroid Build Coastguard Worker ]), 1198*90c8c64dSAndroid Build Coastguard Worker ); 1199*90c8c64dSAndroid Build Coastguard Worker 1200*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime(time12))).toEqual([ 1201*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1202*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1203*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1204*90c8c64dSAndroid Build Coastguard Worker ]); 1205*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceTime(time12))).toEqual( 1206*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[2, ['entry-3']]]), 1207*90c8c64dSAndroid Build Coastguard Worker ); 1208*90c8c64dSAndroid Build Coastguard Worker 1209*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime(time13))).toEqual([ 1210*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1211*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1212*90c8c64dSAndroid Build Coastguard Worker ]); 1213*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceTime(time13))).toEqual( 1214*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([[2, ['entry-3']]]), 1215*90c8c64dSAndroid Build Coastguard Worker ); 1216*90c8c64dSAndroid Build Coastguard Worker 1217*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime(time14))).toEqual([ 1218*90c8c64dSAndroid Build Coastguard Worker 'entry-4', 1219*90c8c64dSAndroid Build Coastguard Worker ]); 1220*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceTime(time14))).toEqual( 1221*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1222*90c8c64dSAndroid Build Coastguard Worker ); 1223*90c8c64dSAndroid Build Coastguard Worker 1224*90c8c64dSAndroid Build Coastguard Worker // Slice frames 1225*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceFrames())).toEqual([ 1226*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1227*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1228*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1229*90c8c64dSAndroid Build Coastguard Worker ]); 1230*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceFrames())).toEqual( 1231*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 1232*90c8c64dSAndroid Build Coastguard Worker [0, ['entry-1']], 1233*90c8c64dSAndroid Build Coastguard Worker [1, []], 1234*90c8c64dSAndroid Build Coastguard Worker [2, ['entry-3']], 1235*90c8c64dSAndroid Build Coastguard Worker ]), 1236*90c8c64dSAndroid Build Coastguard Worker ); 1237*90c8c64dSAndroid Build Coastguard Worker 1238*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceFrames(1))).toEqual([ 1239*90c8c64dSAndroid Build Coastguard Worker 'entry-3', 1240*90c8c64dSAndroid Build Coastguard Worker ]); 1241*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceFrames(1))).toEqual( 1242*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 1243*90c8c64dSAndroid Build Coastguard Worker [1, []], 1244*90c8c64dSAndroid Build Coastguard Worker [2, ['entry-3']], 1245*90c8c64dSAndroid Build Coastguard Worker ]), 1246*90c8c64dSAndroid Build Coastguard Worker ); 1247*90c8c64dSAndroid Build Coastguard Worker 1248*90c8c64dSAndroid Build Coastguard Worker expect( 1249*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(trace.sliceFrames(undefined, 2)), 1250*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1']); 1251*90c8c64dSAndroid Build Coastguard Worker expect( 1252*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractFrames(trace.sliceFrames(undefined, 2)), 1253*90c8c64dSAndroid Build Coastguard Worker ).toEqual( 1254*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>([ 1255*90c8c64dSAndroid Build Coastguard Worker [0, ['entry-1']], 1256*90c8c64dSAndroid Build Coastguard Worker [1, []], 1257*90c8c64dSAndroid Build Coastguard Worker ]), 1258*90c8c64dSAndroid Build Coastguard Worker ); 1259*90c8c64dSAndroid Build Coastguard Worker }); 1260*90c8c64dSAndroid Build Coastguard Worker 1261*90c8c64dSAndroid Build Coastguard Worker it('can handle unavailable frame info', async () => { 1262*90c8c64dSAndroid Build Coastguard Worker const trace = new TraceBuilder<string>() 1263*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([time10, time11, time12]) 1264*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0', 'entry-1', 'entry-2']) 1265*90c8c64dSAndroid Build Coastguard Worker .setFrameMap(undefined) 1266*90c8c64dSAndroid Build Coastguard Worker .build(); 1267*90c8c64dSAndroid Build Coastguard Worker 1268*90c8c64dSAndroid Build Coastguard Worker expect(await trace.getEntry(0).getValue()).toEqual('entry-0'); 1269*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace)).toEqual([ 1270*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 1271*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1272*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1273*90c8c64dSAndroid Build Coastguard Worker ]); 1274*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(1, 2))).toEqual([ 1275*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1276*90c8c64dSAndroid Build Coastguard Worker ]); 1277*90c8c64dSAndroid Build Coastguard Worker expect( 1278*90c8c64dSAndroid Build Coastguard Worker await TraceUtils.extractEntries(trace.sliceTime(time11, time12)), 1279*90c8c64dSAndroid Build Coastguard Worker ).toEqual(['entry-1']); 1280*90c8c64dSAndroid Build Coastguard Worker 1281*90c8c64dSAndroid Build Coastguard Worker expect(() => { 1282*90c8c64dSAndroid Build Coastguard Worker trace.getFrame(0); 1283*90c8c64dSAndroid Build Coastguard Worker }).toThrow(); 1284*90c8c64dSAndroid Build Coastguard Worker expect(() => { 1285*90c8c64dSAndroid Build Coastguard Worker trace.sliceFrames(0, 1000); 1286*90c8c64dSAndroid Build Coastguard Worker }).toThrow(); 1287*90c8c64dSAndroid Build Coastguard Worker }); 1288*90c8c64dSAndroid Build Coastguard Worker 1289*90c8c64dSAndroid Build Coastguard Worker it('can handle empty frame info', async () => { 1290*90c8c64dSAndroid Build Coastguard Worker // empty trace 1291*90c8c64dSAndroid Build Coastguard Worker { 1292*90c8c64dSAndroid Build Coastguard Worker const trace = new TraceBuilder<string>() 1293*90c8c64dSAndroid Build Coastguard Worker .setEntries([]) 1294*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([]) 1295*90c8c64dSAndroid Build Coastguard Worker .setFrameMap(new FrameMapBuilder(0, 0).build()) 1296*90c8c64dSAndroid Build Coastguard Worker .build(); 1297*90c8c64dSAndroid Build Coastguard Worker 1298*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace)).toEqual([]); 1299*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace)).toEqual( 1300*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1301*90c8c64dSAndroid Build Coastguard Worker ); 1302*90c8c64dSAndroid Build Coastguard Worker 1303*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(1))).toEqual( 1304*90c8c64dSAndroid Build Coastguard Worker [], 1305*90c8c64dSAndroid Build Coastguard Worker ); 1306*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceEntries(1))).toEqual( 1307*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1308*90c8c64dSAndroid Build Coastguard Worker ); 1309*90c8c64dSAndroid Build Coastguard Worker 1310*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime(time11))).toEqual( 1311*90c8c64dSAndroid Build Coastguard Worker [], 1312*90c8c64dSAndroid Build Coastguard Worker ); 1313*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceTime(time11))).toEqual( 1314*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1315*90c8c64dSAndroid Build Coastguard Worker ); 1316*90c8c64dSAndroid Build Coastguard Worker 1317*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceFrames())).toEqual([]); 1318*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceFrames())).toEqual( 1319*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1320*90c8c64dSAndroid Build Coastguard Worker ); 1321*90c8c64dSAndroid Build Coastguard Worker } 1322*90c8c64dSAndroid Build Coastguard Worker // non-empty trace 1323*90c8c64dSAndroid Build Coastguard Worker { 1324*90c8c64dSAndroid Build Coastguard Worker const trace = new TraceBuilder<string>() 1325*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0', 'entry-1', 'entry-2']) 1326*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([time10, time11, time12]) 1327*90c8c64dSAndroid Build Coastguard Worker .setFrameMap(new FrameMapBuilder(3, 0).build()) 1328*90c8c64dSAndroid Build Coastguard Worker .build(); 1329*90c8c64dSAndroid Build Coastguard Worker 1330*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace)).toEqual([ 1331*90c8c64dSAndroid Build Coastguard Worker 'entry-0', 1332*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1333*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1334*90c8c64dSAndroid Build Coastguard Worker ]); 1335*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace)).toEqual( 1336*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1337*90c8c64dSAndroid Build Coastguard Worker ); 1338*90c8c64dSAndroid Build Coastguard Worker 1339*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceEntries(1))).toEqual([ 1340*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1341*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1342*90c8c64dSAndroid Build Coastguard Worker ]); 1343*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceEntries(1))).toEqual( 1344*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1345*90c8c64dSAndroid Build Coastguard Worker ); 1346*90c8c64dSAndroid Build Coastguard Worker 1347*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceTime(time11))).toEqual([ 1348*90c8c64dSAndroid Build Coastguard Worker 'entry-1', 1349*90c8c64dSAndroid Build Coastguard Worker 'entry-2', 1350*90c8c64dSAndroid Build Coastguard Worker ]); 1351*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceTime(time11))).toEqual( 1352*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1353*90c8c64dSAndroid Build Coastguard Worker ); 1354*90c8c64dSAndroid Build Coastguard Worker 1355*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractEntries(trace.sliceFrames())).toEqual([]); 1356*90c8c64dSAndroid Build Coastguard Worker expect(await TraceUtils.extractFrames(trace.sliceFrames())).toEqual( 1357*90c8c64dSAndroid Build Coastguard Worker new Map<AbsoluteFrameIndex, string[]>(), 1358*90c8c64dSAndroid Build Coastguard Worker ); 1359*90c8c64dSAndroid Build Coastguard Worker } 1360*90c8c64dSAndroid Build Coastguard Worker }); 1361*90c8c64dSAndroid Build Coastguard Worker 1362*90c8c64dSAndroid Build Coastguard Worker it('isDump()', () => { 1363*90c8c64dSAndroid Build Coastguard Worker const trace = new TraceBuilder<string>() 1364*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0']) 1365*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([time10]) 1366*90c8c64dSAndroid Build Coastguard Worker .build(); 1367*90c8c64dSAndroid Build Coastguard Worker expect(trace.isDump()).toBeTrue(); 1368*90c8c64dSAndroid Build Coastguard Worker expect(trace.isDumpWithoutTimestamp()).toBeFalse(); 1369*90c8c64dSAndroid Build Coastguard Worker }); 1370*90c8c64dSAndroid Build Coastguard Worker 1371*90c8c64dSAndroid Build Coastguard Worker it('isDumpWithoutTimestamp()', () => { 1372*90c8c64dSAndroid Build Coastguard Worker const trace = new TraceBuilder<string>() 1373*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0']) 1374*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([TimestampConverterUtils.makeZeroTimestamp()]) 1375*90c8c64dSAndroid Build Coastguard Worker .build(); 1376*90c8c64dSAndroid Build Coastguard Worker expect(trace.isDumpWithoutTimestamp()).toBeTrue(); 1377*90c8c64dSAndroid Build Coastguard Worker }); 1378*90c8c64dSAndroid Build Coastguard Worker 1379*90c8c64dSAndroid Build Coastguard Worker it('updates corruptedState on failure to parse entry', async () => { 1380*90c8c64dSAndroid Build Coastguard Worker const trace = new TraceBuilder<string>() 1381*90c8c64dSAndroid Build Coastguard Worker .setParser( 1382*90c8c64dSAndroid Build Coastguard Worker new ParserBuilder<string>() 1383*90c8c64dSAndroid Build Coastguard Worker .setIsCorrupted(true) 1384*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0']) 1385*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([TimestampConverterUtils.makeZeroTimestamp()]) 1386*90c8c64dSAndroid Build Coastguard Worker .build(), 1387*90c8c64dSAndroid Build Coastguard Worker ) 1388*90c8c64dSAndroid Build Coastguard Worker .build(); 1389*90c8c64dSAndroid Build Coastguard Worker expect(trace.isCorrupted()).toBeFalse(); 1390*90c8c64dSAndroid Build Coastguard Worker expect(trace.getCorruptedReason()).toBeUndefined(); 1391*90c8c64dSAndroid Build Coastguard Worker 1392*90c8c64dSAndroid Build Coastguard Worker expectAsync(trace.getEntry(0).getValue()).toBeRejected(); 1393*90c8c64dSAndroid Build Coastguard Worker try { 1394*90c8c64dSAndroid Build Coastguard Worker await trace.getEntry(0).getValue(); 1395*90c8c64dSAndroid Build Coastguard Worker } catch (e) { 1396*90c8c64dSAndroid Build Coastguard Worker expect(trace.isCorrupted()).toBeTrue(); 1397*90c8c64dSAndroid Build Coastguard Worker expect(trace.getCorruptedReason()).toEqual( 1398*90c8c64dSAndroid Build Coastguard Worker 'Cannot parse entry at index 0', 1399*90c8c64dSAndroid Build Coastguard Worker ); 1400*90c8c64dSAndroid Build Coastguard Worker } 1401*90c8c64dSAndroid Build Coastguard Worker }); 1402*90c8c64dSAndroid Build Coastguard Worker 1403*90c8c64dSAndroid Build Coastguard Worker it('spansMultipleDates()', () => { 1404*90c8c64dSAndroid Build Coastguard Worker const emptyTrace = UnitTestUtils.makeEmptyTrace( 1405*90c8c64dSAndroid Build Coastguard Worker TraceType.TEST_TRACE_STRING, 1406*90c8c64dSAndroid Build Coastguard Worker ); 1407*90c8c64dSAndroid Build Coastguard Worker expect(emptyTrace.spansMultipleDates()).toBeFalse(); 1408*90c8c64dSAndroid Build Coastguard Worker 1409*90c8c64dSAndroid Build Coastguard Worker const traceWithElapsedTimestamps = new TraceBuilder<string>() 1410*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0', 'entry-1']) 1411*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([ 1412*90c8c64dSAndroid Build Coastguard Worker TimestampConverterUtils.makeElapsedTimestamp(0n), 1413*90c8c64dSAndroid Build Coastguard Worker TimestampConverterUtils.makeElapsedTimestamp( 1414*90c8c64dSAndroid Build Coastguard Worker BigInt(TIME_UNIT_TO_NANO.d), 1415*90c8c64dSAndroid Build Coastguard Worker ), 1416*90c8c64dSAndroid Build Coastguard Worker ]) 1417*90c8c64dSAndroid Build Coastguard Worker .build(); 1418*90c8c64dSAndroid Build Coastguard Worker expect(traceWithElapsedTimestamps.spansMultipleDates()).toBeFalse(); 1419*90c8c64dSAndroid Build Coastguard Worker 1420*90c8c64dSAndroid Build Coastguard Worker const traceWithRealTimestampsOneDate = new TraceBuilder<string>() 1421*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0', 'entry-1']) 1422*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([time10, time15]) 1423*90c8c64dSAndroid Build Coastguard Worker .build(); 1424*90c8c64dSAndroid Build Coastguard Worker expect(traceWithRealTimestampsOneDate.spansMultipleDates()).toBeFalse(); 1425*90c8c64dSAndroid Build Coastguard Worker 1426*90c8c64dSAndroid Build Coastguard Worker const traceWitMultipleDates = new TraceBuilder<string>() 1427*90c8c64dSAndroid Build Coastguard Worker .setEntries(['entry-0', 'entry-1']) 1428*90c8c64dSAndroid Build Coastguard Worker .setTimestamps([ 1429*90c8c64dSAndroid Build Coastguard Worker TimestampConverterUtils.makeRealTimestamp( 1430*90c8c64dSAndroid Build Coastguard Worker BigInt(TIME_UNIT_TO_NANO.h * 23), 1431*90c8c64dSAndroid Build Coastguard Worker ), 1432*90c8c64dSAndroid Build Coastguard Worker TimestampConverterUtils.makeRealTimestamp( 1433*90c8c64dSAndroid Build Coastguard Worker BigInt(TIME_UNIT_TO_NANO.h * 25), 1434*90c8c64dSAndroid Build Coastguard Worker ), 1435*90c8c64dSAndroid Build Coastguard Worker ]) 1436*90c8c64dSAndroid Build Coastguard Worker .build(); 1437*90c8c64dSAndroid Build Coastguard Worker expect(traceWitMultipleDates.spansMultipleDates()).toBeTrue(); 1438*90c8c64dSAndroid Build Coastguard Worker }); 1439*90c8c64dSAndroid Build Coastguard Worker}); 1440