index.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import {Fragment} from 'react';
  2. import ContextBlock from 'sentry/components/events/contexts/contextBlock';
  3. import type {Event} from 'sentry/types/event';
  4. import {
  5. getContextMeta,
  6. getKnownData,
  7. getKnownStructuredData,
  8. getUnknownData,
  9. } from '../utils';
  10. import {getGPUKnownDataDetails} from './getGPUKnownDataDetails';
  11. import type {GPUData} from './types';
  12. import {GPUKnownDataType} from './types';
  13. type Props = {
  14. data: GPUData;
  15. event: Event;
  16. meta?: Record<string, any>;
  17. };
  18. export const gpuKnownDataValues = [
  19. GPUKnownDataType.NAME,
  20. GPUKnownDataType.VERSION,
  21. GPUKnownDataType.VENDOR_NAME,
  22. GPUKnownDataType.MEMORY_SIZE,
  23. GPUKnownDataType.NPOT_SUPPORT,
  24. GPUKnownDataType.MULTI_THREAD_RENDERING,
  25. GPUKnownDataType.API_TYPE,
  26. ];
  27. const gpuIgnoredDataValues = [];
  28. function getGpuValues({data}: Pick<Props, 'data'>) {
  29. const gpuValues = [...gpuKnownDataValues];
  30. if (data.vendor_id > 0) {
  31. gpuValues.unshift(GPUKnownDataType.VENDOR_ID);
  32. }
  33. if (data.id > 0) {
  34. gpuValues.unshift(GPUKnownDataType.ID);
  35. }
  36. return gpuValues;
  37. }
  38. export function getKnownGpuContextData({data, meta}: Pick<Props, 'data' | 'meta'>) {
  39. const gpuValues = getGpuValues({data});
  40. return getKnownData<GPUData, GPUKnownDataType>({
  41. data,
  42. meta,
  43. knownDataTypes: gpuValues,
  44. onGetKnownDataDetails: v => getGPUKnownDataDetails(v),
  45. });
  46. }
  47. export function getUnknownGpuContextData({data, meta}: Pick<Props, 'data' | 'meta'>) {
  48. const gpuValues = getGpuValues({data});
  49. return getUnknownData({
  50. allData: data,
  51. knownKeys: [...gpuValues, ...gpuIgnoredDataValues],
  52. meta,
  53. });
  54. }
  55. export function GPUEventContext({data, event, meta: propsMeta}: Props) {
  56. const meta = propsMeta ?? getContextMeta(event, 'gpu');
  57. const knownData = getKnownGpuContextData({data, meta});
  58. const knownStructuredData = getKnownStructuredData(knownData, meta);
  59. const unknownData = getUnknownGpuContextData({data, meta});
  60. return (
  61. <Fragment>
  62. <ContextBlock data={knownStructuredData} />
  63. <ContextBlock data={unknownData} />
  64. </Fragment>
  65. );
  66. }