utils.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import type {DeviceContext} from 'sentry/types';
  2. import {DeviceContextKey} from 'sentry/types';
  3. import {defined, formatBytesBase2} from 'sentry/utils';
  4. export function formatMemory(
  5. memory_size: number,
  6. free_memory: number,
  7. usable_memory: number
  8. ) {
  9. if (
  10. !Number.isInteger(memory_size) ||
  11. memory_size <= 0 ||
  12. !Number.isInteger(free_memory) ||
  13. free_memory <= 0
  14. ) {
  15. return null;
  16. }
  17. let memory = `Total: ${formatBytesBase2(memory_size)} / Free: ${formatBytesBase2(
  18. free_memory
  19. )}`;
  20. if (Number.isInteger(usable_memory) && usable_memory > 0) {
  21. memory = `${memory} / Usable: ${formatBytesBase2(usable_memory)}`;
  22. }
  23. return memory;
  24. }
  25. export function formatStorage(
  26. storage_size: number,
  27. free_storage: number,
  28. external_storage_size: number,
  29. external_free_storage: number
  30. ) {
  31. if (!Number.isInteger(storage_size) || storage_size <= 0) {
  32. return null;
  33. }
  34. let storage = `Total: ${formatBytesBase2(storage_size)}`;
  35. if (Number.isInteger(free_storage) && free_storage > 0) {
  36. storage = `${storage} / Free: ${formatBytesBase2(free_storage)}`;
  37. }
  38. if (
  39. Number.isInteger(external_storage_size) &&
  40. external_storage_size > 0 &&
  41. Number.isInteger(external_free_storage) &&
  42. external_free_storage > 0
  43. ) {
  44. storage = `${storage} (External Total: ${formatBytesBase2(
  45. external_storage_size
  46. )} / Free: ${formatBytesBase2(external_free_storage)})`;
  47. }
  48. return storage;
  49. }
  50. // List of common display resolutions taken from the source: https://en.wikipedia.org/wiki/Display_resolution#Common_display_resolutions
  51. export const commonDisplayResolutions = {
  52. '640x360': 'nHD',
  53. '800x600': 'SVGA',
  54. '1024x768': 'XGA',
  55. '1280x720': 'WXGA',
  56. '1280x800': 'WXGA',
  57. '1280x1024': 'SXGA',
  58. '1360x768': 'HD',
  59. '1366x768': 'HD',
  60. '1440x900': 'WXGA+',
  61. '1536x864': 'NA',
  62. '1600x900': 'HD+',
  63. '1680x1050': 'WSXGA+',
  64. '1920x1080': 'FHD',
  65. '1920x1200': 'WUXGA',
  66. '2048x1152': 'QWXGA',
  67. '2560x1080': 'N/A',
  68. '2560x1440': 'QHD',
  69. '3440x1440': 'N/A',
  70. '3840x2160': '4K UHD',
  71. };
  72. export function getInferredData(data: DeviceContext) {
  73. const screenResolution = data[DeviceContextKey.SCREEN_RESOLUTION];
  74. const screenWidth = data[DeviceContextKey.SCREEN_WIDTH_PIXELS];
  75. const screenHeight = data[DeviceContextKey.SCREEN_HEIGHT_PIXELS];
  76. if (screenResolution) {
  77. const displayResolutionDescription = commonDisplayResolutions[screenResolution];
  78. const commonData = {
  79. ...data,
  80. [DeviceContextKey.SCREEN_RESOLUTION]: displayResolutionDescription
  81. ? `${screenResolution} (${displayResolutionDescription})`
  82. : screenResolution,
  83. };
  84. if (!defined(screenWidth) && !defined(screenHeight)) {
  85. const [width, height] = screenResolution.split('x');
  86. if (width && height) {
  87. return {
  88. ...commonData,
  89. [DeviceContextKey.SCREEN_WIDTH_PIXELS]: Number(width),
  90. [DeviceContextKey.SCREEN_HEIGHT_PIXELS]: Number(height),
  91. };
  92. }
  93. }
  94. return commonData;
  95. }
  96. if (defined(screenWidth) && defined(screenHeight)) {
  97. const displayResolution = `${screenWidth}x${screenHeight}`;
  98. const displayResolutionDescription = commonDisplayResolutions[displayResolution];
  99. return {
  100. ...data,
  101. [DeviceContextKey.SCREEN_RESOLUTION]: displayResolutionDescription
  102. ? `${displayResolution} (${displayResolutionDescription})`
  103. : displayResolution,
  104. };
  105. }
  106. return data;
  107. }