flamegraphRendererDOM.spec.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {vec2} from 'gl-matrix';
  2. import {makeCanvasMock, makeFlamegraph} from 'sentry-test/profiling/utils';
  3. import {screen} from 'sentry-test/reactTestingLibrary';
  4. import {LightFlamegraphTheme as theme} from 'sentry/utils/profiling/flamegraph/flamegraphTheme';
  5. import {FlamegraphRendererDOM} from 'sentry/utils/profiling/renderers/flamegraphRendererDOM';
  6. import {CanvasView} from '../canvasView';
  7. import {Flamegraph} from '../flamegraph';
  8. import {FlamegraphCanvas} from '../flamegraphCanvas';
  9. const originalDpr = window.devicePixelRatio;
  10. describe('FlamegraphDomRenderer', () => {
  11. beforeEach(() => {
  12. // We simulate regular screens unless differently specified
  13. window.devicePixelRatio = 1;
  14. });
  15. afterEach(() => {
  16. window.devicePixelRatio = originalDpr;
  17. });
  18. it('renders a node', async () => {
  19. const flamegraph = makeFlamegraph(
  20. {
  21. endValue: 2,
  22. events: [
  23. {type: 'O', at: 0, frame: 0},
  24. {type: 'C', at: 2, frame: 0},
  25. ],
  26. },
  27. [{name: 'function 0'}]
  28. );
  29. const canvas = makeCanvasMock() as HTMLCanvasElement;
  30. // @ts-expect-error parentElement is a mock so readonly does not apply
  31. canvas.parentElement = document.createElement('div');
  32. document.body.appendChild(canvas.parentElement);
  33. const renderer = new FlamegraphRendererDOM(canvas, flamegraph, theme);
  34. const flamegraphCanvas = new FlamegraphCanvas(canvas, vec2.fromValues(0, 0));
  35. const flamegraphView = new CanvasView<Flamegraph>({
  36. canvas: flamegraphCanvas,
  37. model: flamegraph,
  38. options: {
  39. inverted: flamegraph.inverted,
  40. minWidth: flamegraph.profile.minFrameDuration,
  41. barHeight: theme.SIZES.BAR_HEIGHT,
  42. depthOffset: theme.SIZES.FLAMEGRAPH_DEPTH_OFFSET,
  43. },
  44. });
  45. renderer.draw(flamegraphView.fromConfigView(flamegraphCanvas.physicalSpace));
  46. expect(await screen.findByText(/function 0/)).toBeInTheDocument();
  47. });
  48. });