@grafana/scenes 5.23.0 → 5.23.1--canary.858.11699916776.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 (37) hide show
  1. package/CHANGELOG.md +6 -6
  2. package/dist/esm/behaviors/SceneQueryController.js +60 -5
  3. package/dist/esm/behaviors/SceneQueryController.js.map +1 -1
  4. package/dist/esm/behaviors/SceneRenderProfiler.js +169 -0
  5. package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -0
  6. package/dist/esm/components/SceneRefreshPicker.js +4 -1
  7. package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
  8. package/dist/esm/components/VizPanel/VizPanel.js +9 -6
  9. package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
  10. package/dist/esm/core/SceneTimeRange.js +3 -0
  11. package/dist/esm/core/SceneTimeRange.js.map +1 -1
  12. package/dist/esm/core/sceneGraph/getQueryController.js +19 -0
  13. package/dist/esm/core/sceneGraph/getQueryController.js.map +1 -0
  14. package/dist/esm/core/sceneGraph/index.js +3 -3
  15. package/dist/esm/core/sceneGraph/index.js.map +1 -1
  16. package/dist/esm/core/sceneGraph/sceneGraph.js +1 -26
  17. package/dist/esm/core/sceneGraph/sceneGraph.js.map +1 -1
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/esm/querying/SceneQueryRunner.js +1 -3
  20. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  21. package/dist/esm/querying/registerQueryWithController.js +19 -2
  22. package/dist/esm/querying/registerQueryWithController.js.map +1 -1
  23. package/dist/esm/utils/getDataSource.js +17 -1
  24. package/dist/esm/utils/getDataSource.js.map +1 -1
  25. package/dist/esm/variables/adhoc/AdHocFilterRenderer.js +12 -8
  26. package/dist/esm/variables/adhoc/AdHocFilterRenderer.js.map +1 -1
  27. package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +1 -4
  28. package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
  29. package/dist/esm/variables/components/VariableValueSelect.js +5 -0
  30. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  31. package/dist/esm/variables/utils.js.map +1 -1
  32. package/dist/esm/variables/variants/MultiValueVariable.js.map +1 -1
  33. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  34. package/dist/index.d.ts +44 -32
  35. package/dist/index.js +479 -230
  36. package/dist/index.js.map +1 -1
  37. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -41,19 +41,19 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
41
41
  var uFuzzy__default = /*#__PURE__*/_interopDefaultLegacy(uFuzzy);
42
42
  var ReactGridLayout__default = /*#__PURE__*/_interopDefaultLegacy(ReactGridLayout);
43
43
 
44
- var __defProp$O = Object.defineProperty;
45
- var __getOwnPropSymbols$O = Object.getOwnPropertySymbols;
46
- var __hasOwnProp$O = Object.prototype.hasOwnProperty;
47
- var __propIsEnum$O = Object.prototype.propertyIsEnumerable;
48
- var __defNormalProp$O = (obj, key, value) => key in obj ? __defProp$O(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
49
- var __spreadValues$O = (a, b) => {
44
+ var __defProp$P = Object.defineProperty;
45
+ var __getOwnPropSymbols$P = Object.getOwnPropertySymbols;
46
+ var __hasOwnProp$P = Object.prototype.hasOwnProperty;
47
+ var __propIsEnum$P = Object.prototype.propertyIsEnumerable;
48
+ var __defNormalProp$P = (obj, key, value) => key in obj ? __defProp$P(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
49
+ var __spreadValues$P = (a, b) => {
50
50
  for (var prop in b || (b = {}))
51
- if (__hasOwnProp$O.call(b, prop))
52
- __defNormalProp$O(a, prop, b[prop]);
53
- if (__getOwnPropSymbols$O)
54
- for (var prop of __getOwnPropSymbols$O(b)) {
55
- if (__propIsEnum$O.call(b, prop))
56
- __defNormalProp$O(a, prop, b[prop]);
51
+ if (__hasOwnProp$P.call(b, prop))
52
+ __defNormalProp$P(a, prop, b[prop]);
53
+ if (__getOwnPropSymbols$P)
54
+ for (var prop of __getOwnPropSymbols$P(b)) {
55
+ if (__propIsEnum$P.call(b, prop))
56
+ __defNormalProp$P(a, prop, b[prop]);
57
57
  }
58
58
  return a;
59
59
  };
@@ -62,7 +62,7 @@ function useAppQueryParams() {
62
62
  return runtime.locationSearchToObject(location.search || "");
63
63
  }
64
64
  function getUrlWithAppState(path, searchObject, preserveParams) {
65
- const paramsCopy = __spreadValues$O({}, searchObject);
65
+ const paramsCopy = __spreadValues$P({}, searchObject);
66
66
  if (preserveParams) {
67
67
  for (const key of Object.keys(paramsCopy)) {
68
68
  if (!preserveParams.includes(key)) {
@@ -76,31 +76,31 @@ function renderSceneComponentWithRouteProps(sceneObject, routeProps) {
76
76
  return React__default["default"].createElement(sceneObject.Component, { model: sceneObject, routeProps });
77
77
  }
78
78
 
79
- var __defProp$N = Object.defineProperty;
80
- var __defProps$v = Object.defineProperties;
81
- var __getOwnPropDescs$v = Object.getOwnPropertyDescriptors;
82
- var __getOwnPropSymbols$N = Object.getOwnPropertySymbols;
83
- var __hasOwnProp$N = Object.prototype.hasOwnProperty;
84
- var __propIsEnum$N = Object.prototype.propertyIsEnumerable;
85
- var __defNormalProp$N = (obj, key, value) => key in obj ? __defProp$N(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
86
- var __spreadValues$N = (a, b) => {
79
+ var __defProp$O = Object.defineProperty;
80
+ var __defProps$w = Object.defineProperties;
81
+ var __getOwnPropDescs$w = Object.getOwnPropertyDescriptors;
82
+ var __getOwnPropSymbols$O = Object.getOwnPropertySymbols;
83
+ var __hasOwnProp$O = Object.prototype.hasOwnProperty;
84
+ var __propIsEnum$O = Object.prototype.propertyIsEnumerable;
85
+ var __defNormalProp$O = (obj, key, value) => key in obj ? __defProp$O(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
86
+ var __spreadValues$O = (a, b) => {
87
87
  for (var prop in b || (b = {}))
88
- if (__hasOwnProp$N.call(b, prop))
89
- __defNormalProp$N(a, prop, b[prop]);
90
- if (__getOwnPropSymbols$N)
91
- for (var prop of __getOwnPropSymbols$N(b)) {
92
- if (__propIsEnum$N.call(b, prop))
93
- __defNormalProp$N(a, prop, b[prop]);
88
+ if (__hasOwnProp$O.call(b, prop))
89
+ __defNormalProp$O(a, prop, b[prop]);
90
+ if (__getOwnPropSymbols$O)
91
+ for (var prop of __getOwnPropSymbols$O(b)) {
92
+ if (__propIsEnum$O.call(b, prop))
93
+ __defNormalProp$O(a, prop, b[prop]);
94
94
  }
95
95
  return a;
96
96
  };
97
- var __spreadProps$v = (a, b) => __defProps$v(a, __getOwnPropDescs$v(b));
97
+ var __spreadProps$w = (a, b) => __defProps$w(a, __getOwnPropDescs$w(b));
98
98
  const runtimePanelPlugins = /* @__PURE__ */ new Map();
99
99
  function registerRuntimePanelPlugin({ pluginId, plugin }) {
100
100
  if (runtimePanelPlugins.has(pluginId)) {
101
101
  throw new Error(`A runtime panel plugin with id ${pluginId} has already been registered`);
102
102
  }
103
- plugin.meta = __spreadProps$v(__spreadValues$N({}, plugin.meta), {
103
+ plugin.meta = __spreadProps$w(__spreadValues$O({}, plugin.meta), {
104
104
  id: pluginId,
105
105
  name: pluginId,
106
106
  module: "runtime plugin",
@@ -128,33 +128,33 @@ function loadPanelPluginSync(pluginId) {
128
128
  return (_a = getPanelPluginFromCache(pluginId)) != null ? _a : runtimePanelPlugins.get(pluginId);
129
129
  }
130
130
 
131
- var __defProp$M = Object.defineProperty;
132
- var __defProps$u = Object.defineProperties;
133
- var __getOwnPropDescs$u = Object.getOwnPropertyDescriptors;
134
- var __getOwnPropSymbols$M = Object.getOwnPropertySymbols;
135
- var __hasOwnProp$M = Object.prototype.hasOwnProperty;
136
- var __propIsEnum$M = Object.prototype.propertyIsEnumerable;
137
- var __defNormalProp$M = (obj, key, value) => key in obj ? __defProp$M(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
138
- var __spreadValues$M = (a, b) => {
131
+ var __defProp$N = Object.defineProperty;
132
+ var __defProps$v = Object.defineProperties;
133
+ var __getOwnPropDescs$v = Object.getOwnPropertyDescriptors;
134
+ var __getOwnPropSymbols$N = Object.getOwnPropertySymbols;
135
+ var __hasOwnProp$N = Object.prototype.hasOwnProperty;
136
+ var __propIsEnum$N = Object.prototype.propertyIsEnumerable;
137
+ var __defNormalProp$N = (obj, key, value) => key in obj ? __defProp$N(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
138
+ var __spreadValues$N = (a, b) => {
139
139
  for (var prop in b || (b = {}))
140
- if (__hasOwnProp$M.call(b, prop))
141
- __defNormalProp$M(a, prop, b[prop]);
142
- if (__getOwnPropSymbols$M)
143
- for (var prop of __getOwnPropSymbols$M(b)) {
144
- if (__propIsEnum$M.call(b, prop))
145
- __defNormalProp$M(a, prop, b[prop]);
140
+ if (__hasOwnProp$N.call(b, prop))
141
+ __defNormalProp$N(a, prop, b[prop]);
142
+ if (__getOwnPropSymbols$N)
143
+ for (var prop of __getOwnPropSymbols$N(b)) {
144
+ if (__propIsEnum$N.call(b, prop))
145
+ __defNormalProp$N(a, prop, b[prop]);
146
146
  }
147
147
  return a;
148
148
  };
149
- var __spreadProps$u = (a, b) => __defProps$u(a, __getOwnPropDescs$u(b));
149
+ var __spreadProps$v = (a, b) => __defProps$v(a, __getOwnPropDescs$v(b));
150
150
  var __objRest$5 = (source, exclude) => {
151
151
  var target = {};
152
152
  for (var prop in source)
153
- if (__hasOwnProp$M.call(source, prop) && exclude.indexOf(prop) < 0)
153
+ if (__hasOwnProp$N.call(source, prop) && exclude.indexOf(prop) < 0)
154
154
  target[prop] = source[prop];
155
- if (source != null && __getOwnPropSymbols$M)
156
- for (var prop of __getOwnPropSymbols$M(source)) {
157
- if (exclude.indexOf(prop) < 0 && __propIsEnum$M.call(source, prop))
155
+ if (source != null && __getOwnPropSymbols$N)
156
+ for (var prop of __getOwnPropSymbols$N(source)) {
157
+ if (exclude.indexOf(prop) < 0 && __propIsEnum$N.call(source, prop))
158
158
  target[prop] = source[prop];
159
159
  }
160
160
  return target;
@@ -172,7 +172,7 @@ function SceneComponentWrapperWithoutMemo(_a) {
172
172
  if (!model.isActive) {
173
173
  return null;
174
174
  }
175
- return /* @__PURE__ */ React__default["default"].createElement(Component, __spreadProps$u(__spreadValues$M({}, otherProps), {
175
+ return /* @__PURE__ */ React__default["default"].createElement(Component, __spreadProps$v(__spreadValues$N({}, otherProps), {
176
176
  model
177
177
  }));
178
178
  }
@@ -188,49 +188,49 @@ class UserActionEvent extends data.BusEventWithPayload {
188
188
  }
189
189
  UserActionEvent.type = "scene-object-user-action";
190
190
 
191
- var __accessCheck$3 = (obj, member, msg) => {
191
+ var __accessCheck$4 = (obj, member, msg) => {
192
192
  if (!member.has(obj))
193
193
  throw TypeError("Cannot " + msg);
194
194
  };
195
- var __privateGet$3 = (obj, member, getter) => {
196
- __accessCheck$3(obj, member, "read from private field");
195
+ var __privateGet$4 = (obj, member, getter) => {
196
+ __accessCheck$4(obj, member, "read from private field");
197
197
  return getter ? getter.call(obj) : member.get(obj);
198
198
  };
199
- var __privateAdd$3 = (obj, member, value) => {
199
+ var __privateAdd$4 = (obj, member, value) => {
200
200
  if (member.has(obj))
201
201
  throw TypeError("Cannot add the same private member more than once");
202
202
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
203
203
  };
204
- var __privateSet$2 = (obj, member, value, setter) => {
205
- __accessCheck$3(obj, member, "write to private field");
204
+ var __privateSet$4 = (obj, member, value, setter) => {
205
+ __accessCheck$4(obj, member, "write to private field");
206
206
  setter ? setter.call(obj, value) : member.set(obj, value);
207
207
  return value;
208
208
  };
209
209
  var _ref;
210
210
  class SceneObjectRef {
211
211
  constructor(ref) {
212
- __privateAdd$3(this, _ref, void 0);
213
- __privateSet$2(this, _ref, ref);
212
+ __privateAdd$4(this, _ref, void 0);
213
+ __privateSet$4(this, _ref, ref);
214
214
  }
215
215
  resolve() {
216
- return __privateGet$3(this, _ref);
216
+ return __privateGet$4(this, _ref);
217
217
  }
218
218
  }
219
219
  _ref = new WeakMap();
220
220
 
221
- var __defProp$L = Object.defineProperty;
222
- var __getOwnPropSymbols$L = Object.getOwnPropertySymbols;
223
- var __hasOwnProp$L = Object.prototype.hasOwnProperty;
224
- var __propIsEnum$L = Object.prototype.propertyIsEnumerable;
225
- var __defNormalProp$L = (obj, key, value) => key in obj ? __defProp$L(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
226
- var __spreadValues$L = (a, b) => {
221
+ var __defProp$M = Object.defineProperty;
222
+ var __getOwnPropSymbols$M = Object.getOwnPropertySymbols;
223
+ var __hasOwnProp$M = Object.prototype.hasOwnProperty;
224
+ var __propIsEnum$M = Object.prototype.propertyIsEnumerable;
225
+ var __defNormalProp$M = (obj, key, value) => key in obj ? __defProp$M(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
226
+ var __spreadValues$M = (a, b) => {
227
227
  for (var prop in b || (b = {}))
228
- if (__hasOwnProp$L.call(b, prop))
229
- __defNormalProp$L(a, prop, b[prop]);
230
- if (__getOwnPropSymbols$L)
231
- for (var prop of __getOwnPropSymbols$L(b)) {
232
- if (__propIsEnum$L.call(b, prop))
233
- __defNormalProp$L(a, prop, b[prop]);
228
+ if (__hasOwnProp$M.call(b, prop))
229
+ __defNormalProp$M(a, prop, b[prop]);
230
+ if (__getOwnPropSymbols$M)
231
+ for (var prop of __getOwnPropSymbols$M(b)) {
232
+ if (__propIsEnum$M.call(b, prop))
233
+ __defNormalProp$M(a, prop, b[prop]);
234
234
  }
235
235
  return a;
236
236
  };
@@ -293,7 +293,7 @@ class SceneObjectBase {
293
293
  }
294
294
  setState(update) {
295
295
  const prevState = this._state;
296
- const newState = __spreadValues$L(__spreadValues$L({}, this._state), update);
296
+ const newState = __spreadValues$M(__spreadValues$M({}, this._state), update);
297
297
  this._state = Object.freeze(newState);
298
298
  this._setParent(update);
299
299
  this._handleActivationOfChangedStateProps(prevState, newState);
@@ -489,19 +489,19 @@ function forEachChild(state, callback) {
489
489
  }
490
490
  }
491
491
 
492
- var __defProp$K = Object.defineProperty;
493
- var __getOwnPropSymbols$K = Object.getOwnPropertySymbols;
494
- var __hasOwnProp$K = Object.prototype.hasOwnProperty;
495
- var __propIsEnum$K = Object.prototype.propertyIsEnumerable;
496
- var __defNormalProp$K = (obj, key, value) => key in obj ? __defProp$K(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
497
- var __spreadValues$K = (a, b) => {
492
+ var __defProp$L = Object.defineProperty;
493
+ var __getOwnPropSymbols$L = Object.getOwnPropertySymbols;
494
+ var __hasOwnProp$L = Object.prototype.hasOwnProperty;
495
+ var __propIsEnum$L = Object.prototype.propertyIsEnumerable;
496
+ var __defNormalProp$L = (obj, key, value) => key in obj ? __defProp$L(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
497
+ var __spreadValues$L = (a, b) => {
498
498
  for (var prop in b || (b = {}))
499
- if (__hasOwnProp$K.call(b, prop))
500
- __defNormalProp$K(a, prop, b[prop]);
501
- if (__getOwnPropSymbols$K)
502
- for (var prop of __getOwnPropSymbols$K(b)) {
503
- if (__propIsEnum$K.call(b, prop))
504
- __defNormalProp$K(a, prop, b[prop]);
499
+ if (__hasOwnProp$L.call(b, prop))
500
+ __defNormalProp$L(a, prop, b[prop]);
501
+ if (__getOwnPropSymbols$L)
502
+ for (var prop of __getOwnPropSymbols$L(b)) {
503
+ if (__propIsEnum$L.call(b, prop))
504
+ __defNormalProp$L(a, prop, b[prop]);
505
505
  }
506
506
  return a;
507
507
  };
@@ -510,7 +510,7 @@ function cloneSceneObject(sceneObject, withState) {
510
510
  return new sceneObject.constructor(clonedState);
511
511
  }
512
512
  function cloneSceneObjectState(sceneState, withState) {
513
- const clonedState = __spreadValues$K({}, sceneState);
513
+ const clonedState = __spreadValues$L({}, sceneState);
514
514
  Object.assign(clonedState, withState);
515
515
  for (const key in clonedState) {
516
516
  if (withState && withState[key] !== void 0) {
@@ -611,6 +611,305 @@ function lookupVariable(name, sceneObject) {
611
611
  return null;
612
612
  }
613
613
 
614
+ function writeSceneLog(logger, message, ...rest) {
615
+ let loggingEnabled = false;
616
+ if (typeof window !== "undefined") {
617
+ loggingEnabled = localStorage.getItem("grafana.debug.scenes") === "true";
618
+ }
619
+ if (loggingEnabled) {
620
+ console.log(`${logger}: `, message, ...rest);
621
+ }
622
+ }
623
+
624
+ var __accessCheck$3 = (obj, member, msg) => {
625
+ if (!member.has(obj))
626
+ throw TypeError("Cannot " + msg);
627
+ };
628
+ var __privateGet$3 = (obj, member, getter) => {
629
+ __accessCheck$3(obj, member, "read from private field");
630
+ return getter ? getter.call(obj) : member.get(obj);
631
+ };
632
+ var __privateAdd$3 = (obj, member, value) => {
633
+ if (member.has(obj))
634
+ throw TypeError("Cannot add the same private member more than once");
635
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
636
+ };
637
+ var __privateSet$3 = (obj, member, value, setter) => {
638
+ __accessCheck$3(obj, member, "write to private field");
639
+ setter ? setter.call(obj, value) : member.set(obj, value);
640
+ return value;
641
+ };
642
+ var _profileInProgress, _profileStartTs, _trailAnimationFrameId, _recordedTrailingSpans;
643
+ const POST_STORM_WINDOW = 2e3;
644
+ const SPAN_THRESHOLD = 30;
645
+ class SceneRenderProfiler {
646
+ constructor(queryController) {
647
+ this.queryController = queryController;
648
+ __privateAdd$3(this, _profileInProgress, null);
649
+ __privateAdd$3(this, _profileStartTs, null);
650
+ __privateAdd$3(this, _trailAnimationFrameId, null);
651
+ __privateAdd$3(this, _recordedTrailingSpans, []);
652
+ this.lastFrameTime = 0;
653
+ this.measureTrailingFrames = (measurementStartTs, lastFrameTime, profileStartTs) => {
654
+ const currentFrameTime = performance.now();
655
+ const frameLength = currentFrameTime - lastFrameTime;
656
+ __privateGet$3(this, _recordedTrailingSpans).push(frameLength);
657
+ if (currentFrameTime - measurementStartTs < POST_STORM_WINDOW) {
658
+ __privateSet$3(this, _trailAnimationFrameId, requestAnimationFrame(
659
+ () => this.measureTrailingFrames(measurementStartTs, currentFrameTime, profileStartTs)
660
+ ));
661
+ } else {
662
+ const slowFrames = processRecordedSpans(__privateGet$3(this, _recordedTrailingSpans));
663
+ const slowFramesTime = slowFrames.reduce((acc, val) => acc + val, 0);
664
+ writeSceneLog(
665
+ this.constructor.name,
666
+ "Profile tail recorded, slow frames duration:",
667
+ slowFramesTime,
668
+ slowFrames,
669
+ __privateGet$3(this, _profileInProgress)
670
+ );
671
+ __privateSet$3(this, _recordedTrailingSpans, []);
672
+ const profileDuration = measurementStartTs - profileStartTs;
673
+ writeSceneLog(
674
+ this.constructor.name,
675
+ "Stoped recording, total measured time (network included):",
676
+ profileDuration + slowFramesTime
677
+ );
678
+ __privateSet$3(this, _trailAnimationFrameId, null);
679
+ const profileEndTs = profileStartTs + profileDuration + slowFramesTime;
680
+ performance.measure("DashboardInteraction", {
681
+ start: profileStartTs,
682
+ end: profileEndTs
683
+ });
684
+ const networkDuration = captureNetwork(profileStartTs, profileEndTs);
685
+ if (this.queryController.state.onProfileComplete) {
686
+ this.queryController.state.onProfileComplete({
687
+ origin: __privateGet$3(this, _profileInProgress).origin,
688
+ crumbs: __privateGet$3(this, _profileInProgress).crumbs,
689
+ duration: profileDuration + slowFramesTime,
690
+ networkDuration,
691
+ jsHeapSizeLimit: performance.memory ? performance.memory.jsHeapSizeLimit : 0,
692
+ usedJSHeapSize: performance.memory ? performance.memory.usedJSHeapSize : 0,
693
+ totalJSHeapSize: performance.memory ? performance.memory.totalJSHeapSize : 0
694
+ });
695
+ }
696
+ if (window.__runs) {
697
+ window.__runs += `${Date.now()}, ${profileDuration + slowFramesTime}
698
+ `;
699
+ } else {
700
+ window.__runs = `${Date.now()}, ${profileDuration + slowFramesTime}
701
+ `;
702
+ }
703
+ }
704
+ };
705
+ }
706
+ startProfile(name) {
707
+ if (__privateGet$3(this, _trailAnimationFrameId)) {
708
+ cancelAnimationFrame(__privateGet$3(this, _trailAnimationFrameId));
709
+ __privateSet$3(this, _trailAnimationFrameId, null);
710
+ writeSceneLog(this.constructor.name, "New profile: Stopped recording frames");
711
+ }
712
+ __privateSet$3(this, _profileInProgress, { origin: name, crumbs: [] });
713
+ __privateSet$3(this, _profileStartTs, performance.now());
714
+ writeSceneLog(this.constructor.name, "Profile started:", __privateGet$3(this, _profileInProgress), __privateGet$3(this, _profileStartTs));
715
+ }
716
+ recordProfileTail(measurementStartTime, profileStartTs) {
717
+ __privateSet$3(this, _trailAnimationFrameId, requestAnimationFrame(
718
+ () => this.measureTrailingFrames(measurementStartTime, measurementStartTime, profileStartTs)
719
+ ));
720
+ }
721
+ tryCompletingProfile() {
722
+ writeSceneLog(this.constructor.name, "Trying to complete profile", __privateGet$3(this, _profileInProgress));
723
+ if (this.queryController.runningQueriesCount() === 0 && __privateGet$3(this, _profileInProgress)) {
724
+ writeSceneLog(this.constructor.name, "All queries completed, stopping profile");
725
+ this.recordProfileTail(performance.now(), __privateGet$3(this, _profileStartTs));
726
+ }
727
+ }
728
+ isTailRecording() {
729
+ return Boolean(__privateGet$3(this, _trailAnimationFrameId));
730
+ }
731
+ cancelTailRecording() {
732
+ if (__privateGet$3(this, _trailAnimationFrameId)) {
733
+ cancelAnimationFrame(__privateGet$3(this, _trailAnimationFrameId));
734
+ __privateSet$3(this, _trailAnimationFrameId, null);
735
+ writeSceneLog(this.constructor.name, "Cancelled recording frames, new profile started");
736
+ }
737
+ }
738
+ addCrumb(crumb) {
739
+ if (__privateGet$3(this, _profileInProgress)) {
740
+ __privateGet$3(this, _profileInProgress).crumbs.push(crumb);
741
+ }
742
+ }
743
+ }
744
+ _profileInProgress = new WeakMap();
745
+ _profileStartTs = new WeakMap();
746
+ _trailAnimationFrameId = new WeakMap();
747
+ _recordedTrailingSpans = new WeakMap();
748
+ function processRecordedSpans(spans) {
749
+ for (let i = spans.length - 1; i >= 0; i--) {
750
+ if (spans[i] > SPAN_THRESHOLD) {
751
+ return spans.slice(0, i + 1);
752
+ }
753
+ }
754
+ return [spans[0]];
755
+ }
756
+ function captureNetwork(startTs, endTs) {
757
+ const entries = performance.getEntriesByType("resource");
758
+ performance.clearResourceTimings();
759
+ const networkEntries = entries.filter((entry) => entry.startTime >= startTs && entry.startTime <= endTs);
760
+ for (const entry of networkEntries) {
761
+ performance.measure("Network entry " + entry.name, {
762
+ start: entry.startTime,
763
+ end: entry.responseEnd
764
+ });
765
+ }
766
+ return calculateNetworkTime(networkEntries);
767
+ }
768
+ function calculateNetworkTime(requests) {
769
+ if (requests.length === 0) {
770
+ return 0;
771
+ }
772
+ requests.sort((a, b) => a.startTime - b.startTime);
773
+ let totalNetworkTime = 0;
774
+ let currentStart = requests[0].startTime;
775
+ let currentEnd = requests[0].responseEnd;
776
+ for (let i = 1; i < requests.length; i++) {
777
+ if (requests[i].startTime <= currentEnd) {
778
+ currentEnd = Math.max(currentEnd, requests[i].responseEnd);
779
+ } else {
780
+ totalNetworkTime += currentEnd - currentStart;
781
+ currentStart = requests[i].startTime;
782
+ currentEnd = requests[i].responseEnd;
783
+ }
784
+ }
785
+ totalNetworkTime += currentEnd - currentStart;
786
+ return totalNetworkTime;
787
+ }
788
+
789
+ var __defProp$K = Object.defineProperty;
790
+ var __defProps$u = Object.defineProperties;
791
+ var __getOwnPropDescs$u = Object.getOwnPropertyDescriptors;
792
+ var __getOwnPropSymbols$K = Object.getOwnPropertySymbols;
793
+ var __hasOwnProp$K = Object.prototype.hasOwnProperty;
794
+ var __propIsEnum$K = Object.prototype.propertyIsEnumerable;
795
+ var __defNormalProp$K = (obj, key, value) => key in obj ? __defProp$K(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
796
+ var __spreadValues$K = (a, b) => {
797
+ for (var prop in b || (b = {}))
798
+ if (__hasOwnProp$K.call(b, prop))
799
+ __defNormalProp$K(a, prop, b[prop]);
800
+ if (__getOwnPropSymbols$K)
801
+ for (var prop of __getOwnPropSymbols$K(b)) {
802
+ if (__propIsEnum$K.call(b, prop))
803
+ __defNormalProp$K(a, prop, b[prop]);
804
+ }
805
+ return a;
806
+ };
807
+ var __spreadProps$u = (a, b) => __defProps$u(a, __getOwnPropDescs$u(b));
808
+ var __accessCheck$2 = (obj, member, msg) => {
809
+ if (!member.has(obj))
810
+ throw TypeError("Cannot " + msg);
811
+ };
812
+ var __privateGet$2 = (obj, member, getter) => {
813
+ __accessCheck$2(obj, member, "read from private field");
814
+ return getter ? getter.call(obj) : member.get(obj);
815
+ };
816
+ var __privateAdd$2 = (obj, member, value) => {
817
+ if (member.has(obj))
818
+ throw TypeError("Cannot add the same private member more than once");
819
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
820
+ };
821
+ var __privateSet$2 = (obj, member, value, setter) => {
822
+ __accessCheck$2(obj, member, "write to private field");
823
+ setter ? setter.call(obj, value) : member.set(obj, value);
824
+ return value;
825
+ };
826
+ var _running, _tryCompleteProfileFrameId;
827
+ function isQueryController(s) {
828
+ return "isQueryController" in s;
829
+ }
830
+ class SceneQueryController extends SceneObjectBase {
831
+ constructor(state = {}) {
832
+ super(__spreadProps$u(__spreadValues$K({}, state), { isRunning: false }));
833
+ this.isQueryController = true;
834
+ this.profiler = new SceneRenderProfiler(this);
835
+ __privateAdd$2(this, _running, /* @__PURE__ */ new Set());
836
+ __privateAdd$2(this, _tryCompleteProfileFrameId, null);
837
+ this.runningQueriesCount = () => {
838
+ return __privateGet$2(this, _running).size;
839
+ };
840
+ this.addActivationHandler(() => {
841
+ return () => __privateGet$2(this, _running).clear();
842
+ });
843
+ }
844
+ startProfile(source) {
845
+ if (!this.state.enableProfiling) {
846
+ return;
847
+ }
848
+ this.profiler.startProfile(source.constructor.name);
849
+ }
850
+ queryStarted(entry) {
851
+ __privateGet$2(this, _running).add(entry);
852
+ this.changeRunningQueryCount(1, entry);
853
+ if (!this.state.isRunning) {
854
+ this.setState({ isRunning: true });
855
+ }
856
+ }
857
+ queryCompleted(entry) {
858
+ if (!__privateGet$2(this, _running).has(entry)) {
859
+ return;
860
+ }
861
+ __privateGet$2(this, _running).delete(entry);
862
+ this.changeRunningQueryCount(-1);
863
+ if (__privateGet$2(this, _running).size === 0) {
864
+ this.setState({ isRunning: false });
865
+ }
866
+ }
867
+ changeRunningQueryCount(dir, entry) {
868
+ var _a;
869
+ window.__grafanaRunningQueryCount = ((_a = window.__grafanaRunningQueryCount) != null ? _a : 0) + dir;
870
+ if (dir === 1 && this.state.enableProfiling) {
871
+ if (entry) {
872
+ this.profiler.addCrumb(`${entry.origin.constructor.name}/${entry.type}`);
873
+ }
874
+ if (this.profiler.isTailRecording()) {
875
+ writeSceneLog(this.constructor.name, "New query started, cancelling tail recording");
876
+ this.profiler.cancelTailRecording();
877
+ }
878
+ }
879
+ if (this.state.enableProfiling) {
880
+ if (__privateGet$2(this, _tryCompleteProfileFrameId)) {
881
+ cancelAnimationFrame(__privateGet$2(this, _tryCompleteProfileFrameId));
882
+ }
883
+ __privateSet$2(this, _tryCompleteProfileFrameId, requestAnimationFrame(() => {
884
+ this.profiler.tryCompletingProfile();
885
+ }));
886
+ }
887
+ }
888
+ cancelAll() {
889
+ var _a;
890
+ for (const entry of __privateGet$2(this, _running).values()) {
891
+ (_a = entry.cancel) == null ? void 0 : _a.call(entry);
892
+ }
893
+ }
894
+ }
895
+ _running = new WeakMap();
896
+ _tryCompleteProfileFrameId = new WeakMap();
897
+
898
+ function getQueryController(sceneObject) {
899
+ let parent = sceneObject;
900
+ while (parent) {
901
+ if (parent.state.$behaviors) {
902
+ for (const behavior of parent.state.$behaviors) {
903
+ if (isQueryController(behavior)) {
904
+ return behavior;
905
+ }
906
+ }
907
+ }
908
+ parent = parent.parent;
909
+ }
910
+ return void 0;
911
+ }
912
+
614
913
  var __defProp$J = Object.defineProperty;
615
914
  var __getOwnPropSymbols$J = Object.getOwnPropertySymbols;
616
915
  var __hasOwnProp$J = Object.prototype.hasOwnProperty;
@@ -787,6 +1086,8 @@ class SceneTimeRange extends SceneObjectBase {
787
1086
  this.state.UNSAFE_nowDelay
788
1087
  );
789
1088
  if (update.from !== this.state.from || update.to !== this.state.to) {
1089
+ const queryController = getQueryController(this);
1090
+ queryController == null ? void 0 : queryController.startProfile(this);
790
1091
  this._urlSync.performBrowserHistoryAction(() => {
791
1092
  this.setState(update);
792
1093
  });
@@ -2131,70 +2432,56 @@ function isDataLayer(obj) {
2131
2432
  return "isDataLayer" in obj;
2132
2433
  }
2133
2434
 
2134
- var __accessCheck$2 = (obj, member, msg) => {
2135
- if (!member.has(obj))
2136
- throw TypeError("Cannot " + msg);
2137
- };
2138
- var __privateGet$2 = (obj, member, getter) => {
2139
- __accessCheck$2(obj, member, "read from private field");
2140
- return getter ? getter.call(obj) : member.get(obj);
2141
- };
2142
- var __privateAdd$2 = (obj, member, value) => {
2143
- if (member.has(obj))
2144
- throw TypeError("Cannot add the same private member more than once");
2145
- member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
2146
- };
2147
- var _running;
2148
- function isQueryController(s) {
2149
- return "isQueryController" in s;
2150
- }
2151
- class SceneQueryController extends SceneObjectBase {
2152
- constructor() {
2153
- super({ isRunning: false });
2154
- this.isQueryController = true;
2155
- __privateAdd$2(this, _running, /* @__PURE__ */ new Set());
2156
- this.addActivationHandler(() => {
2157
- return () => __privateGet$2(this, _running).clear();
2158
- });
2159
- }
2160
- queryStarted(entry) {
2161
- __privateGet$2(this, _running).add(entry);
2162
- this.changeRunningQueryCount(1);
2163
- if (!this.state.isRunning) {
2164
- this.setState({ isRunning: true });
2165
- }
2166
- }
2167
- queryCompleted(entry) {
2168
- if (!__privateGet$2(this, _running).has(entry)) {
2169
- return;
2170
- }
2171
- __privateGet$2(this, _running).delete(entry);
2172
- this.changeRunningQueryCount(-1);
2173
- if (__privateGet$2(this, _running).size === 0) {
2174
- this.setState({ isRunning: false });
2175
- }
2176
- }
2177
- changeRunningQueryCount(dir) {
2178
- var _a;
2179
- window.__grafanaRunningQueryCount = ((_a = window.__grafanaRunningQueryCount) != null ? _a : 0) + dir;
2180
- }
2181
- cancelAll() {
2182
- var _a;
2183
- for (const entry of __privateGet$2(this, _running).values()) {
2184
- (_a = entry.cancel) == null ? void 0 : _a.call(entry);
2435
+ function registerQueryWithController(entry) {
2436
+ return (queryStream) => {
2437
+ const queryControler = sceneGraph.getQueryController(entry.origin);
2438
+ if (!queryControler) {
2439
+ return queryStream;
2185
2440
  }
2186
- }
2441
+ return new rxjs.Observable((observer) => {
2442
+ if (!entry.cancel) {
2443
+ entry.cancel = () => observer.complete();
2444
+ }
2445
+ queryControler.queryStarted(entry);
2446
+ let markedAsCompleted = false;
2447
+ const sub = queryStream.subscribe({
2448
+ next: (v) => {
2449
+ if (!markedAsCompleted && v.state !== schema.LoadingState.Loading) {
2450
+ markedAsCompleted = true;
2451
+ queryControler.queryCompleted(entry);
2452
+ }
2453
+ observer.next(v);
2454
+ },
2455
+ error: (e) => observer.error(e),
2456
+ complete: () => {
2457
+ observer.complete();
2458
+ }
2459
+ });
2460
+ return () => {
2461
+ sub.unsubscribe();
2462
+ if (!markedAsCompleted) {
2463
+ queryControler.queryCompleted(entry);
2464
+ }
2465
+ };
2466
+ });
2467
+ };
2187
2468
  }
2188
- _running = new WeakMap();
2189
-
2190
- function writeSceneLog(logger, message, ...rest) {
2191
- let loggingEnabled = false;
2192
- if (typeof window !== "undefined") {
2193
- loggingEnabled = localStorage.getItem("grafana.debug.scenes") === "true";
2194
- }
2195
- if (loggingEnabled) {
2196
- console.log(`${logger}: `, message, ...rest);
2197
- }
2469
+ function wrapPromiseInStateObservable(promise) {
2470
+ console.log("wrapPromiseInStateObservable", promise);
2471
+ return new rxjs.Observable((observer) => {
2472
+ observer.next({ state: schema.LoadingState.Loading });
2473
+ const promiseObservable = rxjs.from(promise);
2474
+ promiseObservable.pipe(
2475
+ rxjs.map(() => ({ state: schema.LoadingState.Done })),
2476
+ rxjs.catchError(() => {
2477
+ observer.next({ state: schema.LoadingState.Error });
2478
+ return [];
2479
+ })
2480
+ ).subscribe({
2481
+ next: (result) => observer.next(result),
2482
+ complete: () => observer.complete()
2483
+ });
2484
+ });
2198
2485
  }
2199
2486
 
2200
2487
  async function getDataSource(datasource, scopedVars) {
@@ -2207,7 +2494,21 @@ async function getDataSource(datasource, scopedVars) {
2207
2494
  if (datasource && datasource.query) {
2208
2495
  return datasource;
2209
2496
  }
2210
- return await runtime.getDataSourceSrv().get(datasource, scopedVars);
2497
+ const dsPromise = runtime.getDataSourceSrv().get(datasource, scopedVars);
2498
+ if (scopedVars.__sceneObject && scopedVars.__sceneObject.value.valueOf()) {
2499
+ const queryControler = sceneGraph.getQueryController(scopedVars.__sceneObject.value.valueOf());
2500
+ if (queryControler && queryControler.state.enableProfiling) {
2501
+ wrapPromiseInStateObservable(dsPromise).pipe(
2502
+ registerQueryWithController({
2503
+ type: "plugin",
2504
+ origin: scopedVars.__sceneObject.value.valueOf()
2505
+ })
2506
+ ).subscribe(() => {
2507
+ });
2508
+ }
2509
+ }
2510
+ const result = await dsPromise;
2511
+ return result;
2211
2512
  }
2212
2513
 
2213
2514
  class VariableValueRecorder {
@@ -2455,41 +2756,6 @@ function findActiveAdHocFilterVariableByUid(dsUid) {
2455
2756
  return void 0;
2456
2757
  }
2457
2758
 
2458
- function registerQueryWithController(entry) {
2459
- return (queryStream) => {
2460
- const queryControler = sceneGraph.getQueryController(entry.origin);
2461
- if (!queryControler) {
2462
- return queryStream;
2463
- }
2464
- return new rxjs.Observable((observer) => {
2465
- if (!entry.cancel) {
2466
- entry.cancel = () => observer.complete();
2467
- }
2468
- queryControler.queryStarted(entry);
2469
- let markedAsCompleted = false;
2470
- const sub = queryStream.subscribe({
2471
- next: (v) => {
2472
- if (!markedAsCompleted && v.state !== schema.LoadingState.Loading) {
2473
- markedAsCompleted = true;
2474
- queryControler.queryCompleted(entry);
2475
- }
2476
- observer.next(v);
2477
- },
2478
- error: (e) => observer.error(e),
2479
- complete: () => {
2480
- observer.complete();
2481
- }
2482
- });
2483
- return () => {
2484
- sub.unsubscribe();
2485
- if (!markedAsCompleted) {
2486
- queryControler.queryCompleted(entry);
2487
- }
2488
- };
2489
- });
2490
- };
2491
- }
2492
-
2493
2759
  const allActiveGroupByVariables = /* @__PURE__ */ new Set();
2494
2760
  function findActiveGroupByVariablesByUid(dsUid) {
2495
2761
  var _a;
@@ -2598,6 +2864,7 @@ function VariableValueSelect({ model }) {
2598
2864
  const [inputValue, setInputValue] = React.useState("");
2599
2865
  const [hasCustomValue, setHasCustomValue] = React.useState(false);
2600
2866
  const selectValue = toSelectableValue$2(value, String(text));
2867
+ const queryController = sceneGraph.getQueryController(model);
2601
2868
  const optionSearcher = React.useMemo(() => getOptionSearcher(options, includeAll), [options, includeAll]);
2602
2869
  const onInputChange = (value2, { action }) => {
2603
2870
  if (action === "input-change") {
@@ -2637,6 +2904,7 @@ function VariableValueSelect({ model }) {
2637
2904
  "data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${value}`),
2638
2905
  onChange: (newValue) => {
2639
2906
  model.changeValueTo(newValue.value, newValue.label);
2907
+ queryController == null ? void 0 : queryController.startProfile(model);
2640
2908
  if (hasCustomValue !== newValue.__isNew__) {
2641
2909
  setHasCustomValue(newValue.__isNew__);
2642
2910
  }
@@ -2648,6 +2916,7 @@ function VariableValueSelectMulti({ model }) {
2648
2916
  const arrayValue = React.useMemo(() => lodash.isArray(value) ? value : [value], [value]);
2649
2917
  const [uncommittedValue, setUncommittedValue] = React.useState(arrayValue);
2650
2918
  const [inputValue, setInputValue] = React.useState("");
2919
+ const queryController = sceneGraph.getQueryController(model);
2651
2920
  const optionSearcher = React.useMemo(() => getOptionSearcher(options, includeAll), [options, includeAll]);
2652
2921
  React.useEffect(() => {
2653
2922
  setUncommittedValue(arrayValue);
@@ -2693,6 +2962,7 @@ function VariableValueSelectMulti({ model }) {
2693
2962
  onInputChange,
2694
2963
  onBlur: () => {
2695
2964
  model.changeValueTo(uncommittedValue);
2965
+ queryController == null ? void 0 : queryController.startProfile(model);
2696
2966
  },
2697
2967
  filterOption: filterNoOp$2,
2698
2968
  "data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${uncommittedValue}`),
@@ -3305,10 +3575,12 @@ function AdHocFilterRenderer({ filter, model }) {
3305
3575
  const [isOperatorOpen, setIsOperatorOpen] = React.useState(false);
3306
3576
  const [valueInputValue, setValueInputValue] = React.useState("");
3307
3577
  const [valueHasCustomValue, setValueHasCustomValue] = React.useState(false);
3308
- const [uncommittedValue, setUncommittedValue] = React.useState(filter.values ? filter.values.map((value, index) => {
3309
- var _a2;
3310
- return keyLabelToOption(value, (_a2 = filter.valueLabels) == null ? void 0 : _a2[index]);
3311
- }) : []);
3578
+ const [uncommittedValue, setUncommittedValue] = React.useState(
3579
+ filter.values ? filter.values.map((value, index) => {
3580
+ var _a2;
3581
+ return keyLabelToOption(value, (_a2 = filter.valueLabels) == null ? void 0 : _a2[index]);
3582
+ }) : []
3583
+ );
3312
3584
  const isMultiValue = isMultiValueOperator(filter.operator);
3313
3585
  const keyValue = keyLabelToOption(filter.key, filter.keyLabel);
3314
3586
  const valueValue = keyLabelToOption(filter.value, (_a = filter.valueLabels) == null ? void 0 : _a[0]);
@@ -3331,10 +3603,12 @@ function AdHocFilterRenderer({ filter, model }) {
3331
3603
  setUncommittedValue([]);
3332
3604
  } else if (!isMultiValueOperator(existingOperator) && isMultiValueOperator(newOperator) && filter.value) {
3333
3605
  update.values = [filter.value];
3334
- setUncommittedValue([{
3335
- value: filter.value,
3336
- label: (_b2 = (_a2 = filter.valueLabels) == null ? void 0 : _a2[0]) != null ? _b2 : filter.value
3337
- }]);
3606
+ setUncommittedValue([
3607
+ {
3608
+ value: filter.value,
3609
+ label: (_b2 = (_a2 = filter.valueLabels) == null ? void 0 : _a2[0]) != null ? _b2 : filter.value
3610
+ }
3611
+ ]);
3338
3612
  }
3339
3613
  model._updateFilter(filter, update);
3340
3614
  };
@@ -3613,10 +3887,7 @@ function deserializeUrlToFilters(value) {
3613
3887
  }
3614
3888
  function toArray(filter) {
3615
3889
  var _a;
3616
- const result = [
3617
- toUrlCommaDelimitedString(filter.key, filter.keyLabel),
3618
- filter.operator
3619
- ];
3890
+ const result = [toUrlCommaDelimitedString(filter.key, filter.keyLabel), filter.operator];
3620
3891
  if (isMultiValueOperator(filter.operator)) {
3621
3892
  filter.values.forEach((value, index) => {
3622
3893
  var _a2;
@@ -5223,9 +5494,7 @@ class SceneQueryRunner extends SceneObjectBase {
5223
5494
  })
5224
5495
  );
5225
5496
  }
5226
- this.subscribeToTimeRangeChanges(
5227
- timeRange
5228
- );
5497
+ this.subscribeToTimeRangeChanges(timeRange);
5229
5498
  if (this.shouldRunQueriesOnActivate()) {
5230
5499
  this.runQueries();
5231
5500
  }
@@ -6477,30 +6746,6 @@ function findDescendents(scene, descendentType) {
6477
6746
  const targetScenes = findAllObjects(scene, isDescendentType);
6478
6747
  return targetScenes.filter(isDescendentType);
6479
6748
  }
6480
- function getQueryController(sceneObject) {
6481
- let parent = sceneObject;
6482
- while (parent) {
6483
- if (parent.state.$behaviors) {
6484
- for (const behavior of parent.state.$behaviors) {
6485
- if (isQueryController(behavior)) {
6486
- return behavior;
6487
- }
6488
- }
6489
- }
6490
- parent = parent.parent;
6491
- }
6492
- return void 0;
6493
- }
6494
- function getUrlSyncManager(sceneObject) {
6495
- let parent = sceneObject;
6496
- while (parent) {
6497
- if ("urlSyncManager" in parent.state) {
6498
- return parent.state.urlSyncManager;
6499
- }
6500
- parent = parent.parent;
6501
- }
6502
- return void 0;
6503
- }
6504
6749
 
6505
6750
  const sceneGraph = {
6506
6751
  getVariables,
@@ -6516,9 +6761,8 @@ const sceneGraph = {
6516
6761
  findObject,
6517
6762
  findAllObjects,
6518
6763
  getAncestor,
6519
- findDescendents,
6520
6764
  getQueryController,
6521
- getUrlSyncManager
6765
+ findDescendents
6522
6766
  };
6523
6767
 
6524
6768
  class UniqueUrlKeyMapper {
@@ -7390,7 +7634,13 @@ class VizPanel extends SceneObjectBase {
7390
7634
  } else {
7391
7635
  const { importPanelPlugin } = runtime.getPluginImportUtils();
7392
7636
  try {
7393
- const result = await importPanelPlugin(pluginId);
7637
+ const panelPromise = importPanelPlugin(pluginId);
7638
+ const queryControler = sceneGraph.getQueryController(this);
7639
+ if (queryControler && queryControler.state.enableProfiling) {
7640
+ wrapPromiseInStateObservable(panelPromise).pipe(registerQueryWithController({ type: "plugin", origin: this })).subscribe(() => {
7641
+ });
7642
+ }
7643
+ const result = await panelPromise;
7394
7644
  this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);
7395
7645
  } catch (err) {
7396
7646
  this._pluginLoaded(getPanelPluginNotFound(pluginId));
@@ -7459,11 +7709,7 @@ class VizPanel extends SceneObjectBase {
7459
7709
  }
7460
7710
  async changePluginType(pluginId, newOptions, newFieldConfig) {
7461
7711
  var _a, _b;
7462
- const {
7463
- options: prevOptions,
7464
- fieldConfig: prevFieldConfig,
7465
- pluginId: prevPluginId
7466
- } = this.state;
7712
+ const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;
7467
7713
  this._dataWithFieldConfig = void 0;
7468
7714
  const isAfterPluginChange = this.state.pluginId !== pluginId;
7469
7715
  await this._loadPlugin(pluginId, newOptions != null ? newOptions : {}, newFieldConfig, isAfterPluginChange);
@@ -10937,6 +11183,7 @@ class SceneRefreshPicker extends SceneObjectBase {
10937
11183
  this._autoRefreshBlocked = false;
10938
11184
  this.onRefresh = () => {
10939
11185
  const queryController = sceneGraph.getQueryController(this);
11186
+ queryController == null ? void 0 : queryController.startProfile(this);
10940
11187
  if (queryController == null ? void 0 : queryController.state.isRunning) {
10941
11188
  queryController.cancelAll();
10942
11189
  return;
@@ -11065,7 +11312,9 @@ function SceneRefreshPickerRenderer({ model }) {
11065
11312
  tooltip,
11066
11313
  width,
11067
11314
  text,
11068
- onRefresh: model.onRefresh,
11315
+ onRefresh: () => {
11316
+ model.onRefresh();
11317
+ },
11069
11318
  primary,
11070
11319
  onIntervalChanged: model.onIntervalChanged,
11071
11320
  isLoading: isRunning,