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  }