github.com/pyroscope-io/pyroscope@v0.37.3-0.20230725203016-5f6947968bd0/packages/pyroscope-models/src/flamebearer.ts (about) 1 import { SpyName } from './spyName'; 2 import { Units } from './units'; 3 /** 4 * @deprecated one should use the Profile model 5 */ 6 export type Flamebearer = { 7 /** 8 * List of names 9 */ 10 names: string[]; 11 /** 12 * List of level 13 * 14 * This is NOT the same as in the flamebearer 15 * that we receive from the server. 16 * As in there are some transformations required 17 * (see deltaDiffWrapper) 18 */ 19 levels: number[][]; 20 numTicks: number; 21 maxSelf: number; 22 23 /** 24 * Sample Rate, used in text information 25 */ 26 sampleRate: number; 27 units: Units; 28 29 spyName: SpyName; 30 // format: 'double' | 'single'; 31 // leftTicks?: number; 32 // rightTicks?: number; 33 } & addTicks; 34 35 export type addTicks = 36 | { format: 'double'; leftTicks: number; rightTicks: number } 37 | { format: 'single' }; 38 39 export const singleFF = { 40 format: 'single' as const, 41 jStep: 4, 42 jName: 3, 43 getBarOffset: (level: number[], j: number) => level[j], 44 getBarTotal: (level: number[], j: number) => level[j + 1], 45 getBarTotalDiff: (level: number[], j: number) => 0, 46 getBarSelf: (level: number[], j: number) => level[j + 2], 47 getBarSelfDiff: (level: number[], j: number) => 0, 48 getBarName: (level: number[], j: number) => level[j + 3], 49 }; 50 51 export const doubleFF = { 52 format: 'double' as const, 53 jStep: 7, 54 jName: 6, 55 getBarOffset: (level: number[], j: number) => level[j] + level[j + 3], 56 getBarTotal: (level: number[], j: number) => level[j + 4] + level[j + 1], 57 getBarTotalLeft: (level: number[], j: number) => level[j + 1], 58 getBarTotalRght: (level: number[], j: number) => level[j + 4], 59 getBarTotalDiff: (level: number[], j: number) => { 60 return level[j + 4] - level[j + 1]; 61 }, 62 getBarSelf: (level: number[], j: number) => level[j + 5] + level[j + 2], 63 getBarSelfLeft: (level: number[], j: number) => level[j + 2], 64 getBarSelfRght: (level: number[], j: number) => level[j + 5], 65 getBarSelfDiff: (level: number[], j: number) => level[j + 5] - level[j + 2], 66 getBarName: (level: number[], j: number) => level[j + 6], 67 }; 68 69 // createFF returns an accesser for flamebearer 70 // TODO: rename it? 71 export function createFF( 72 viewType: 'single' | 'double' 73 ): typeof singleFF | typeof doubleFF { 74 switch (viewType) { 75 case 'single': { 76 return singleFF; 77 } 78 case 'double': { 79 return doubleFF; 80 } 81 82 default: { 83 throw new Error(`Unsupported type: '${viewType}'`); 84 } 85 } 86 }