@grafana/scenes 6.40.0--canary.1265.18325783397.0 → 6.40.0--canary.1272.18407272616.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/esm/behaviors/LongFrameDetector.js +11 -11
  3. package/dist/esm/behaviors/LongFrameDetector.js.map +1 -1
  4. package/dist/esm/behaviors/SceneRenderProfiler.js +132 -88
  5. package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -1
  6. package/dist/esm/behaviors/index.js +0 -3
  7. package/dist/esm/behaviors/index.js.map +1 -1
  8. package/dist/esm/components/SceneRefreshPicker.js +1 -1
  9. package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
  10. package/dist/esm/components/VizPanel/VizPanel.js +1 -36
  11. package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
  12. package/dist/esm/components/VizPanel/VizPanelRenderer.js +2 -20
  13. package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
  14. package/dist/esm/core/SceneTimeRange.js +1 -1
  15. package/dist/esm/core/SceneTimeRange.js.map +1 -1
  16. package/dist/esm/index.js +5 -4
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/querying/SceneDataTransformer.js +0 -64
  19. package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
  20. package/dist/esm/querying/SceneQueryRunner.js +6 -11
  21. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  22. package/dist/esm/querying/layers/SceneDataLayerControls.js +13 -1
  23. package/dist/esm/querying/layers/SceneDataLayerControls.js.map +1 -1
  24. package/dist/esm/querying/registerQueryWithController.js +2 -39
  25. package/dist/esm/querying/registerQueryWithController.js.map +1 -1
  26. package/dist/esm/utils/writeSceneLog.js +10 -1
  27. package/dist/esm/utils/writeSceneLog.js.map +1 -1
  28. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +10 -10
  29. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
  30. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +6 -6
  31. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js.map +1 -1
  32. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +57 -55
  33. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
  34. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +5 -5
  35. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
  36. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js +4 -4
  37. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js.map +1 -1
  38. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +5 -3
  39. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  40. package/dist/esm/variables/adhoc/controller/VariableBackedAdHocFiltersController.js +65 -0
  41. package/dist/esm/variables/adhoc/controller/VariableBackedAdHocFiltersController.js.map +1 -0
  42. package/dist/esm/variables/components/VariableValueSelect.js +1 -1
  43. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  44. package/dist/esm/variables/groupby/GroupByVariable.js +1 -1
  45. package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
  46. package/dist/esm/variables/variants/CustomVariable.js +9 -4
  47. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  48. package/dist/esm/variables/variants/MultiValueVariable.js +1 -1
  49. package/dist/esm/variables/variants/MultiValueVariable.js.map +1 -1
  50. package/dist/esm/variables/variants/ScopesVariable.js +1 -1
  51. package/dist/esm/variables/variants/ScopesVariable.js.map +1 -1
  52. package/dist/esm/variables/variants/SwitchVariable.js +108 -0
  53. package/dist/esm/variables/variants/SwitchVariable.js.map +1 -0
  54. package/dist/esm/variables/variants/guards.js +4 -1
  55. package/dist/esm/variables/variants/guards.js.map +1 -1
  56. package/dist/index.d.ts +227 -367
  57. package/dist/index.js +5252 -5682
  58. package/dist/index.js.map +1 -1
  59. package/package.json +2 -2
  60. package/dist/esm/behaviors/PanelProfilingManager.js +0 -65
  61. package/dist/esm/behaviors/PanelProfilingManager.js.map +0 -1
  62. package/dist/esm/behaviors/ScenePerformanceTracker.js +0 -78
  63. package/dist/esm/behaviors/ScenePerformanceTracker.js.map +0 -1
  64. package/dist/esm/behaviors/VizPanelRenderProfiler.js +0 -328
  65. package/dist/esm/behaviors/VizPanelRenderProfiler.js.map +0 -1
  66. package/dist/esm/behaviors/interactionConstants.js +0 -14
  67. package/dist/esm/behaviors/interactionConstants.js.map +0 -1
  68. package/dist/esm/utils/findPanelProfiler.js +0 -18
  69. package/dist/esm/utils/findPanelProfiler.js.map +0 -1
  70. package/dist/esm/utils/writePerformanceLog.js +0 -12
  71. package/dist/esm/utils/writePerformanceLog.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,39 @@
1
+ # v6.39.4 (Fri Oct 10 2025)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - CustomVariable: Expose query parsing mechanism [#1269](https://github.com/grafana/scenes/pull/1269) ([@bfmatei](https://github.com/bfmatei))
6
+
7
+ #### Authors: 1
8
+
9
+ - Bogdan Matei ([@bfmatei](https://github.com/bfmatei))
10
+
11
+ ---
12
+
13
+ # v6.39.3 (Thu Oct 09 2025)
14
+
15
+ #### 🐛 Bug Fix
16
+
17
+ - Variables: Introduce a new type called "switch" [#1258](https://github.com/grafana/scenes/pull/1258) ([@leventebalogh](https://github.com/leventebalogh))
18
+
19
+ #### Authors: 1
20
+
21
+ - Levente Balogh ([@leventebalogh](https://github.com/leventebalogh))
22
+
23
+ ---
24
+
25
+ # v6.39.2 (Wed Oct 08 2025)
26
+
27
+ #### 🐛 Bug Fix
28
+
29
+ - Chore: Fix annotations switch to work with new border radius [#1264](https://github.com/grafana/scenes/pull/1264) ([@ashharrison90](https://github.com/ashharrison90))
30
+
31
+ #### Authors: 1
32
+
33
+ - Ashley Harrison ([@ashharrison90](https://github.com/ashharrison90))
34
+
35
+ ---
36
+
1
37
  # v6.39.1 (Thu Sep 25 2025)
2
38
 
3
39
  #### 🐛 Bug Fix
@@ -1,4 +1,4 @@
1
- import { writePerformanceLog } from '../utils/writePerformanceLog.js';
1
+ import { writeSceneLog } from '../utils/writeSceneLog.js';
2
2
 
3
3
  var __typeError = (msg) => {
4
4
  throw TypeError(msg);
@@ -49,8 +49,8 @@ class LongFrameDetector {
49
49
  performance.mark(measureName);
50
50
  }
51
51
  }
52
- writePerformanceLog(
53
- "LFD",
52
+ writeSceneLog(
53
+ "LongFrameDetector",
54
54
  `Long frame detected (manual): ${frameLength}ms (threshold: ${LONG_FRAME_THRESHOLD}ms)`
55
55
  );
56
56
  }
@@ -71,7 +71,7 @@ class LongFrameDetector {
71
71
  */
72
72
  start(callback) {
73
73
  if (__privateGet(this, _isTracking)) {
74
- writePerformanceLog("LFD", "Already tracking frames, stopping previous session");
74
+ writeSceneLog("LongFrameDetector", "Already tracking frames, stopping previous session");
75
75
  this.stop();
76
76
  }
77
77
  __privateSet(this, _callback, callback);
@@ -81,8 +81,8 @@ class LongFrameDetector {
81
81
  } else {
82
82
  this.startManualFrameTracking();
83
83
  }
84
- writePerformanceLog(
85
- "LFD",
84
+ writeSceneLog(
85
+ "LongFrameDetector",
86
86
  `Started tracking with ${this.isLoAFAvailable() ? "LoAF API" : "manual"} method, threshold: ${LONG_FRAME_THRESHOLD}ms`
87
87
  );
88
88
  }
@@ -110,7 +110,7 @@ class LongFrameDetector {
110
110
  */
111
111
  startLoAFTracking() {
112
112
  if (!this.isLoAFAvailable()) {
113
- writePerformanceLog("LFD", "LoAF API not available, falling back to manual tracking");
113
+ writeSceneLog("LongFrameDetector", "LoAF API not available, falling back to manual tracking");
114
114
  this.startManualFrameTracking();
115
115
  return;
116
116
  }
@@ -138,12 +138,12 @@ class LongFrameDetector {
138
138
  performance.mark(measureName);
139
139
  }
140
140
  }
141
- writePerformanceLog("LFD", `Long frame detected (LoAF): ${entry.duration}ms at ${entry.startTime}ms`);
141
+ writeSceneLog("LongFrameDetector", `Long frame detected (LoAF): ${entry.duration}ms at ${entry.startTime}ms`);
142
142
  }
143
143
  }));
144
144
  __privateGet(this, _loafObserver).observe({ type: "long-animation-frame", buffered: false });
145
145
  } catch (error) {
146
- writePerformanceLog("LFD", "Failed to start LoAF tracking, falling back to manual:", error);
146
+ writeSceneLog("LongFrameDetector", "Failed to start LoAF tracking, falling back to manual:", error);
147
147
  this.startManualFrameTracking();
148
148
  }
149
149
  }
@@ -154,7 +154,7 @@ class LongFrameDetector {
154
154
  if (__privateGet(this, _loafObserver)) {
155
155
  __privateGet(this, _loafObserver).disconnect();
156
156
  __privateSet(this, _loafObserver, null);
157
- writePerformanceLog("LFD", "Stopped LoAF tracking");
157
+ writeSceneLog("LongFrameDetector", "Stopped LoAF tracking");
158
158
  }
159
159
  }
160
160
  /**
@@ -171,7 +171,7 @@ class LongFrameDetector {
171
171
  if (__privateGet(this, _frameTrackingId)) {
172
172
  cancelAnimationFrame(__privateGet(this, _frameTrackingId));
173
173
  __privateSet(this, _frameTrackingId, null);
174
- writePerformanceLog("LFD", "Stopped manual frame tracking");
174
+ writeSceneLog("LongFrameDetector", "Stopped manual frame tracking");
175
175
  }
176
176
  }
177
177
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LongFrameDetector.js","sources":["../../../src/behaviors/LongFrameDetector.ts"],"sourcesContent":["import { writePerformanceLog } from '../utils/writePerformanceLog';\n\nconst LONG_FRAME_THRESHOLD = 50; // Threshold for both LoAF and manual tracking (ms)\n\nexport interface LongFrameEvent {\n duration: number; // Frame duration in milliseconds\n timestamp: number; // When the frame occurred\n method: 'manual' | 'loaf'; // Which detection method was used\n}\n\nexport type LongFrameCallback = (event: LongFrameEvent) => void;\n\n/**\n * LongFrameDetector is a module for detecting long animation frames.\n *\n * It supports two detection methods with automatic fallback:\n * 1. LoAF API (default when available): Uses Long Animation Frame API with 50ms threshold\n * 2. Manual tracking (fallback): Uses requestAnimationFrame with configurable threshold (default: 50ms)\n *\n * The detector automatically uses LoAF when available for better attribution and performance,\n * falling back to manual tracking for broader browser support.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Long_animation_frame_timing\n */\nexport class LongFrameDetector {\n #isTracking = false;\n #callback: LongFrameCallback | null = null;\n\n // Manual tracking state\n #frameTrackingId: number | null = null;\n #lastFrameTime = 0;\n\n // LoAF tracking state\n #loafObserver: PerformanceObserver | null = null;\n\n /**\n * Check if LoAF API is available in the browser\n */\n private isLoAFAvailable(): boolean {\n return (\n typeof PerformanceObserver !== 'undefined' &&\n PerformanceObserver.supportedEntryTypes &&\n PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n );\n }\n\n /**\n * Start detecting long frames and call the provided callback when they occur\n */\n public start(callback: LongFrameCallback): void {\n if (this.#isTracking) {\n writePerformanceLog('LFD', 'Already tracking frames, stopping previous session');\n this.stop();\n }\n\n this.#callback = callback;\n this.#isTracking = true;\n\n if (this.isLoAFAvailable()) {\n this.startLoAFTracking();\n } else {\n this.startManualFrameTracking();\n }\n\n writePerformanceLog(\n 'LFD',\n `Started tracking with ${\n this.isLoAFAvailable() ? 'LoAF API' : 'manual'\n } method, threshold: ${LONG_FRAME_THRESHOLD}ms`\n );\n }\n\n /**\n * Stop detecting long frames\n */\n public stop(): void {\n if (!this.#isTracking) {\n return;\n }\n\n this.#isTracking = false;\n this.#callback = null;\n\n // Stop both tracking methods to ensure cleanup\n this.stopLoAFTracking();\n this.stopManualFrameTracking();\n }\n\n /**\n * Check if currently tracking frames\n */\n public isTracking(): boolean {\n return this.#isTracking;\n }\n\n /**\n * Start tracking using the Long Animation Frame API\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongAnimationFrameTiming\n */\n private startLoAFTracking(): void {\n if (!this.isLoAFAvailable()) {\n writePerformanceLog('LFD', 'LoAF API not available, falling back to manual tracking');\n this.startManualFrameTracking();\n return;\n }\n\n try {\n this.#loafObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n // No duration check needed - LoAF API already filters for long frames (>50ms)\n const event: LongFrameEvent = {\n duration: entry.duration,\n timestamp: entry.startTime,\n method: 'loaf',\n };\n\n if (this.#callback) {\n this.#callback(event);\n }\n\n // Add performance marks and measurements for debugging in dev tools\n if (typeof performance !== 'undefined' && performance.mark && performance.measure) {\n const frameId = `long-frame-${entry.startTime.toFixed(0)}`;\n const startMarkName = `${frameId}-start`;\n const endMarkName = `${frameId}-end`;\n const measureName = `Long Frame (LoAF): ${entry.duration.toFixed(1)}ms`;\n\n try {\n // Create start and end marks\n performance.mark(startMarkName, { startTime: entry.startTime });\n performance.mark(endMarkName, { startTime: entry.startTime + entry.duration });\n\n // Create measurement span\n performance.measure(measureName, startMarkName, endMarkName);\n } catch {\n // Fallback for browsers that don't support startTime option\n performance.mark(measureName);\n }\n }\n\n writePerformanceLog('LFD', `Long frame detected (LoAF): ${entry.duration}ms at ${entry.startTime}ms`);\n }\n });\n\n this.#loafObserver.observe({ type: 'long-animation-frame', buffered: false });\n } catch (error) {\n writePerformanceLog('LFD', 'Failed to start LoAF tracking, falling back to manual:', error);\n this.startManualFrameTracking();\n }\n }\n\n /**\n * Stop LoAF tracking\n */\n private stopLoAFTracking(): void {\n if (this.#loafObserver) {\n this.#loafObserver.disconnect();\n this.#loafObserver = null;\n writePerformanceLog('LFD', 'Stopped LoAF tracking');\n }\n }\n\n /**\n * Start manual frame tracking using requestAnimationFrame\n */\n private startManualFrameTracking(): void {\n this.#lastFrameTime = performance.now();\n this.#frameTrackingId = requestAnimationFrame(() => this.measureFrames());\n }\n\n /**\n * Stop manual frame tracking\n */\n private stopManualFrameTracking(): void {\n if (this.#frameTrackingId) {\n cancelAnimationFrame(this.#frameTrackingId);\n this.#frameTrackingId = null;\n writePerformanceLog('LFD', 'Stopped manual frame tracking');\n }\n }\n\n /**\n * Measure frame durations using requestAnimationFrame\n */\n private measureFrames = (): void => {\n if (!this.#isTracking) {\n return;\n }\n\n const currentFrameTime = performance.now();\n const frameLength = currentFrameTime - this.#lastFrameTime;\n\n // Check if frame exceeds threshold\n if (frameLength > LONG_FRAME_THRESHOLD) {\n const event: LongFrameEvent = {\n duration: frameLength,\n timestamp: currentFrameTime,\n method: 'manual',\n };\n\n if (this.#callback) {\n this.#callback(event);\n }\n\n // Add performance marks and measurements for debugging in dev tools\n if (typeof performance !== 'undefined' && performance.mark && performance.measure) {\n const frameId = `long-frame-manual-${currentFrameTime.toFixed(0)}`;\n const startMarkName = `${frameId}-start`;\n const endMarkName = `${frameId}-end`;\n const measureName = `Long Frame (Manual): ${frameLength.toFixed(1)}ms`;\n\n try {\n // Create start and end marks\n performance.mark(startMarkName, { startTime: currentFrameTime - frameLength });\n performance.mark(endMarkName, { startTime: currentFrameTime });\n\n // Create measurement span\n performance.measure(measureName, startMarkName, endMarkName);\n } catch {\n // Fallback for browsers that don't support startTime option\n performance.mark(measureName);\n }\n }\n\n writePerformanceLog(\n 'LFD',\n `Long frame detected (manual): ${frameLength}ms (threshold: ${LONG_FRAME_THRESHOLD}ms)`\n );\n }\n\n this.#lastFrameTime = currentFrameTime;\n\n // Continue tracking\n if (this.#isTracking) {\n this.#frameTrackingId = requestAnimationFrame(this.measureFrames);\n }\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LongFrameDetector.js","sources":["../../../src/behaviors/LongFrameDetector.ts"],"sourcesContent":["import { writeSceneLog } from '../utils/writeSceneLog';\n\nconst LONG_FRAME_THRESHOLD = 50; // Threshold for both LoAF and manual tracking (ms)\n\nexport interface LongFrameEvent {\n duration: number; // Frame duration in milliseconds\n timestamp: number; // When the frame occurred\n method: 'manual' | 'loaf'; // Which detection method was used\n}\n\nexport type LongFrameCallback = (event: LongFrameEvent) => void;\n\n/**\n * LongFrameDetector is a module for detecting long animation frames.\n *\n * It supports two detection methods with automatic fallback:\n * 1. LoAF API (default when available): Uses Long Animation Frame API with 50ms threshold\n * 2. Manual tracking (fallback): Uses requestAnimationFrame with configurable threshold (default: 50ms)\n *\n * The detector automatically uses LoAF when available for better attribution and performance,\n * falling back to manual tracking for broader browser support.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Long_animation_frame_timing\n */\nexport class LongFrameDetector {\n #isTracking = false;\n #callback: LongFrameCallback | null = null;\n\n // Manual tracking state\n #frameTrackingId: number | null = null;\n #lastFrameTime = 0;\n\n // LoAF tracking state\n #loafObserver: PerformanceObserver | null = null;\n\n /**\n * Check if LoAF API is available in the browser\n */\n private isLoAFAvailable(): boolean {\n return (\n typeof PerformanceObserver !== 'undefined' &&\n PerformanceObserver.supportedEntryTypes &&\n PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n );\n }\n\n /**\n * Start detecting long frames and call the provided callback when they occur\n */\n public start(callback: LongFrameCallback): void {\n if (this.#isTracking) {\n writeSceneLog('LongFrameDetector', 'Already tracking frames, stopping previous session');\n this.stop();\n }\n\n this.#callback = callback;\n this.#isTracking = true;\n\n if (this.isLoAFAvailable()) {\n this.startLoAFTracking();\n } else {\n this.startManualFrameTracking();\n }\n\n writeSceneLog(\n 'LongFrameDetector',\n `Started tracking with ${\n this.isLoAFAvailable() ? 'LoAF API' : 'manual'\n } method, threshold: ${LONG_FRAME_THRESHOLD}ms`\n );\n }\n\n /**\n * Stop detecting long frames\n */\n public stop(): void {\n if (!this.#isTracking) {\n return;\n }\n\n this.#isTracking = false;\n this.#callback = null;\n\n // Stop both tracking methods to ensure cleanup\n this.stopLoAFTracking();\n this.stopManualFrameTracking();\n }\n\n /**\n * Check if currently tracking frames\n */\n public isTracking(): boolean {\n return this.#isTracking;\n }\n\n /**\n * Start tracking using the Long Animation Frame API\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongAnimationFrameTiming\n */\n private startLoAFTracking(): void {\n if (!this.isLoAFAvailable()) {\n writeSceneLog('LongFrameDetector', 'LoAF API not available, falling back to manual tracking');\n this.startManualFrameTracking();\n return;\n }\n\n try {\n this.#loafObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n // No duration check needed - LoAF API already filters for long frames (>50ms)\n const event: LongFrameEvent = {\n duration: entry.duration,\n timestamp: entry.startTime,\n method: 'loaf',\n };\n\n if (this.#callback) {\n this.#callback(event);\n }\n\n // Add performance marks and measurements for debugging in dev tools\n if (typeof performance !== 'undefined' && performance.mark && performance.measure) {\n const frameId = `long-frame-${entry.startTime.toFixed(0)}`;\n const startMarkName = `${frameId}-start`;\n const endMarkName = `${frameId}-end`;\n const measureName = `Long Frame (LoAF): ${entry.duration.toFixed(1)}ms`;\n\n try {\n // Create start and end marks\n performance.mark(startMarkName, { startTime: entry.startTime });\n performance.mark(endMarkName, { startTime: entry.startTime + entry.duration });\n\n // Create measurement span\n performance.measure(measureName, startMarkName, endMarkName);\n } catch {\n // Fallback for browsers that don't support startTime option\n performance.mark(measureName);\n }\n }\n\n writeSceneLog('LongFrameDetector', `Long frame detected (LoAF): ${entry.duration}ms at ${entry.startTime}ms`);\n }\n });\n\n this.#loafObserver.observe({ type: 'long-animation-frame', buffered: false });\n } catch (error) {\n writeSceneLog('LongFrameDetector', 'Failed to start LoAF tracking, falling back to manual:', error);\n this.startManualFrameTracking();\n }\n }\n\n /**\n * Stop LoAF tracking\n */\n private stopLoAFTracking(): void {\n if (this.#loafObserver) {\n this.#loafObserver.disconnect();\n this.#loafObserver = null;\n writeSceneLog('LongFrameDetector', 'Stopped LoAF tracking');\n }\n }\n\n /**\n * Start manual frame tracking using requestAnimationFrame\n */\n private startManualFrameTracking(): void {\n this.#lastFrameTime = performance.now();\n this.#frameTrackingId = requestAnimationFrame(() => this.measureFrames());\n }\n\n /**\n * Stop manual frame tracking\n */\n private stopManualFrameTracking(): void {\n if (this.#frameTrackingId) {\n cancelAnimationFrame(this.#frameTrackingId);\n this.#frameTrackingId = null;\n writeSceneLog('LongFrameDetector', 'Stopped manual frame tracking');\n }\n }\n\n /**\n * Measure frame durations using requestAnimationFrame\n */\n private measureFrames = (): void => {\n if (!this.#isTracking) {\n return;\n }\n\n const currentFrameTime = performance.now();\n const frameLength = currentFrameTime - this.#lastFrameTime;\n\n // Check if frame exceeds threshold\n if (frameLength > LONG_FRAME_THRESHOLD) {\n const event: LongFrameEvent = {\n duration: frameLength,\n timestamp: currentFrameTime,\n method: 'manual',\n };\n\n if (this.#callback) {\n this.#callback(event);\n }\n\n // Add performance marks and measurements for debugging in dev tools\n if (typeof performance !== 'undefined' && performance.mark && performance.measure) {\n const frameId = `long-frame-manual-${currentFrameTime.toFixed(0)}`;\n const startMarkName = `${frameId}-start`;\n const endMarkName = `${frameId}-end`;\n const measureName = `Long Frame (Manual): ${frameLength.toFixed(1)}ms`;\n\n try {\n // Create start and end marks\n performance.mark(startMarkName, { startTime: currentFrameTime - frameLength });\n performance.mark(endMarkName, { startTime: currentFrameTime });\n\n // Create measurement span\n performance.measure(measureName, startMarkName, endMarkName);\n } catch {\n // Fallback for browsers that don't support startTime option\n performance.mark(measureName);\n }\n }\n\n writeSceneLog(\n 'LongFrameDetector',\n `Long frame detected (manual): ${frameLength}ms (threshold: ${LONG_FRAME_THRESHOLD}ms)`\n );\n }\n\n this.#lastFrameTime = currentFrameTime;\n\n // Continue tracking\n if (this.#isTracking) {\n this.#frameTrackingId = requestAnimationFrame(this.measureFrames);\n }\n };\n}\n"],"names":[],"mappings":";;;;;;;;;AAAA,IAAA,WAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA;AAEA,MAAM,oBAAuB,GAAA,EAAA;AAsBtB,MAAM,iBAAkB,CAAA;AAAA,EAAxB,WAAA,GAAA;AACL,IAAc,YAAA,CAAA,IAAA,EAAA,WAAA,EAAA,KAAA,CAAA;AACd,IAAsC,YAAA,CAAA,IAAA,EAAA,SAAA,EAAA,IAAA,CAAA;AAGtC;AAAA,IAAkC,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAA,IAAA,CAAA;AAClC,IAAiB,YAAA,CAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;AAGjB;AAAA,IAA4C,YAAA,CAAA,IAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAuJ5C;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,gBAAgB,MAAY;AAClC,MAAI,IAAA,CAAC,mBAAK,WAAa,CAAA,EAAA;AACrB,QAAA;AAAA;AAGF,MAAM,MAAA,gBAAA,GAAmB,YAAY,GAAI,EAAA;AACzC,MAAM,MAAA,WAAA,GAAc,mBAAmB,YAAK,CAAA,IAAA,EAAA,cAAA,CAAA;AAG5C,MAAA,IAAI,cAAc,oBAAsB,EAAA;AACtC,QAAA,MAAM,KAAwB,GAAA;AAAA,UAC5B,QAAU,EAAA,WAAA;AAAA,UACV,SAAW,EAAA,gBAAA;AAAA,UACX,MAAQ,EAAA;AAAA,SACV;AAEA,QAAA,IAAI,mBAAK,SAAW,CAAA,EAAA;AAClB,UAAA,YAAA,CAAA,IAAA,EAAK,WAAL,IAAe,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA;AAIjB,QAAA,IAAI,OAAO,WAAgB,KAAA,WAAA,IAAe,WAAY,CAAA,IAAA,IAAQ,YAAY,OAAS,EAAA;AACjF,UAAA,MAAM,OAAU,GAAA,CAAA,kBAAA,EAAqB,gBAAiB,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAChE,UAAM,MAAA,aAAA,GAAgB,GAAG,OAAO,CAAA,MAAA,CAAA;AAChC,UAAM,MAAA,WAAA,GAAc,GAAG,OAAO,CAAA,IAAA,CAAA;AAC9B,UAAA,MAAM,WAAc,GAAA,CAAA,qBAAA,EAAwB,WAAY,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAElE,UAAI,IAAA;AAEF,YAAA,WAAA,CAAY,KAAK,aAAe,EAAA,EAAE,SAAW,EAAA,gBAAA,GAAmB,aAAa,CAAA;AAC7E,YAAA,WAAA,CAAY,IAAK,CAAA,WAAA,EAAa,EAAE,SAAA,EAAW,kBAAkB,CAAA;AAG7D,YAAY,WAAA,CAAA,OAAA,CAAQ,WAAa,EAAA,aAAA,EAAe,WAAW,CAAA;AAAA,WACrD,CAAA,OAAA,CAAA,EAAA;AAEN,YAAA,WAAA,CAAY,KAAK,WAAW,CAAA;AAAA;AAC9B;AAGF,QAAA,aAAA;AAAA,UACE,mBAAA;AAAA,UACA,CAAA,8BAAA,EAAiC,WAAW,CAAA,eAAA,EAAkB,oBAAoB,CAAA,GAAA;AAAA,SACpF;AAAA;AAGF,MAAA,YAAA,CAAA,IAAA,EAAK,cAAiB,EAAA,gBAAA,CAAA;AAGtB,MAAA,IAAI,mBAAK,WAAa,CAAA,EAAA;AACpB,QAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAmB,qBAAsB,CAAA,IAAA,CAAK,aAAa,CAAA,CAAA;AAAA;AAClE,KACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAtMQ,eAA2B,GAAA;AACjC,IACE,OAAA,OAAO,wBAAwB,WAC/B,IAAA,mBAAA,CAAoB,uBACpB,mBAAoB,CAAA,mBAAA,CAAoB,SAAS,sBAAsB,CAAA;AAAA;AAE3E;AAAA;AAAA;AAAA,EAKO,MAAM,QAAmC,EAAA;AAC9C,IAAA,IAAI,mBAAK,WAAa,CAAA,EAAA;AACpB,MAAA,aAAA,CAAc,qBAAqB,oDAAoD,CAAA;AACvF,MAAA,IAAA,CAAK,IAAK,EAAA;AAAA;AAGZ,IAAA,YAAA,CAAA,IAAA,EAAK,SAAY,EAAA,QAAA,CAAA;AACjB,IAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,IAAA,CAAA;AAEnB,IAAI,IAAA,IAAA,CAAK,iBAAmB,EAAA;AAC1B,MAAA,IAAA,CAAK,iBAAkB,EAAA;AAAA,KAClB,MAAA;AACL,MAAA,IAAA,CAAK,wBAAyB,EAAA;AAAA;AAGhC,IAAA,aAAA;AAAA,MACE,mBAAA;AAAA,MACA,yBACE,IAAK,CAAA,eAAA,KAAoB,UAAa,GAAA,QACxC,uBAAuB,oBAAoB,CAAA,EAAA;AAAA,KAC7C;AAAA;AACF;AAAA;AAAA;AAAA,EAKO,IAAa,GAAA;AAClB,IAAI,IAAA,CAAC,mBAAK,WAAa,CAAA,EAAA;AACrB,MAAA;AAAA;AAGF,IAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,KAAA,CAAA;AACnB,IAAA,YAAA,CAAA,IAAA,EAAK,SAAY,EAAA,IAAA,CAAA;AAGjB,IAAA,IAAA,CAAK,gBAAiB,EAAA;AACtB,IAAA,IAAA,CAAK,uBAAwB,EAAA;AAAA;AAC/B;AAAA;AAAA;AAAA,EAKO,UAAsB,GAAA;AAC3B,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA;AACd;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAA0B,GAAA;AAChC,IAAI,IAAA,CAAC,IAAK,CAAA,eAAA,EAAmB,EAAA;AAC3B,MAAA,aAAA,CAAc,qBAAqB,yDAAyD,CAAA;AAC5F,MAAA,IAAA,CAAK,wBAAyB,EAAA;AAC9B,MAAA;AAAA;AAGF,IAAI,IAAA;AACF,MAAA,YAAA,CAAA,IAAA,EAAK,aAAgB,EAAA,IAAI,mBAAoB,CAAA,CAAC,IAAS,KAAA;AACrD,QAAW,KAAA,MAAA,KAAA,IAAS,IAAK,CAAA,UAAA,EAAc,EAAA;AAErC,UAAA,MAAM,KAAwB,GAAA;AAAA,YAC5B,UAAU,KAAM,CAAA,QAAA;AAAA,YAChB,WAAW,KAAM,CAAA,SAAA;AAAA,YACjB,MAAQ,EAAA;AAAA,WACV;AAEA,UAAA,IAAI,mBAAK,SAAW,CAAA,EAAA;AAClB,YAAA,YAAA,CAAA,IAAA,EAAK,WAAL,IAAe,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA;AAIjB,UAAA,IAAI,OAAO,WAAgB,KAAA,WAAA,IAAe,WAAY,CAAA,IAAA,IAAQ,YAAY,OAAS,EAAA;AACjF,YAAA,MAAM,UAAU,CAAc,WAAA,EAAA,KAAA,CAAM,SAAU,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AACxD,YAAM,MAAA,aAAA,GAAgB,GAAG,OAAO,CAAA,MAAA,CAAA;AAChC,YAAM,MAAA,WAAA,GAAc,GAAG,OAAO,CAAA,IAAA,CAAA;AAC9B,YAAA,MAAM,cAAc,CAAsB,mBAAA,EAAA,KAAA,CAAM,QAAS,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAEnE,YAAI,IAAA;AAEF,cAAA,WAAA,CAAY,KAAK,aAAe,EAAA,EAAE,SAAW,EAAA,KAAA,CAAM,WAAW,CAAA;AAC9D,cAAY,WAAA,CAAA,IAAA,CAAK,aAAa,EAAE,SAAA,EAAW,MAAM,SAAY,GAAA,KAAA,CAAM,UAAU,CAAA;AAG7E,cAAY,WAAA,CAAA,OAAA,CAAQ,WAAa,EAAA,aAAA,EAAe,WAAW,CAAA;AAAA,aACrD,CAAA,OAAA,CAAA,EAAA;AAEN,cAAA,WAAA,CAAY,KAAK,WAAW,CAAA;AAAA;AAC9B;AAGF,UAAA,aAAA,CAAc,qBAAqB,CAA+B,4BAAA,EAAA,KAAA,CAAM,QAAQ,CAAS,MAAA,EAAA,KAAA,CAAM,SAAS,CAAI,EAAA,CAAA,CAAA;AAAA;AAC9G,OACD,CAAA,CAAA;AAED,MAAA,YAAA,CAAA,IAAA,EAAK,eAAc,OAAQ,CAAA,EAAE,MAAM,sBAAwB,EAAA,QAAA,EAAU,OAAO,CAAA;AAAA,aACrE,KAAO,EAAA;AACd,MAAc,aAAA,CAAA,mBAAA,EAAqB,0DAA0D,KAAK,CAAA;AAClG,MAAA,IAAA,CAAK,wBAAyB,EAAA;AAAA;AAChC;AACF;AAAA;AAAA;AAAA,EAKQ,gBAAyB,GAAA;AAC/B,IAAA,IAAI,mBAAK,aAAe,CAAA,EAAA;AACtB,MAAA,YAAA,CAAA,IAAA,EAAK,eAAc,UAAW,EAAA;AAC9B,MAAA,YAAA,CAAA,IAAA,EAAK,aAAgB,EAAA,IAAA,CAAA;AACrB,MAAA,aAAA,CAAc,qBAAqB,uBAAuB,CAAA;AAAA;AAC5D;AACF;AAAA;AAAA;AAAA,EAKQ,wBAAiC,GAAA;AACvC,IAAK,YAAA,CAAA,IAAA,EAAA,cAAA,EAAiB,YAAY,GAAI,EAAA,CAAA;AACtC,IAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,qBAAA,CAAsB,MAAM,IAAA,CAAK,eAAe,CAAA,CAAA;AAAA;AAC1E;AAAA;AAAA;AAAA,EAKQ,uBAAgC,GAAA;AACtC,IAAA,IAAI,mBAAK,gBAAkB,CAAA,EAAA;AACzB,MAAA,oBAAA,CAAqB,mBAAK,gBAAgB,CAAA,CAAA;AAC1C,MAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,IAAA,CAAA;AACxB,MAAA,aAAA,CAAc,qBAAqB,+BAA+B,CAAA;AAAA;AACpE;AA2DJ;AApNE,WAAA,GAAA,IAAA,OAAA,EAAA;AACA,SAAA,GAAA,IAAA,OAAA,EAAA;AAGA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,cAAA,GAAA,IAAA,OAAA,EAAA;AAGA,aAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -1,6 +1,4 @@
1
- import { writePerformanceLog } from '../utils/writePerformanceLog.js';
2
- import { generateOperationId, getScenePerformanceTracker } from './ScenePerformanceTracker.js';
3
- import { PanelProfilingManager } from './PanelProfilingManager.js';
1
+ import { writeSceneLog, writeSceneLogStyled } from '../utils/writeSceneLog.js';
4
2
  import { LongFrameDetector } from './LongFrameDetector.js';
5
3
 
6
4
  var __typeError = (msg) => {
@@ -18,21 +16,18 @@ var __privateWrapper = (obj, member, setter, getter) => ({
18
16
  return __privateGet(obj, member, getter);
19
17
  }
20
18
  });
21
- var _profileInProgress, _interactionInProgress, _profileStartTs, _trailAnimationFrameId, _currentOperationId, _recordedTrailingSpans, _longFrameDetector, _longFramesCount, _longFramesTotalTime, _visibilityChangeHandler, _onInteractionComplete;
19
+ var _profileInProgress, _interactionInProgress, _profileStartTs, _trailAnimationFrameId, _recordedTrailingSpans, _longFrameDetector, _longFramesCount, _longFramesTotalTime, _visibilityChangeHandler, _onInteractionComplete;
22
20
  const POST_STORM_WINDOW = 2e3;
23
21
  const DEFAULT_LONG_FRAME_THRESHOLD = 30;
24
22
  const TAB_INACTIVE_THRESHOLD = 1e3;
25
23
  class SceneRenderProfiler {
26
- constructor(panelProfilingConfig) {
24
+ constructor(queryController) {
25
+ this.queryController = queryController;
27
26
  __privateAdd(this, _profileInProgress, null);
28
27
  __privateAdd(this, _interactionInProgress, null);
29
28
  __privateAdd(this, _profileStartTs, null);
30
29
  __privateAdd(this, _trailAnimationFrameId, null);
31
- // Generic metadata for observer notifications
32
- this.metadata = {};
33
- // Operation ID for correlating dashboard interaction events
34
- __privateAdd(this, _currentOperationId);
35
- // Trailing frame measurements
30
+ // Will keep measured lengths trailing frames
36
31
  __privateAdd(this, _recordedTrailingSpans, []);
37
32
  // Long frame tracking
38
33
  __privateAdd(this, _longFrameDetector);
@@ -41,10 +36,11 @@ class SceneRenderProfiler {
41
36
  __privateAdd(this, _visibilityChangeHandler, null);
42
37
  __privateAdd(this, _onInteractionComplete, null);
43
38
  this.measureTrailingFrames = (measurementStartTs, lastFrameTime, profileStartTs) => {
39
+ var _a, _b, _c, _d;
44
40
  const currentFrameTime = performance.now();
45
41
  const frameLength = currentFrameTime - lastFrameTime;
46
42
  if (frameLength > TAB_INACTIVE_THRESHOLD) {
47
- writePerformanceLog("SRP", "Tab was inactive, cancelling profile measurement");
43
+ writeSceneLog("SceneRenderProfiler", "Tab was inactive, cancelling profile measurement");
48
44
  this.cancelProfile();
49
45
  return;
50
46
  }
@@ -58,73 +54,108 @@ class SceneRenderProfiler {
58
54
  } else {
59
55
  const slowFrames = processRecordedSpans(__privateGet(this, _recordedTrailingSpans));
60
56
  const slowFramesTime = slowFrames.reduce((acc, val) => acc + val, 0);
61
- writePerformanceLog(
62
- "SRP",
63
- "Profile tail recorded, slow frames duration:",
64
- slowFramesTime,
65
- slowFrames,
66
- __privateGet(this, _profileInProgress)
57
+ writeSceneLog(
58
+ "SceneRenderProfiler",
59
+ `Profile tail recorded - Slow frames: ${slowFramesTime.toFixed(1)}ms (${slowFrames.length} frames)`
67
60
  );
61
+ writeSceneLog("", ` \u251C\u2500 Origin: ${((_a = __privateGet(this, _profileInProgress)) == null ? void 0 : _a.origin) || "unknown"}`);
62
+ writeSceneLog("", ` \u2514\u2500 Crumbs:`, ((_b = __privateGet(this, _profileInProgress)) == null ? void 0 : _b.crumbs) || []);
68
63
  __privateSet(this, _recordedTrailingSpans, []);
69
64
  const profileDuration = measurementStartTs - profileStartTs;
70
- const slowFrameSummary = slowFrames.length > 0 ? `${slowFramesTime.toFixed(1)}ms slow frames[tail recording] (${slowFrames.length}) \u26A0\uFE0F` : `${slowFramesTime.toFixed(1)}ms slow frames[tail recording] (${slowFrames.length})`;
71
- const longFrameSummary = __privateGet(this, _longFramesCount) > 0 ? `${__privateGet(this, _longFramesTotalTime).toFixed(1)}ms long frames[LoAF] (${__privateGet(this, _longFramesCount)}) \u26A0\uFE0F` : `${__privateGet(this, _longFramesTotalTime).toFixed(1)}ms long frames[LoAF] (${__privateGet(this, _longFramesCount)})`;
72
- writePerformanceLog(
73
- "SRP",
74
- `[PROFILER] Complete: ${(profileDuration + slowFramesTime).toFixed(
75
- 1
76
- )}ms total | ${slowFrameSummary} | ${longFrameSummary}`
77
- );
65
+ if (typeof performance !== "undefined" && performance.mark) {
66
+ const profileName = ((_c = __privateGet(this, _profileInProgress)) == null ? void 0 : _c.origin) || "unknown";
67
+ const totalTime = profileDuration + slowFramesTime;
68
+ performance.mark(`Dashboard Profile End: ${profileName}`);
69
+ const startMarkName = `Dashboard Profile Start: ${profileName}`;
70
+ try {
71
+ performance.measure(
72
+ `Dashboard Profile: ${profileName} (${totalTime.toFixed(1)}ms)`,
73
+ startMarkName,
74
+ `Dashboard Profile End: ${profileName}`
75
+ );
76
+ } catch (e) {
77
+ performance.mark(`Dashboard Profile Complete: ${profileName} (${totalTime.toFixed(1)}ms)`);
78
+ }
79
+ if (slowFrames.length > 0) {
80
+ const slowFramesMarkName = `Slow Frames Summary: ${slowFrames.length} frames (${slowFramesTime.toFixed(
81
+ 1
82
+ )}ms)`;
83
+ performance.mark(slowFramesMarkName);
84
+ slowFrames.forEach((frameTime, index) => {
85
+ if (frameTime > 16) {
86
+ try {
87
+ const frameStartTime = __privateGet(this, _profileStartTs) + profileDuration + (index > 0 ? slowFrames.slice(0, index).reduce((sum, t) => sum + t, 0) : 0);
88
+ const frameId = `slow-frame-${index}`;
89
+ const frameStartMark = `${frameId}-start`;
90
+ const frameEndMark = `${frameId}-end`;
91
+ performance.mark(frameStartMark, { startTime: frameStartTime });
92
+ performance.mark(frameEndMark, { startTime: frameStartTime + frameTime });
93
+ performance.measure(`Slow Frame ${index + 1}: ${frameTime.toFixed(1)}ms`, frameStartMark, frameEndMark);
94
+ } catch (e) {
95
+ performance.mark(`Slow Frame ${index + 1}: ${frameTime.toFixed(1)}ms`);
96
+ }
97
+ }
98
+ });
99
+ }
100
+ }
101
+ const completionTimestamp = performance.now();
102
+ writeSceneLog("SceneRenderProfiler", "Profile completed");
103
+ writeSceneLog("", ` \u251C\u2500 Timestamp: ${completionTimestamp.toFixed(1)}ms`);
104
+ writeSceneLog("", ` \u251C\u2500 Total time: ${(profileDuration + slowFramesTime).toFixed(1)}ms`);
105
+ writeSceneLog("", ` \u251C\u2500 Slow frames: ${slowFramesTime}ms (${slowFrames.length} frames)`);
106
+ writeSceneLog("", ` \u2514\u2500 Long frames: ${__privateGet(this, _longFramesTotalTime)}ms (${__privateGet(this, _longFramesCount)} frames)`);
78
107
  __privateGet(this, _longFrameDetector).stop();
108
+ writeSceneLogStyled(
109
+ "SceneRenderProfiler",
110
+ `Stopped long frame detection - profile complete at ${completionTimestamp.toFixed(1)}ms`,
111
+ "color: #00CC00; font-weight: bold;"
112
+ );
79
113
  __privateSet(this, _trailAnimationFrameId, null);
80
114
  const profileEndTs = profileStartTs + profileDuration + slowFramesTime;
81
115
  if (!__privateGet(this, _profileInProgress)) {
82
116
  return;
83
117
  }
118
+ performance.measure(`DashboardInteraction ${__privateGet(this, _profileInProgress).origin}`, {
119
+ start: profileStartTs,
120
+ end: profileEndTs
121
+ });
84
122
  const networkDuration = captureNetwork(profileStartTs, profileEndTs);
85
- if (__privateGet(this, _profileInProgress)) {
86
- const dashboardData = {
87
- operationId: __privateGet(this, _currentOperationId) || generateOperationId("dashboard-fallback"),
88
- interactionType: __privateGet(this, _profileInProgress).origin,
89
- timestamp: profileEndTs,
123
+ if (((_d = this.queryController) == null ? void 0 : _d.state.onProfileComplete) && __privateGet(this, _profileInProgress)) {
124
+ this.queryController.state.onProfileComplete({
125
+ origin: __privateGet(this, _profileInProgress).origin,
126
+ crumbs: __privateGet(this, _profileInProgress).crumbs,
90
127
  duration: profileDuration + slowFramesTime,
91
128
  networkDuration,
129
+ startTs: profileStartTs,
130
+ endTs: profileEndTs,
92
131
  longFramesCount: __privateGet(this, _longFramesCount),
93
132
  longFramesTotalTime: __privateGet(this, _longFramesTotalTime),
94
- metadata: this.metadata
95
- };
96
- const tracker = getScenePerformanceTracker();
97
- tracker.notifyDashboardInteractionComplete(dashboardData);
133
+ // @ts-ignore
134
+ jsHeapSizeLimit: performance.memory ? performance.memory.jsHeapSizeLimit : 0,
135
+ // @ts-ignore
136
+ usedJSHeapSize: performance.memory ? performance.memory.usedJSHeapSize : 0,
137
+ // @ts-ignore
138
+ totalJSHeapSize: performance.memory ? performance.memory.totalJSHeapSize : 0
139
+ });
98
140
  __privateSet(this, _profileInProgress, null);
99
141
  __privateSet(this, _trailAnimationFrameId, null);
100
142
  }
143
+ if (window.__runs) {
144
+ window.__runs += `${Date.now()}, ${profileDuration + slowFramesTime}
145
+ `;
146
+ } else {
147
+ window.__runs = `${Date.now()}, ${profileDuration + slowFramesTime}
148
+ `;
149
+ }
101
150
  }
102
151
  };
103
152
  __privateSet(this, _longFrameDetector, new LongFrameDetector());
104
153
  this.setupVisibilityChangeHandler();
105
154
  __privateSet(this, _interactionInProgress, null);
106
- if (panelProfilingConfig) {
107
- this._panelProfilingManager = new PanelProfilingManager(panelProfilingConfig);
108
- }
109
- }
110
- /** Set generic metadata for observer notifications */
111
- setMetadata(metadata) {
112
- this.metadata = { ...metadata };
113
155
  }
114
156
  setQueryController(queryController) {
115
157
  this.queryController = queryController;
116
158
  }
117
- /** Attach panel profiling to a scene object */
118
- attachPanelProfiling(sceneObject) {
119
- var _a;
120
- (_a = this._panelProfilingManager) == null ? void 0 : _a.attachToScene(sceneObject);
121
- }
122
- /** Attach profiler to a specific panel */
123
- attachProfilerToPanel(panel) {
124
- var _a;
125
- writePerformanceLog("SRP", "Attaching profiler to panel", panel.state.key);
126
- (_a = this._panelProfilingManager) == null ? void 0 : _a.attachProfilerToPanel(panel);
127
- }
128
159
  setInteractionCompleteHandler(handler) {
129
160
  __privateSet(this, _onInteractionComplete, handler != null ? handler : null);
130
161
  }
@@ -134,7 +165,7 @@ class SceneRenderProfiler {
134
165
  }
135
166
  __privateSet(this, _visibilityChangeHandler, () => {
136
167
  if (document.hidden && __privateGet(this, _profileInProgress)) {
137
- writePerformanceLog("SRP", "Tab became inactive, cancelling profile");
168
+ writeSceneLog("SceneRenderProfiler", "Tab became inactive, cancelling profile");
138
169
  this.cancelProfile();
139
170
  }
140
171
  });
@@ -143,18 +174,16 @@ class SceneRenderProfiler {
143
174
  }
144
175
  }
145
176
  cleanup() {
146
- var _a;
147
177
  if (__privateGet(this, _visibilityChangeHandler) && typeof document !== "undefined") {
148
178
  document.removeEventListener("visibilitychange", __privateGet(this, _visibilityChangeHandler));
149
179
  __privateSet(this, _visibilityChangeHandler, null);
150
180
  }
151
181
  __privateGet(this, _longFrameDetector).stop();
152
182
  this.cancelProfile();
153
- (_a = this._panelProfilingManager) == null ? void 0 : _a.cleanup();
154
183
  }
155
184
  startProfile(name) {
156
185
  if (document.hidden) {
157
- writePerformanceLog("SRP", "Tab is inactive, skipping profile", name);
186
+ writeSceneLog("SceneRenderProfiler", "Tab is inactive, skipping profile", name);
158
187
  return;
159
188
  }
160
189
  if (__privateGet(this, _profileInProgress)) {
@@ -170,14 +199,14 @@ class SceneRenderProfiler {
170
199
  }
171
200
  startInteraction(interaction) {
172
201
  if (__privateGet(this, _interactionInProgress)) {
173
- writePerformanceLog("SRP", "Cancelled interaction:", __privateGet(this, _interactionInProgress));
202
+ writeSceneLog("profile", "Cancelled interaction:", __privateGet(this, _interactionInProgress));
174
203
  __privateSet(this, _interactionInProgress, null);
175
204
  }
176
205
  __privateSet(this, _interactionInProgress, {
177
206
  interaction,
178
207
  startTs: performance.now()
179
208
  });
180
- writePerformanceLog("SRP", "Started interaction:", interaction);
209
+ writeSceneLog("SceneRenderProfiler", "Started interaction:", interaction);
181
210
  }
182
211
  stopInteraction() {
183
212
  if (!__privateGet(this, _interactionInProgress)) {
@@ -186,10 +215,11 @@ class SceneRenderProfiler {
186
215
  const endTs = performance.now();
187
216
  const interactionDuration = endTs - __privateGet(this, _interactionInProgress).startTs;
188
217
  const networkDuration = captureNetwork(__privateGet(this, _interactionInProgress).startTs, endTs);
189
- writePerformanceLog(
190
- "SRP",
191
- `[INTERACTION] Complete: ${interactionDuration.toFixed(1)}ms total | ${networkDuration.toFixed(1)}ms network`
192
- );
218
+ writeSceneLog("SceneRenderProfiler", "Completed interaction:");
219
+ writeSceneLog("", ` \u251C\u2500 Total time: ${interactionDuration.toFixed(1)}ms`);
220
+ writeSceneLog("", ` \u251C\u2500 Network duration: ${networkDuration.toFixed(1)}ms`);
221
+ writeSceneLog("", ` \u251C\u2500 StartTs: ${__privateGet(this, _interactionInProgress).startTs.toFixed(1)}ms`);
222
+ writeSceneLog("", ` \u2514\u2500 EndTs: ${endTs.toFixed(1)}ms`);
193
223
  if (__privateGet(this, _onInteractionComplete) && __privateGet(this, _profileInProgress)) {
194
224
  __privateGet(this, _onInteractionComplete).call(this, {
195
225
  origin: __privateGet(this, _interactionInProgress).interaction,
@@ -217,24 +247,32 @@ class SceneRenderProfiler {
217
247
  return (_b = (_a = __privateGet(this, _interactionInProgress)) == null ? void 0 : _a.interaction) != null ? _b : null;
218
248
  }
219
249
  /**
220
- * Start new performance profile
221
- * @param name - Profile trigger (e.g., 'time_range_change')
222
- * @param force - True if canceling existing profile, false if starting clean
250
+ * Starts a new profile for performance measurement.
251
+ *
252
+ * @param name - The origin/trigger of the profile (e.g., 'time_range_change', 'variable_value_changed')
253
+ * @param force - Whether this is a "forced" profile (true) or "clean" profile (false)
254
+ * - "forced": Started by canceling an existing profile that was recording trailing frames
255
+ * This happens when a new user interaction occurs before the previous one
256
+ * finished measuring its performance impact
257
+ * - "clean": Started when no profile is currently active
223
258
  */
224
259
  _startNewProfile(name, force = false) {
225
- const profileType = force ? "forced" : "clean";
226
- writePerformanceLog("SRP", `[PROFILER] ${name} started (${profileType})`);
260
+ var _a;
227
261
  __privateSet(this, _profileInProgress, { origin: name, crumbs: [] });
228
262
  __privateSet(this, _profileStartTs, performance.now());
229
263
  __privateSet(this, _longFramesCount, 0);
230
264
  __privateSet(this, _longFramesTotalTime, 0);
231
- __privateSet(this, _currentOperationId, generateOperationId("dashboard"));
232
- getScenePerformanceTracker().notifyDashboardInteractionStart({
233
- operationId: __privateGet(this, _currentOperationId),
234
- interactionType: name,
235
- timestamp: __privateGet(this, _profileStartTs),
236
- metadata: this.metadata
237
- });
265
+ if (typeof performance !== "undefined" && performance.mark) {
266
+ const markName = `Dashboard Profile Start: ${name}`;
267
+ performance.mark(markName);
268
+ }
269
+ writeSceneLogStyled(
270
+ "SceneRenderProfiler",
271
+ `Profile started[${force ? "forced" : "clean"}]`,
272
+ "color: #FFCC00; font-weight: bold;"
273
+ );
274
+ writeSceneLog("", ` \u251C\u2500 Origin: ${((_a = __privateGet(this, _profileInProgress)) == null ? void 0 : _a.origin) || "unknown"}`);
275
+ writeSceneLog("", ` \u2514\u2500 Timestamp: ${__privateGet(this, _profileStartTs).toFixed(1)}ms`);
238
276
  __privateGet(this, _longFrameDetector).start((event) => {
239
277
  if (!__privateGet(this, _profileInProgress) || !__privateGet(this, _profileStartTs)) {
240
278
  return;
@@ -253,9 +291,12 @@ class SceneRenderProfiler {
253
291
  }
254
292
  tryCompletingProfile() {
255
293
  var _a;
256
- writePerformanceLog("SRP", "Trying to complete profile", __privateGet(this, _profileInProgress));
294
+ if (!__privateGet(this, _profileInProgress)) {
295
+ return;
296
+ }
297
+ writeSceneLog("SceneRenderProfiler", "Trying to complete profile", __privateGet(this, _profileInProgress));
257
298
  if (((_a = this.queryController) == null ? void 0 : _a.runningQueriesCount()) === 0 && __privateGet(this, _profileInProgress)) {
258
- writePerformanceLog("SRP", "All queries completed, stopping profile");
299
+ writeSceneLog("SceneRenderProfiler", "All queries completed, starting tail measurement");
259
300
  this.recordProfileTail(performance.now(), __privateGet(this, _profileStartTs));
260
301
  }
261
302
  }
@@ -266,20 +307,20 @@ class SceneRenderProfiler {
266
307
  if (__privateGet(this, _trailAnimationFrameId)) {
267
308
  cancelAnimationFrame(__privateGet(this, _trailAnimationFrameId));
268
309
  __privateSet(this, _trailAnimationFrameId, null);
269
- writePerformanceLog("SRP", "Cancelled recording frames, new profile started");
310
+ writeSceneLog("SceneRenderProfiler", "Cancelled recording frames, new profile started");
270
311
  }
271
312
  }
272
313
  // cancel profile
273
314
  cancelProfile() {
274
315
  if (__privateGet(this, _profileInProgress)) {
275
- writePerformanceLog("SRP", "Cancelling profile", __privateGet(this, _profileInProgress));
316
+ writeSceneLog("SceneRenderProfiler", "Cancelling profile", __privateGet(this, _profileInProgress));
276
317
  __privateSet(this, _profileInProgress, null);
277
318
  if (__privateGet(this, _trailAnimationFrameId)) {
278
319
  cancelAnimationFrame(__privateGet(this, _trailAnimationFrameId));
279
320
  __privateSet(this, _trailAnimationFrameId, null);
280
321
  }
281
322
  __privateGet(this, _longFrameDetector).stop();
282
- writePerformanceLog("SRP", "Stopped long frame detection - profile cancelled");
323
+ writeSceneLog("SceneRenderProfiler", "Stopped long frame detection - profile cancelled");
283
324
  __privateSet(this, _recordedTrailingSpans, []);
284
325
  __privateSet(this, _longFramesCount, 0);
285
326
  __privateSet(this, _longFramesTotalTime, 0);
@@ -287,13 +328,7 @@ class SceneRenderProfiler {
287
328
  }
288
329
  addCrumb(crumb) {
289
330
  if (__privateGet(this, _profileInProgress)) {
290
- getScenePerformanceTracker().notifyDashboardInteractionMilestone({
291
- operationId: generateOperationId("dashboard-milestone"),
292
- interactionType: __privateGet(this, _profileInProgress).origin,
293
- timestamp: performance.now(),
294
- milestone: crumb,
295
- metadata: this.metadata
296
- });
331
+ writeSceneLog("SceneRenderProfiler", "Adding crumb:", crumb);
297
332
  __privateGet(this, _profileInProgress).crumbs.push(crumb);
298
333
  }
299
334
  }
@@ -302,7 +337,6 @@ _profileInProgress = new WeakMap();
302
337
  _interactionInProgress = new WeakMap();
303
338
  _profileStartTs = new WeakMap();
304
339
  _trailAnimationFrameId = new WeakMap();
305
- _currentOperationId = new WeakMap();
306
340
  _recordedTrailingSpans = new WeakMap();
307
341
  _longFrameDetector = new WeakMap();
308
342
  _longFramesCount = new WeakMap();
@@ -351,6 +385,16 @@ function calculateNetworkTime(requests) {
351
385
  totalNetworkTime += currentEnd - currentStart;
352
386
  return totalNetworkTime;
353
387
  }
388
+ const REFRESH_INTERACTION = "refresh";
389
+ const TIME_RANGE_CHANGE_INTERACTION = "time_range_change";
390
+ const FILTER_REMOVED_INTERACTION = "filter_removed";
391
+ const FILTER_CHANGED_INTERACTION = "filter_changed";
392
+ const FILTER_RESTORED_INTERACTION = "filter_restored";
393
+ const VARIABLE_VALUE_CHANGED_INTERACTION = "variable_value_changed";
394
+ const SCOPES_CHANGED_INTERACTION = "scopes_changed";
395
+ const ADHOC_KEYS_DROPDOWN_INTERACTION = "adhoc_keys_dropdown";
396
+ const ADHOC_VALUES_DROPDOWN_INTERACTION = "adhoc_values_dropdown";
397
+ const GROUPBY_DIMENSIONS_INTERACTION = "groupby_dimensions";
354
398
 
355
- export { SceneRenderProfiler, calculateNetworkTime, captureNetwork, processRecordedSpans };
399
+ export { ADHOC_KEYS_DROPDOWN_INTERACTION, ADHOC_VALUES_DROPDOWN_INTERACTION, FILTER_CHANGED_INTERACTION, FILTER_REMOVED_INTERACTION, FILTER_RESTORED_INTERACTION, GROUPBY_DIMENSIONS_INTERACTION, REFRESH_INTERACTION, SCOPES_CHANGED_INTERACTION, SceneRenderProfiler, TIME_RANGE_CHANGE_INTERACTION, VARIABLE_VALUE_CHANGED_INTERACTION, calculateNetworkTime, captureNetwork, processRecordedSpans };
356
400
  //# sourceMappingURL=SceneRenderProfiler.js.map