@grafana/scenes 6.35.0--canary.1240.17499066940.0 → 6.35.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.
- package/CHANGELOG.md +26 -0
- package/dist/esm/behaviors/index.js +0 -1
- package/dist/esm/behaviors/index.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridLayout.js +14 -0
- package/dist/esm/components/layout/grid/SceneGridLayout.js.map +1 -1
- package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +8 -9
- package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js.map +1 -1
- package/dist/esm/core/sceneGraph/index.js +0 -2
- package/dist/esm/core/sceneGraph/index.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/locales/cs-CZ/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/cs-CZ/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/de-DE/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/de-DE/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/es-ES/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/es-ES/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/fr-FR/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/fr-FR/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/hu-HU/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/hu-HU/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/id-ID/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/id-ID/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/it-IT/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/it-IT/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/ja-JP/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/ja-JP/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/ko-KR/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/ko-KR/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/nl-NL/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/nl-NL/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/pl-PL/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/pl-PL/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/pt-BR/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/pt-BR/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/pt-PT/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/pt-PT/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/ru-RU/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/ru-RU/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/sv-SE/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/sv-SE/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/tr-TR/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/tr-TR/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/zh-Hans/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/zh-Hans/grafana-scenes.json.js.map +1 -1
- package/dist/esm/locales/zh-Hant/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/zh-Hant/grafana-scenes.json.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +0 -9
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
- package/dist/esm/variables/groupby/GroupByVariable.js +0 -8
- package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
- package/dist/{grafana-scenes-CgIzGE5F.js → grafana-scenes-BbJq3cEa.js} +5 -1
- package/dist/{grafana-scenes-B0JDDOYY.js.map → grafana-scenes-BbJq3cEa.js.map} +1 -1
- package/dist/{grafana-scenes-B3ypGD5T.js → grafana-scenes-BbRDYrqK.js} +5 -1
- package/dist/{grafana-scenes-B3ypGD5T.js.map → grafana-scenes-BbRDYrqK.js.map} +1 -1
- package/dist/{grafana-scenes-CY85TD5F.js → grafana-scenes-BcDO8gk4.js} +5 -1
- package/dist/{grafana-scenes-BGCbMCFm.js.map → grafana-scenes-BcDO8gk4.js.map} +1 -1
- package/dist/{grafana-scenes-CqRf9pRc.js → grafana-scenes-BtGEpoZT.js} +5 -1
- package/dist/{grafana-scenes-Br6NPcwR.js.map → grafana-scenes-BtGEpoZT.js.map} +1 -1
- package/dist/{grafana-scenes-Br6NPcwR.js → grafana-scenes-BwQ_A3lk.js} +5 -1
- package/dist/grafana-scenes-BwQ_A3lk.js.map +1 -0
- package/dist/{grafana-scenes-B0JDDOYY.js → grafana-scenes-C-CibbsO.js} +5 -1
- package/dist/grafana-scenes-C-CibbsO.js.map +1 -0
- package/dist/{grafana-scenes-Dy2CLUY9.js → grafana-scenes-CMtHJ23j.js} +5 -1
- package/dist/grafana-scenes-CMtHJ23j.js.map +1 -0
- package/dist/{grafana-scenes-DObtL2WT.js → grafana-scenes-CS09sc_L.js} +5 -1
- package/dist/grafana-scenes-CS09sc_L.js.map +1 -0
- package/dist/{grafana-scenes-DXM1LI4B.js → grafana-scenes-CfoPR_PZ.js} +5 -1
- package/dist/grafana-scenes-CfoPR_PZ.js.map +1 -0
- package/dist/{grafana-scenes-Cub9Gl0n.js → grafana-scenes-CixWq8rH.js} +5 -1
- package/dist/grafana-scenes-CixWq8rH.js.map +1 -0
- package/dist/{grafana-scenes-DlUSL8jI.js → grafana-scenes-CoXR5Z7T.js} +5 -1
- package/dist/grafana-scenes-CoXR5Z7T.js.map +1 -0
- package/dist/{grafana-scenes-CeVkPanY.js → grafana-scenes-CqMfWT-f.js} +5 -1
- package/dist/grafana-scenes-CqMfWT-f.js.map +1 -0
- package/dist/{grafana-scenes-n10eQkNF.js → grafana-scenes-CzZTvOrf.js} +5 -1
- package/dist/grafana-scenes-CzZTvOrf.js.map +1 -0
- package/dist/{grafana-scenes-BGCbMCFm.js → grafana-scenes-VOzZRdKp.js} +5 -1
- package/dist/grafana-scenes-VOzZRdKp.js.map +1 -0
- package/dist/{grafana-scenes-CBRfJ-2H.js → grafana-scenes-cTJt4LR7.js} +5 -1
- package/dist/grafana-scenes-cTJt4LR7.js.map +1 -0
- package/dist/{grafana-scenes-D5qs_fc9.js → grafana-scenes-kfW02M-K.js} +5 -1
- package/dist/grafana-scenes-kfW02M-K.js.map +1 -0
- package/dist/{grafana-scenes-COr0P0oM.js → grafana-scenes-naZktXG6.js} +5 -1
- package/dist/grafana-scenes-naZktXG6.js.map +1 -0
- package/dist/{grafana-scenes-YMli37Xh.js → grafana-scenes-zGpJY4O3.js} +5 -1
- package/dist/grafana-scenes-zGpJY4O3.js.map +1 -0
- package/dist/index.d.ts +3 -31
- package/dist/index.js +310 -408
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/esm/behaviors/SceneInteractionProfiler.js +0 -88
- package/dist/esm/behaviors/SceneInteractionProfiler.js.map +0 -1
- package/dist/esm/core/sceneGraph/getInteractionProfiler.js +0 -19
- package/dist/esm/core/sceneGraph/getInteractionProfiler.js.map +0 -1
- package/dist/grafana-scenes-CBRfJ-2H.js.map +0 -1
- package/dist/grafana-scenes-COr0P0oM.js.map +0 -1
- package/dist/grafana-scenes-CY85TD5F.js.map +0 -1
- package/dist/grafana-scenes-CeVkPanY.js.map +0 -1
- package/dist/grafana-scenes-CgIzGE5F.js.map +0 -1
- package/dist/grafana-scenes-CqRf9pRc.js.map +0 -1
- package/dist/grafana-scenes-Cub9Gl0n.js.map +0 -1
- package/dist/grafana-scenes-D5qs_fc9.js.map +0 -1
- package/dist/grafana-scenes-DObtL2WT.js.map +0 -1
- package/dist/grafana-scenes-DXM1LI4B.js.map +0 -1
- package/dist/grafana-scenes-DlUSL8jI.js.map +0 -1
- package/dist/grafana-scenes-Dy2CLUY9.js.map +0 -1
- package/dist/grafana-scenes-YMli37Xh.js.map +0 -1
- package/dist/grafana-scenes-n10eQkNF.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -137,21 +137,21 @@ class UserActionEvent extends data.BusEventWithPayload {
|
|
|
137
137
|
}
|
|
138
138
|
UserActionEvent.type = "scene-object-user-action";
|
|
139
139
|
|
|
140
|
-
var __typeError$
|
|
140
|
+
var __typeError$4 = (msg) => {
|
|
141
141
|
throw TypeError(msg);
|
|
142
142
|
};
|
|
143
|
-
var __accessCheck$
|
|
144
|
-
var __privateGet$
|
|
145
|
-
var __privateAdd$
|
|
146
|
-
var __privateSet$
|
|
143
|
+
var __accessCheck$4 = (obj, member, msg) => member.has(obj) || __typeError$4("Cannot " + msg);
|
|
144
|
+
var __privateGet$4 = (obj, member, getter) => (__accessCheck$4(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
145
|
+
var __privateAdd$4 = (obj, member, value) => member.has(obj) ? __typeError$4("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
146
|
+
var __privateSet$4 = (obj, member, value, setter) => (__accessCheck$4(obj, member, "write to private field"), member.set(obj, value), value);
|
|
147
147
|
var _ref;
|
|
148
148
|
class SceneObjectRef {
|
|
149
149
|
constructor(ref) {
|
|
150
|
-
__privateAdd$
|
|
151
|
-
__privateSet$
|
|
150
|
+
__privateAdd$4(this, _ref);
|
|
151
|
+
__privateSet$4(this, _ref, ref);
|
|
152
152
|
}
|
|
153
153
|
resolve() {
|
|
154
|
-
return __privateGet$
|
|
154
|
+
return __privateGet$4(this, _ref);
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
_ref = new WeakMap();
|
|
@@ -600,359 +600,13 @@ function writeSceneLog(logger, message, ...rest) {
|
|
|
600
600
|
}
|
|
601
601
|
}
|
|
602
602
|
|
|
603
|
-
var __typeError$4 = (msg) => {
|
|
604
|
-
throw TypeError(msg);
|
|
605
|
-
};
|
|
606
|
-
var __accessCheck$4 = (obj, member, msg) => member.has(obj) || __typeError$4("Cannot " + msg);
|
|
607
|
-
var __privateGet$4 = (obj, member, getter) => (__accessCheck$4(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
608
|
-
var __privateAdd$4 = (obj, member, value) => member.has(obj) ? __typeError$4("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
609
|
-
var __privateSet$4 = (obj, member, value, setter) => (__accessCheck$4(obj, member, "write to private field"), member.set(obj, value), value);
|
|
610
|
-
var _profileInProgress$1, _profileStartTs, _trailAnimationFrameId, _recordedTrailingSpans, _visibilityChangeHandler;
|
|
611
|
-
const POST_STORM_WINDOW = 2e3;
|
|
612
|
-
const SPAN_THRESHOLD = 30;
|
|
613
|
-
const TAB_INACTIVE_THRESHOLD = 1e3;
|
|
614
|
-
class SceneRenderProfiler {
|
|
615
|
-
constructor(queryController) {
|
|
616
|
-
this.queryController = queryController;
|
|
617
|
-
__privateAdd$4(this, _profileInProgress$1, null);
|
|
618
|
-
__privateAdd$4(this, _profileStartTs, null);
|
|
619
|
-
__privateAdd$4(this, _trailAnimationFrameId, null);
|
|
620
|
-
// Will keep measured lengths trailing frames
|
|
621
|
-
__privateAdd$4(this, _recordedTrailingSpans, []);
|
|
622
|
-
__privateAdd$4(this, _visibilityChangeHandler, null);
|
|
623
|
-
this.measureTrailingFrames = (measurementStartTs, lastFrameTime, profileStartTs) => {
|
|
624
|
-
var _a;
|
|
625
|
-
const currentFrameTime = performance.now();
|
|
626
|
-
const frameLength = currentFrameTime - lastFrameTime;
|
|
627
|
-
if (frameLength > TAB_INACTIVE_THRESHOLD) {
|
|
628
|
-
writeSceneLog("SceneRenderProfiler", "Tab was inactive, cancelling profile measurement");
|
|
629
|
-
this.cancelProfile();
|
|
630
|
-
return;
|
|
631
|
-
}
|
|
632
|
-
__privateGet$4(this, _recordedTrailingSpans).push(frameLength);
|
|
633
|
-
if (currentFrameTime - measurementStartTs < POST_STORM_WINDOW) {
|
|
634
|
-
if (__privateGet$4(this, _profileInProgress$1)) {
|
|
635
|
-
__privateSet$4(this, _trailAnimationFrameId, requestAnimationFrame(
|
|
636
|
-
() => this.measureTrailingFrames(measurementStartTs, currentFrameTime, profileStartTs)
|
|
637
|
-
));
|
|
638
|
-
}
|
|
639
|
-
} else {
|
|
640
|
-
const slowFrames = processRecordedSpans(__privateGet$4(this, _recordedTrailingSpans));
|
|
641
|
-
const slowFramesTime = slowFrames.reduce((acc, val) => acc + val, 0);
|
|
642
|
-
writeSceneLog(
|
|
643
|
-
this.constructor.name,
|
|
644
|
-
"Profile tail recorded, slow frames duration:",
|
|
645
|
-
slowFramesTime,
|
|
646
|
-
slowFrames,
|
|
647
|
-
__privateGet$4(this, _profileInProgress$1)
|
|
648
|
-
);
|
|
649
|
-
__privateSet$4(this, _recordedTrailingSpans, []);
|
|
650
|
-
const profileDuration = measurementStartTs - profileStartTs;
|
|
651
|
-
writeSceneLog(
|
|
652
|
-
this.constructor.name,
|
|
653
|
-
"Stoped recording, total measured time (network included):",
|
|
654
|
-
profileDuration + slowFramesTime
|
|
655
|
-
);
|
|
656
|
-
__privateSet$4(this, _trailAnimationFrameId, null);
|
|
657
|
-
const profileEndTs = profileStartTs + profileDuration + slowFramesTime;
|
|
658
|
-
if (!__privateGet$4(this, _profileInProgress$1)) {
|
|
659
|
-
return;
|
|
660
|
-
}
|
|
661
|
-
performance.measure(`DashboardInteraction ${__privateGet$4(this, _profileInProgress$1).origin}`, {
|
|
662
|
-
start: profileStartTs,
|
|
663
|
-
end: profileEndTs
|
|
664
|
-
});
|
|
665
|
-
const networkDuration = captureNetwork(profileStartTs, profileEndTs);
|
|
666
|
-
if (((_a = this.queryController) == null ? void 0 : _a.state.onProfileComplete) && __privateGet$4(this, _profileInProgress$1)) {
|
|
667
|
-
this.queryController.state.onProfileComplete({
|
|
668
|
-
origin: __privateGet$4(this, _profileInProgress$1).origin,
|
|
669
|
-
crumbs: __privateGet$4(this, _profileInProgress$1).crumbs,
|
|
670
|
-
duration: profileDuration + slowFramesTime,
|
|
671
|
-
networkDuration,
|
|
672
|
-
startTs: profileStartTs,
|
|
673
|
-
endTs: profileEndTs,
|
|
674
|
-
// @ts-ignore
|
|
675
|
-
jsHeapSizeLimit: performance.memory ? performance.memory.jsHeapSizeLimit : 0,
|
|
676
|
-
// @ts-ignore
|
|
677
|
-
usedJSHeapSize: performance.memory ? performance.memory.usedJSHeapSize : 0,
|
|
678
|
-
// @ts-ignore
|
|
679
|
-
totalJSHeapSize: performance.memory ? performance.memory.totalJSHeapSize : 0
|
|
680
|
-
});
|
|
681
|
-
__privateSet$4(this, _profileInProgress$1, null);
|
|
682
|
-
__privateSet$4(this, _trailAnimationFrameId, null);
|
|
683
|
-
}
|
|
684
|
-
if (window.__runs) {
|
|
685
|
-
window.__runs += `${Date.now()}, ${profileDuration + slowFramesTime}
|
|
686
|
-
`;
|
|
687
|
-
} else {
|
|
688
|
-
window.__runs = `${Date.now()}, ${profileDuration + slowFramesTime}
|
|
689
|
-
`;
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
};
|
|
693
|
-
this.setupVisibilityChangeHandler();
|
|
694
|
-
}
|
|
695
|
-
setQueryController(queryController) {
|
|
696
|
-
this.queryController = queryController;
|
|
697
|
-
}
|
|
698
|
-
setupVisibilityChangeHandler() {
|
|
699
|
-
if (__privateGet$4(this, _visibilityChangeHandler)) {
|
|
700
|
-
return;
|
|
701
|
-
}
|
|
702
|
-
__privateSet$4(this, _visibilityChangeHandler, () => {
|
|
703
|
-
if (document.hidden && __privateGet$4(this, _profileInProgress$1)) {
|
|
704
|
-
writeSceneLog("SceneRenderProfiler", "Tab became inactive, cancelling profile");
|
|
705
|
-
this.cancelProfile();
|
|
706
|
-
}
|
|
707
|
-
});
|
|
708
|
-
if (typeof document !== "undefined") {
|
|
709
|
-
document.addEventListener("visibilitychange", __privateGet$4(this, _visibilityChangeHandler));
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
cleanup() {
|
|
713
|
-
if (__privateGet$4(this, _visibilityChangeHandler) && typeof document !== "undefined") {
|
|
714
|
-
document.removeEventListener("visibilitychange", __privateGet$4(this, _visibilityChangeHandler));
|
|
715
|
-
__privateSet$4(this, _visibilityChangeHandler, null);
|
|
716
|
-
}
|
|
717
|
-
this.cancelProfile();
|
|
718
|
-
}
|
|
719
|
-
startProfile(name) {
|
|
720
|
-
if (document.hidden) {
|
|
721
|
-
writeSceneLog("SceneRenderProfiler", "Tab is inactive, skipping profile", name);
|
|
722
|
-
return;
|
|
723
|
-
}
|
|
724
|
-
if (__privateGet$4(this, _profileInProgress$1)) {
|
|
725
|
-
if (__privateGet$4(this, _trailAnimationFrameId)) {
|
|
726
|
-
this.cancelProfile();
|
|
727
|
-
this._startNewProfile(name, true);
|
|
728
|
-
} else {
|
|
729
|
-
this.addCrumb(name);
|
|
730
|
-
}
|
|
731
|
-
} else {
|
|
732
|
-
this._startNewProfile(name);
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
/**
|
|
736
|
-
* Starts a new profile for performance measurement.
|
|
737
|
-
*
|
|
738
|
-
* @param name - The origin/trigger of the profile (e.g., 'time_range_change', 'variable_value_changed')
|
|
739
|
-
* @param force - Whether this is a "forced" profile (true) or "clean" profile (false)
|
|
740
|
-
* - "forced": Started by canceling an existing profile that was recording trailing frames
|
|
741
|
-
* This happens when a new user interaction occurs before the previous one
|
|
742
|
-
* finished measuring its performance impact
|
|
743
|
-
* - "clean": Started when no profile is currently active
|
|
744
|
-
*/
|
|
745
|
-
_startNewProfile(name, force = false) {
|
|
746
|
-
__privateSet$4(this, _profileInProgress$1, { origin: name, crumbs: [] });
|
|
747
|
-
__privateSet$4(this, _profileStartTs, performance.now());
|
|
748
|
-
writeSceneLog(
|
|
749
|
-
"SceneRenderProfiler",
|
|
750
|
-
`Profile started[${force ? "forced" : "clean"}]`,
|
|
751
|
-
__privateGet$4(this, _profileInProgress$1),
|
|
752
|
-
__privateGet$4(this, _profileStartTs)
|
|
753
|
-
);
|
|
754
|
-
}
|
|
755
|
-
recordProfileTail(measurementStartTime, profileStartTs) {
|
|
756
|
-
__privateSet$4(this, _trailAnimationFrameId, requestAnimationFrame(
|
|
757
|
-
() => this.measureTrailingFrames(measurementStartTime, measurementStartTime, profileStartTs)
|
|
758
|
-
));
|
|
759
|
-
}
|
|
760
|
-
tryCompletingProfile() {
|
|
761
|
-
var _a;
|
|
762
|
-
writeSceneLog("SceneRenderProfiler", "Trying to complete profile", __privateGet$4(this, _profileInProgress$1));
|
|
763
|
-
if (((_a = this.queryController) == null ? void 0 : _a.runningQueriesCount()) === 0 && __privateGet$4(this, _profileInProgress$1)) {
|
|
764
|
-
writeSceneLog("SceneRenderProfiler", "All queries completed, stopping profile");
|
|
765
|
-
this.recordProfileTail(performance.now(), __privateGet$4(this, _profileStartTs));
|
|
766
|
-
}
|
|
767
|
-
}
|
|
768
|
-
isTailRecording() {
|
|
769
|
-
return Boolean(__privateGet$4(this, _trailAnimationFrameId));
|
|
770
|
-
}
|
|
771
|
-
cancelTailRecording() {
|
|
772
|
-
if (__privateGet$4(this, _trailAnimationFrameId)) {
|
|
773
|
-
cancelAnimationFrame(__privateGet$4(this, _trailAnimationFrameId));
|
|
774
|
-
__privateSet$4(this, _trailAnimationFrameId, null);
|
|
775
|
-
writeSceneLog("SceneRenderProfiler", "Cancelled recording frames, new profile started");
|
|
776
|
-
}
|
|
777
|
-
}
|
|
778
|
-
// cancel profile
|
|
779
|
-
cancelProfile() {
|
|
780
|
-
if (__privateGet$4(this, _profileInProgress$1)) {
|
|
781
|
-
writeSceneLog("SceneRenderProfiler", "Cancelling profile", __privateGet$4(this, _profileInProgress$1));
|
|
782
|
-
__privateSet$4(this, _profileInProgress$1, null);
|
|
783
|
-
if (__privateGet$4(this, _trailAnimationFrameId)) {
|
|
784
|
-
cancelAnimationFrame(__privateGet$4(this, _trailAnimationFrameId));
|
|
785
|
-
__privateSet$4(this, _trailAnimationFrameId, null);
|
|
786
|
-
}
|
|
787
|
-
__privateSet$4(this, _recordedTrailingSpans, []);
|
|
788
|
-
}
|
|
789
|
-
}
|
|
790
|
-
addCrumb(crumb) {
|
|
791
|
-
if (__privateGet$4(this, _profileInProgress$1)) {
|
|
792
|
-
writeSceneLog("SceneRenderProfiler", "Adding crumb:", crumb);
|
|
793
|
-
__privateGet$4(this, _profileInProgress$1).crumbs.push(crumb);
|
|
794
|
-
}
|
|
795
|
-
}
|
|
796
|
-
}
|
|
797
|
-
_profileInProgress$1 = new WeakMap();
|
|
798
|
-
_profileStartTs = new WeakMap();
|
|
799
|
-
_trailAnimationFrameId = new WeakMap();
|
|
800
|
-
_recordedTrailingSpans = new WeakMap();
|
|
801
|
-
_visibilityChangeHandler = new WeakMap();
|
|
802
|
-
function processRecordedSpans(spans) {
|
|
803
|
-
for (let i = spans.length - 1; i >= 0; i--) {
|
|
804
|
-
if (spans[i] > SPAN_THRESHOLD) {
|
|
805
|
-
return spans.slice(0, i + 1);
|
|
806
|
-
}
|
|
807
|
-
}
|
|
808
|
-
return [spans[0]];
|
|
809
|
-
}
|
|
810
|
-
function captureNetwork(startTs, endTs) {
|
|
811
|
-
const entries = performance.getEntriesByType("resource");
|
|
812
|
-
performance.clearResourceTimings();
|
|
813
|
-
const networkEntries = entries.filter(
|
|
814
|
-
(entry) => entry.startTime >= startTs && entry.startTime <= endTs && entry.responseEnd >= startTs && entry.responseEnd <= endTs
|
|
815
|
-
);
|
|
816
|
-
for (const entry of networkEntries) {
|
|
817
|
-
performance.measure("Network entry " + entry.name, {
|
|
818
|
-
start: entry.startTime,
|
|
819
|
-
end: entry.responseEnd
|
|
820
|
-
});
|
|
821
|
-
}
|
|
822
|
-
return calculateNetworkTime(networkEntries);
|
|
823
|
-
}
|
|
824
|
-
function calculateNetworkTime(requests) {
|
|
825
|
-
if (requests.length === 0) {
|
|
826
|
-
return 0;
|
|
827
|
-
}
|
|
828
|
-
requests.sort((a, b) => a.startTime - b.startTime);
|
|
829
|
-
let totalNetworkTime = 0;
|
|
830
|
-
let currentStart = requests[0].startTime;
|
|
831
|
-
let currentEnd = requests[0].responseEnd;
|
|
832
|
-
for (let i = 1; i < requests.length; i++) {
|
|
833
|
-
if (requests[i].startTime <= currentEnd) {
|
|
834
|
-
currentEnd = Math.max(currentEnd, requests[i].responseEnd);
|
|
835
|
-
} else {
|
|
836
|
-
totalNetworkTime += currentEnd - currentStart;
|
|
837
|
-
currentStart = requests[i].startTime;
|
|
838
|
-
currentEnd = requests[i].responseEnd;
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
totalNetworkTime += currentEnd - currentStart;
|
|
842
|
-
return totalNetworkTime;
|
|
843
|
-
}
|
|
844
|
-
const REFRESH_INTERACTION = "refresh";
|
|
845
|
-
const TIME_RANGE_CHANGE_INTERACTION = "time_range_change";
|
|
846
|
-
const FILTER_REMOVED_INTERACTION = "filter_removed";
|
|
847
|
-
const FILTER_CHANGED_INTERACTION = "filter_changed";
|
|
848
|
-
const FILTER_RESTORED_INTERACTION = "filter_restored";
|
|
849
|
-
const VARIABLE_VALUE_CHANGED_INTERACTION = "variable_value_changed";
|
|
850
|
-
const SCOPES_CHANGED_INTERACTION = "scopes_changed";
|
|
851
|
-
|
|
852
603
|
var __typeError$3 = (msg) => {
|
|
853
604
|
throw TypeError(msg);
|
|
854
605
|
};
|
|
855
606
|
var __accessCheck$3 = (obj, member, msg) => member.has(obj) || __typeError$3("Cannot " + msg);
|
|
856
|
-
var __privateGet$3 = (obj, member, getter) => (__accessCheck$3(obj, member, "read from private field"), member.get(obj));
|
|
607
|
+
var __privateGet$3 = (obj, member, getter) => (__accessCheck$3(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
857
608
|
var __privateAdd$3 = (obj, member, value) => member.has(obj) ? __typeError$3("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
858
609
|
var __privateSet$3 = (obj, member, value, setter) => (__accessCheck$3(obj, member, "write to private field"), member.set(obj, value), value);
|
|
859
|
-
var _profileInProgress;
|
|
860
|
-
function isInteractionProfiler(obj) {
|
|
861
|
-
return obj && typeof obj === "object" && "isInteractionProfiler" in obj;
|
|
862
|
-
}
|
|
863
|
-
class SceneInteractionProfiler extends SceneObjectBase {
|
|
864
|
-
constructor() {
|
|
865
|
-
super(...arguments);
|
|
866
|
-
this.isInteractionProfiler = true;
|
|
867
|
-
__privateAdd$3(this, _profileInProgress, null);
|
|
868
|
-
}
|
|
869
|
-
startProfile(interaction) {
|
|
870
|
-
if (!this.state.enableProfiling) {
|
|
871
|
-
return;
|
|
872
|
-
}
|
|
873
|
-
if (__privateGet$3(this, _profileInProgress)) {
|
|
874
|
-
this.cancelProfile();
|
|
875
|
-
}
|
|
876
|
-
__privateSet$3(this, _profileInProgress, {
|
|
877
|
-
interaction,
|
|
878
|
-
startTs: performance.now()
|
|
879
|
-
});
|
|
880
|
-
writeSceneLog("SceneInteractionProfiler", "Started profiling interaction:", interaction);
|
|
881
|
-
}
|
|
882
|
-
stopProfile() {
|
|
883
|
-
if (!__privateGet$3(this, _profileInProgress)) {
|
|
884
|
-
return;
|
|
885
|
-
}
|
|
886
|
-
const endTs = performance.now();
|
|
887
|
-
const interactionDuration = endTs - __privateGet$3(this, _profileInProgress).startTs;
|
|
888
|
-
const networkDuration = captureNetwork(__privateGet$3(this, _profileInProgress).startTs, endTs);
|
|
889
|
-
const result = {
|
|
890
|
-
interaction: __privateGet$3(this, _profileInProgress).interaction,
|
|
891
|
-
interactionDuration,
|
|
892
|
-
networkDuration,
|
|
893
|
-
startTs: __privateGet$3(this, _profileInProgress).startTs,
|
|
894
|
-
endTs
|
|
895
|
-
};
|
|
896
|
-
writeSceneLog("SceneInteractionProfiler", "Completed profile:", result);
|
|
897
|
-
if (this.state.onProfileComplete) {
|
|
898
|
-
this.state.onProfileComplete(result);
|
|
899
|
-
}
|
|
900
|
-
performance.mark(`${__privateGet$3(this, _profileInProgress).interaction}_start`, {
|
|
901
|
-
startTime: __privateGet$3(this, _profileInProgress).startTs
|
|
902
|
-
});
|
|
903
|
-
performance.mark(`${__privateGet$3(this, _profileInProgress).interaction}_end`, {
|
|
904
|
-
startTime: endTs
|
|
905
|
-
});
|
|
906
|
-
performance.measure(
|
|
907
|
-
`Interaction_${__privateGet$3(this, _profileInProgress).interaction}`,
|
|
908
|
-
`${__privateGet$3(this, _profileInProgress).interaction}_start`,
|
|
909
|
-
`${__privateGet$3(this, _profileInProgress).interaction}_end`
|
|
910
|
-
);
|
|
911
|
-
__privateSet$3(this, _profileInProgress, null);
|
|
912
|
-
}
|
|
913
|
-
cancelProfile() {
|
|
914
|
-
if (__privateGet$3(this, _profileInProgress)) {
|
|
915
|
-
writeSceneLog("SceneInteractionProfiler", "Cancelled profile:", __privateGet$3(this, _profileInProgress).interaction);
|
|
916
|
-
__privateSet$3(this, _profileInProgress, null);
|
|
917
|
-
}
|
|
918
|
-
}
|
|
919
|
-
isProfileActive() {
|
|
920
|
-
return __privateGet$3(this, _profileInProgress) !== null;
|
|
921
|
-
}
|
|
922
|
-
getCurrentInteraction() {
|
|
923
|
-
var _a, _b;
|
|
924
|
-
return (_b = (_a = __privateGet$3(this, _profileInProgress)) == null ? void 0 : _a.interaction) != null ? _b : null;
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
_profileInProgress = new WeakMap();
|
|
928
|
-
const USER_INTERACTIONS = {
|
|
929
|
-
ADHOC_KEYS_DROPDOWN: "adhoc_keys_dropdown",
|
|
930
|
-
ADHOC_VALUES_DROPDOWN: "adhoc_values_dropdown",
|
|
931
|
-
GROUPBY_DROPDOWN: "groupby_dropdown"
|
|
932
|
-
};
|
|
933
|
-
|
|
934
|
-
function getInteractionProfiler(sceneObject) {
|
|
935
|
-
let parent = sceneObject;
|
|
936
|
-
while (parent) {
|
|
937
|
-
if (parent.state.$behaviors) {
|
|
938
|
-
for (const behavior of parent.state.$behaviors) {
|
|
939
|
-
if (isInteractionProfiler(behavior)) {
|
|
940
|
-
return behavior;
|
|
941
|
-
}
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
parent = parent.parent;
|
|
945
|
-
}
|
|
946
|
-
return void 0;
|
|
947
|
-
}
|
|
948
|
-
|
|
949
|
-
var __typeError$2 = (msg) => {
|
|
950
|
-
throw TypeError(msg);
|
|
951
|
-
};
|
|
952
|
-
var __accessCheck$2 = (obj, member, msg) => member.has(obj) || __typeError$2("Cannot " + msg);
|
|
953
|
-
var __privateGet$2 = (obj, member, getter) => (__accessCheck$2(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
954
|
-
var __privateAdd$2 = (obj, member, value) => member.has(obj) ? __typeError$2("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
955
|
-
var __privateSet$2 = (obj, member, value, setter) => (__accessCheck$2(obj, member, "write to private field"), member.set(obj, value), value);
|
|
956
610
|
var _running, _tryCompleteProfileFrameId;
|
|
957
611
|
function isQueryController(s) {
|
|
958
612
|
return "isQueryController" in s;
|
|
@@ -962,10 +616,10 @@ class SceneQueryController extends SceneObjectBase {
|
|
|
962
616
|
super({ ...state, isRunning: false });
|
|
963
617
|
this.profiler = profiler;
|
|
964
618
|
this.isQueryController = true;
|
|
965
|
-
__privateAdd$
|
|
966
|
-
__privateAdd$
|
|
619
|
+
__privateAdd$3(this, _running, /* @__PURE__ */ new Set());
|
|
620
|
+
__privateAdd$3(this, _tryCompleteProfileFrameId, null);
|
|
967
621
|
this.runningQueriesCount = () => {
|
|
968
|
-
return __privateGet$
|
|
622
|
+
return __privateGet$3(this, _running).size;
|
|
969
623
|
};
|
|
970
624
|
if (profiler) {
|
|
971
625
|
this.profiler = profiler;
|
|
@@ -974,7 +628,7 @@ class SceneQueryController extends SceneObjectBase {
|
|
|
974
628
|
this.addActivationHandler(() => {
|
|
975
629
|
var _a;
|
|
976
630
|
(_a = this.profiler) == null ? void 0 : _a.setQueryController(this);
|
|
977
|
-
return () => __privateGet$
|
|
631
|
+
return () => __privateGet$3(this, _running).clear();
|
|
978
632
|
});
|
|
979
633
|
}
|
|
980
634
|
startProfile(name) {
|
|
@@ -989,19 +643,19 @@ class SceneQueryController extends SceneObjectBase {
|
|
|
989
643
|
(_a = this.profiler) == null ? void 0 : _a.cancelProfile();
|
|
990
644
|
}
|
|
991
645
|
queryStarted(entry) {
|
|
992
|
-
__privateGet$
|
|
646
|
+
__privateGet$3(this, _running).add(entry);
|
|
993
647
|
this.changeRunningQueryCount(1, entry);
|
|
994
648
|
if (!this.state.isRunning) {
|
|
995
649
|
this.setState({ isRunning: true });
|
|
996
650
|
}
|
|
997
651
|
}
|
|
998
652
|
queryCompleted(entry) {
|
|
999
|
-
if (!__privateGet$
|
|
653
|
+
if (!__privateGet$3(this, _running).has(entry)) {
|
|
1000
654
|
return;
|
|
1001
655
|
}
|
|
1002
|
-
__privateGet$
|
|
656
|
+
__privateGet$3(this, _running).delete(entry);
|
|
1003
657
|
this.changeRunningQueryCount(-1);
|
|
1004
|
-
if (__privateGet$
|
|
658
|
+
if (__privateGet$3(this, _running).size === 0) {
|
|
1005
659
|
this.setState({ isRunning: false });
|
|
1006
660
|
}
|
|
1007
661
|
}
|
|
@@ -1018,10 +672,10 @@ class SceneQueryController extends SceneObjectBase {
|
|
|
1018
672
|
}
|
|
1019
673
|
}
|
|
1020
674
|
if (this.state.enableProfiling) {
|
|
1021
|
-
if (__privateGet$
|
|
1022
|
-
cancelAnimationFrame(__privateGet$
|
|
675
|
+
if (__privateGet$3(this, _tryCompleteProfileFrameId)) {
|
|
676
|
+
cancelAnimationFrame(__privateGet$3(this, _tryCompleteProfileFrameId));
|
|
1023
677
|
}
|
|
1024
|
-
__privateSet$
|
|
678
|
+
__privateSet$3(this, _tryCompleteProfileFrameId, requestAnimationFrame(() => {
|
|
1025
679
|
var _a2;
|
|
1026
680
|
(_a2 = this.profiler) == null ? void 0 : _a2.tryCompletingProfile();
|
|
1027
681
|
}));
|
|
@@ -1029,7 +683,7 @@ class SceneQueryController extends SceneObjectBase {
|
|
|
1029
683
|
}
|
|
1030
684
|
cancelAll() {
|
|
1031
685
|
var _a;
|
|
1032
|
-
for (const entry of __privateGet$
|
|
686
|
+
for (const entry of __privateGet$3(this, _running).values()) {
|
|
1033
687
|
(_a = entry.cancel) == null ? void 0 : _a.call(entry);
|
|
1034
688
|
}
|
|
1035
689
|
}
|
|
@@ -1199,6 +853,255 @@ function isValid$1(value, roundUp, timeZone) {
|
|
|
1199
853
|
return parsed.isValid();
|
|
1200
854
|
}
|
|
1201
855
|
|
|
856
|
+
var __typeError$2 = (msg) => {
|
|
857
|
+
throw TypeError(msg);
|
|
858
|
+
};
|
|
859
|
+
var __accessCheck$2 = (obj, member, msg) => member.has(obj) || __typeError$2("Cannot " + msg);
|
|
860
|
+
var __privateGet$2 = (obj, member, getter) => (__accessCheck$2(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
861
|
+
var __privateAdd$2 = (obj, member, value) => member.has(obj) ? __typeError$2("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
862
|
+
var __privateSet$2 = (obj, member, value, setter) => (__accessCheck$2(obj, member, "write to private field"), member.set(obj, value), value);
|
|
863
|
+
var _profileInProgress, _profileStartTs, _trailAnimationFrameId, _recordedTrailingSpans, _visibilityChangeHandler;
|
|
864
|
+
const POST_STORM_WINDOW = 2e3;
|
|
865
|
+
const SPAN_THRESHOLD = 30;
|
|
866
|
+
const TAB_INACTIVE_THRESHOLD = 1e3;
|
|
867
|
+
class SceneRenderProfiler {
|
|
868
|
+
constructor(queryController) {
|
|
869
|
+
this.queryController = queryController;
|
|
870
|
+
__privateAdd$2(this, _profileInProgress, null);
|
|
871
|
+
__privateAdd$2(this, _profileStartTs, null);
|
|
872
|
+
__privateAdd$2(this, _trailAnimationFrameId, null);
|
|
873
|
+
// Will keep measured lengths trailing frames
|
|
874
|
+
__privateAdd$2(this, _recordedTrailingSpans, []);
|
|
875
|
+
__privateAdd$2(this, _visibilityChangeHandler, null);
|
|
876
|
+
this.measureTrailingFrames = (measurementStartTs, lastFrameTime, profileStartTs) => {
|
|
877
|
+
var _a;
|
|
878
|
+
const currentFrameTime = performance.now();
|
|
879
|
+
const frameLength = currentFrameTime - lastFrameTime;
|
|
880
|
+
if (frameLength > TAB_INACTIVE_THRESHOLD) {
|
|
881
|
+
writeSceneLog("SceneRenderProfiler", "Tab was inactive, cancelling profile measurement");
|
|
882
|
+
this.cancelProfile();
|
|
883
|
+
return;
|
|
884
|
+
}
|
|
885
|
+
__privateGet$2(this, _recordedTrailingSpans).push(frameLength);
|
|
886
|
+
if (currentFrameTime - measurementStartTs < POST_STORM_WINDOW) {
|
|
887
|
+
if (__privateGet$2(this, _profileInProgress)) {
|
|
888
|
+
__privateSet$2(this, _trailAnimationFrameId, requestAnimationFrame(
|
|
889
|
+
() => this.measureTrailingFrames(measurementStartTs, currentFrameTime, profileStartTs)
|
|
890
|
+
));
|
|
891
|
+
}
|
|
892
|
+
} else {
|
|
893
|
+
const slowFrames = processRecordedSpans(__privateGet$2(this, _recordedTrailingSpans));
|
|
894
|
+
const slowFramesTime = slowFrames.reduce((acc, val) => acc + val, 0);
|
|
895
|
+
writeSceneLog(
|
|
896
|
+
this.constructor.name,
|
|
897
|
+
"Profile tail recorded, slow frames duration:",
|
|
898
|
+
slowFramesTime,
|
|
899
|
+
slowFrames,
|
|
900
|
+
__privateGet$2(this, _profileInProgress)
|
|
901
|
+
);
|
|
902
|
+
__privateSet$2(this, _recordedTrailingSpans, []);
|
|
903
|
+
const profileDuration = measurementStartTs - profileStartTs;
|
|
904
|
+
writeSceneLog(
|
|
905
|
+
this.constructor.name,
|
|
906
|
+
"Stoped recording, total measured time (network included):",
|
|
907
|
+
profileDuration + slowFramesTime
|
|
908
|
+
);
|
|
909
|
+
__privateSet$2(this, _trailAnimationFrameId, null);
|
|
910
|
+
const profileEndTs = profileStartTs + profileDuration + slowFramesTime;
|
|
911
|
+
if (!__privateGet$2(this, _profileInProgress)) {
|
|
912
|
+
return;
|
|
913
|
+
}
|
|
914
|
+
performance.measure(`DashboardInteraction ${__privateGet$2(this, _profileInProgress).origin}`, {
|
|
915
|
+
start: profileStartTs,
|
|
916
|
+
end: profileEndTs
|
|
917
|
+
});
|
|
918
|
+
const networkDuration = captureNetwork(profileStartTs, profileEndTs);
|
|
919
|
+
if (((_a = this.queryController) == null ? void 0 : _a.state.onProfileComplete) && __privateGet$2(this, _profileInProgress)) {
|
|
920
|
+
this.queryController.state.onProfileComplete({
|
|
921
|
+
origin: __privateGet$2(this, _profileInProgress).origin,
|
|
922
|
+
crumbs: __privateGet$2(this, _profileInProgress).crumbs,
|
|
923
|
+
duration: profileDuration + slowFramesTime,
|
|
924
|
+
networkDuration,
|
|
925
|
+
startTs: profileStartTs,
|
|
926
|
+
endTs: profileEndTs,
|
|
927
|
+
// @ts-ignore
|
|
928
|
+
jsHeapSizeLimit: performance.memory ? performance.memory.jsHeapSizeLimit : 0,
|
|
929
|
+
// @ts-ignore
|
|
930
|
+
usedJSHeapSize: performance.memory ? performance.memory.usedJSHeapSize : 0,
|
|
931
|
+
// @ts-ignore
|
|
932
|
+
totalJSHeapSize: performance.memory ? performance.memory.totalJSHeapSize : 0
|
|
933
|
+
});
|
|
934
|
+
__privateSet$2(this, _profileInProgress, null);
|
|
935
|
+
__privateSet$2(this, _trailAnimationFrameId, null);
|
|
936
|
+
}
|
|
937
|
+
if (window.__runs) {
|
|
938
|
+
window.__runs += `${Date.now()}, ${profileDuration + slowFramesTime}
|
|
939
|
+
`;
|
|
940
|
+
} else {
|
|
941
|
+
window.__runs = `${Date.now()}, ${profileDuration + slowFramesTime}
|
|
942
|
+
`;
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
};
|
|
946
|
+
this.setupVisibilityChangeHandler();
|
|
947
|
+
}
|
|
948
|
+
setQueryController(queryController) {
|
|
949
|
+
this.queryController = queryController;
|
|
950
|
+
}
|
|
951
|
+
setupVisibilityChangeHandler() {
|
|
952
|
+
if (__privateGet$2(this, _visibilityChangeHandler)) {
|
|
953
|
+
return;
|
|
954
|
+
}
|
|
955
|
+
__privateSet$2(this, _visibilityChangeHandler, () => {
|
|
956
|
+
if (document.hidden && __privateGet$2(this, _profileInProgress)) {
|
|
957
|
+
writeSceneLog("SceneRenderProfiler", "Tab became inactive, cancelling profile");
|
|
958
|
+
this.cancelProfile();
|
|
959
|
+
}
|
|
960
|
+
});
|
|
961
|
+
if (typeof document !== "undefined") {
|
|
962
|
+
document.addEventListener("visibilitychange", __privateGet$2(this, _visibilityChangeHandler));
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
cleanup() {
|
|
966
|
+
if (__privateGet$2(this, _visibilityChangeHandler) && typeof document !== "undefined") {
|
|
967
|
+
document.removeEventListener("visibilitychange", __privateGet$2(this, _visibilityChangeHandler));
|
|
968
|
+
__privateSet$2(this, _visibilityChangeHandler, null);
|
|
969
|
+
}
|
|
970
|
+
this.cancelProfile();
|
|
971
|
+
}
|
|
972
|
+
startProfile(name) {
|
|
973
|
+
if (document.hidden) {
|
|
974
|
+
writeSceneLog("SceneRenderProfiler", "Tab is inactive, skipping profile", name);
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
977
|
+
if (__privateGet$2(this, _profileInProgress)) {
|
|
978
|
+
if (__privateGet$2(this, _trailAnimationFrameId)) {
|
|
979
|
+
this.cancelProfile();
|
|
980
|
+
this._startNewProfile(name, true);
|
|
981
|
+
} else {
|
|
982
|
+
this.addCrumb(name);
|
|
983
|
+
}
|
|
984
|
+
} else {
|
|
985
|
+
this._startNewProfile(name);
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
/**
|
|
989
|
+
* Starts a new profile for performance measurement.
|
|
990
|
+
*
|
|
991
|
+
* @param name - The origin/trigger of the profile (e.g., 'time_range_change', 'variable_value_changed')
|
|
992
|
+
* @param force - Whether this is a "forced" profile (true) or "clean" profile (false)
|
|
993
|
+
* - "forced": Started by canceling an existing profile that was recording trailing frames
|
|
994
|
+
* This happens when a new user interaction occurs before the previous one
|
|
995
|
+
* finished measuring its performance impact
|
|
996
|
+
* - "clean": Started when no profile is currently active
|
|
997
|
+
*/
|
|
998
|
+
_startNewProfile(name, force = false) {
|
|
999
|
+
__privateSet$2(this, _profileInProgress, { origin: name, crumbs: [] });
|
|
1000
|
+
__privateSet$2(this, _profileStartTs, performance.now());
|
|
1001
|
+
writeSceneLog(
|
|
1002
|
+
"SceneRenderProfiler",
|
|
1003
|
+
`Profile started[${force ? "forced" : "clean"}]`,
|
|
1004
|
+
__privateGet$2(this, _profileInProgress),
|
|
1005
|
+
__privateGet$2(this, _profileStartTs)
|
|
1006
|
+
);
|
|
1007
|
+
}
|
|
1008
|
+
recordProfileTail(measurementStartTime, profileStartTs) {
|
|
1009
|
+
__privateSet$2(this, _trailAnimationFrameId, requestAnimationFrame(
|
|
1010
|
+
() => this.measureTrailingFrames(measurementStartTime, measurementStartTime, profileStartTs)
|
|
1011
|
+
));
|
|
1012
|
+
}
|
|
1013
|
+
tryCompletingProfile() {
|
|
1014
|
+
var _a;
|
|
1015
|
+
writeSceneLog("SceneRenderProfiler", "Trying to complete profile", __privateGet$2(this, _profileInProgress));
|
|
1016
|
+
if (((_a = this.queryController) == null ? void 0 : _a.runningQueriesCount()) === 0 && __privateGet$2(this, _profileInProgress)) {
|
|
1017
|
+
writeSceneLog("SceneRenderProfiler", "All queries completed, stopping profile");
|
|
1018
|
+
this.recordProfileTail(performance.now(), __privateGet$2(this, _profileStartTs));
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
isTailRecording() {
|
|
1022
|
+
return Boolean(__privateGet$2(this, _trailAnimationFrameId));
|
|
1023
|
+
}
|
|
1024
|
+
cancelTailRecording() {
|
|
1025
|
+
if (__privateGet$2(this, _trailAnimationFrameId)) {
|
|
1026
|
+
cancelAnimationFrame(__privateGet$2(this, _trailAnimationFrameId));
|
|
1027
|
+
__privateSet$2(this, _trailAnimationFrameId, null);
|
|
1028
|
+
writeSceneLog("SceneRenderProfiler", "Cancelled recording frames, new profile started");
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
// cancel profile
|
|
1032
|
+
cancelProfile() {
|
|
1033
|
+
if (__privateGet$2(this, _profileInProgress)) {
|
|
1034
|
+
writeSceneLog("SceneRenderProfiler", "Cancelling profile", __privateGet$2(this, _profileInProgress));
|
|
1035
|
+
__privateSet$2(this, _profileInProgress, null);
|
|
1036
|
+
if (__privateGet$2(this, _trailAnimationFrameId)) {
|
|
1037
|
+
cancelAnimationFrame(__privateGet$2(this, _trailAnimationFrameId));
|
|
1038
|
+
__privateSet$2(this, _trailAnimationFrameId, null);
|
|
1039
|
+
}
|
|
1040
|
+
__privateSet$2(this, _recordedTrailingSpans, []);
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
addCrumb(crumb) {
|
|
1044
|
+
if (__privateGet$2(this, _profileInProgress)) {
|
|
1045
|
+
writeSceneLog("SceneRenderProfiler", "Adding crumb:", crumb);
|
|
1046
|
+
__privateGet$2(this, _profileInProgress).crumbs.push(crumb);
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
_profileInProgress = new WeakMap();
|
|
1051
|
+
_profileStartTs = new WeakMap();
|
|
1052
|
+
_trailAnimationFrameId = new WeakMap();
|
|
1053
|
+
_recordedTrailingSpans = new WeakMap();
|
|
1054
|
+
_visibilityChangeHandler = new WeakMap();
|
|
1055
|
+
function processRecordedSpans(spans) {
|
|
1056
|
+
for (let i = spans.length - 1; i >= 0; i--) {
|
|
1057
|
+
if (spans[i] > SPAN_THRESHOLD) {
|
|
1058
|
+
return spans.slice(0, i + 1);
|
|
1059
|
+
}
|
|
1060
|
+
}
|
|
1061
|
+
return [spans[0]];
|
|
1062
|
+
}
|
|
1063
|
+
function captureNetwork(startTs, endTs) {
|
|
1064
|
+
const entries = performance.getEntriesByType("resource");
|
|
1065
|
+
performance.clearResourceTimings();
|
|
1066
|
+
const networkEntries = entries.filter(
|
|
1067
|
+
(entry) => entry.startTime >= startTs && entry.startTime <= endTs && entry.responseEnd >= startTs && entry.responseEnd <= endTs
|
|
1068
|
+
);
|
|
1069
|
+
for (const entry of networkEntries) {
|
|
1070
|
+
performance.measure("Network entry " + entry.name, {
|
|
1071
|
+
start: entry.startTime,
|
|
1072
|
+
end: entry.responseEnd
|
|
1073
|
+
});
|
|
1074
|
+
}
|
|
1075
|
+
return calculateNetworkTime(networkEntries);
|
|
1076
|
+
}
|
|
1077
|
+
function calculateNetworkTime(requests) {
|
|
1078
|
+
if (requests.length === 0) {
|
|
1079
|
+
return 0;
|
|
1080
|
+
}
|
|
1081
|
+
requests.sort((a, b) => a.startTime - b.startTime);
|
|
1082
|
+
let totalNetworkTime = 0;
|
|
1083
|
+
let currentStart = requests[0].startTime;
|
|
1084
|
+
let currentEnd = requests[0].responseEnd;
|
|
1085
|
+
for (let i = 1; i < requests.length; i++) {
|
|
1086
|
+
if (requests[i].startTime <= currentEnd) {
|
|
1087
|
+
currentEnd = Math.max(currentEnd, requests[i].responseEnd);
|
|
1088
|
+
} else {
|
|
1089
|
+
totalNetworkTime += currentEnd - currentStart;
|
|
1090
|
+
currentStart = requests[i].startTime;
|
|
1091
|
+
currentEnd = requests[i].responseEnd;
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
totalNetworkTime += currentEnd - currentStart;
|
|
1095
|
+
return totalNetworkTime;
|
|
1096
|
+
}
|
|
1097
|
+
const REFRESH_INTERACTION = "refresh";
|
|
1098
|
+
const TIME_RANGE_CHANGE_INTERACTION = "time_range_change";
|
|
1099
|
+
const FILTER_REMOVED_INTERACTION = "filter_removed";
|
|
1100
|
+
const FILTER_CHANGED_INTERACTION = "filter_changed";
|
|
1101
|
+
const FILTER_RESTORED_INTERACTION = "filter_restored";
|
|
1102
|
+
const VARIABLE_VALUE_CHANGED_INTERACTION = "variable_value_changed";
|
|
1103
|
+
const SCOPES_CHANGED_INTERACTION = "scopes_changed";
|
|
1104
|
+
|
|
1202
1105
|
class SceneTimeRange extends SceneObjectBase {
|
|
1203
1106
|
constructor(state = {}) {
|
|
1204
1107
|
var _a;
|
|
@@ -3784,13 +3687,10 @@ function GroupByVariableRenderer({ model }) {
|
|
|
3784
3687
|
setUncommittedValue(newValue);
|
|
3785
3688
|
},
|
|
3786
3689
|
onOpenMenu: async () => {
|
|
3787
|
-
const profiler = getInteractionProfiler(model);
|
|
3788
|
-
profiler == null ? void 0 : profiler.startProfile(USER_INTERACTIONS.GROUPBY_DROPDOWN);
|
|
3789
3690
|
setIsFetchingOptions(true);
|
|
3790
3691
|
await rxjs.lastValueFrom(model.validateAndUpdate());
|
|
3791
3692
|
setIsFetchingOptions(false);
|
|
3792
3693
|
setIsOptionsOpen(true);
|
|
3793
|
-
profiler == null ? void 0 : profiler.stopProfile();
|
|
3794
3694
|
},
|
|
3795
3695
|
onCloseMenu: () => {
|
|
3796
3696
|
setIsOptionsOpen(false);
|
|
@@ -3840,13 +3740,10 @@ function GroupByVariableRenderer({ model }) {
|
|
|
3840
3740
|
}
|
|
3841
3741
|
},
|
|
3842
3742
|
onOpenMenu: async () => {
|
|
3843
|
-
const profiler = getInteractionProfiler(model);
|
|
3844
|
-
profiler == null ? void 0 : profiler.startProfile(USER_INTERACTIONS.GROUPBY_DROPDOWN);
|
|
3845
3743
|
setIsFetchingOptions(true);
|
|
3846
3744
|
await rxjs.lastValueFrom(model.validateAndUpdate());
|
|
3847
3745
|
setIsFetchingOptions(false);
|
|
3848
3746
|
setIsOptionsOpen(true);
|
|
3849
|
-
profiler == null ? void 0 : profiler.stopProfile();
|
|
3850
3747
|
},
|
|
3851
3748
|
onCloseMenu: () => {
|
|
3852
3749
|
setIsOptionsOpen(false);
|
|
@@ -5011,11 +4908,6 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
5011
4908
|
const handleFetchOptions = React.useCallback(
|
|
5012
4909
|
async (inputType) => {
|
|
5013
4910
|
var _a2;
|
|
5014
|
-
const profiler = getInteractionProfiler(model);
|
|
5015
|
-
const interactionName = inputType === "key" ? USER_INTERACTIONS.ADHOC_KEYS_DROPDOWN : USER_INTERACTIONS.ADHOC_VALUES_DROPDOWN;
|
|
5016
|
-
if (inputType !== "operator") {
|
|
5017
|
-
profiler == null ? void 0 : profiler.startProfile(interactionName);
|
|
5018
|
-
}
|
|
5019
4911
|
setOptionsError(false);
|
|
5020
4912
|
setOptionsLoading(true);
|
|
5021
4913
|
setOptions([]);
|
|
@@ -5029,7 +4921,6 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
5029
4921
|
options2 = await model._getValuesFor(filter);
|
|
5030
4922
|
}
|
|
5031
4923
|
if (filterInputTypeRef.current !== inputType) {
|
|
5032
|
-
profiler == null ? void 0 : profiler.stopProfile();
|
|
5033
4924
|
return;
|
|
5034
4925
|
}
|
|
5035
4926
|
setOptions(options2);
|
|
@@ -5042,7 +4933,6 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
5042
4933
|
setOptionsError(true);
|
|
5043
4934
|
}
|
|
5044
4935
|
setOptionsLoading(false);
|
|
5045
|
-
profiler == null ? void 0 : profiler.stopProfile();
|
|
5046
4936
|
},
|
|
5047
4937
|
[filter, model]
|
|
5048
4938
|
);
|
|
@@ -8090,7 +7980,6 @@ const sceneGraph = {
|
|
|
8090
7980
|
findAllObjects,
|
|
8091
7981
|
getAncestor,
|
|
8092
7982
|
getQueryController,
|
|
8093
|
-
getInteractionProfiler,
|
|
8094
7983
|
findDescendents,
|
|
8095
7984
|
getScopes
|
|
8096
7985
|
};
|
|
@@ -9590,7 +9479,6 @@ var index$1 = /*#__PURE__*/Object.freeze({
|
|
|
9590
9479
|
ActWhenVariableChanged: ActWhenVariableChanged,
|
|
9591
9480
|
CursorSync: CursorSync,
|
|
9592
9481
|
LiveNowTimer: LiveNowTimer,
|
|
9593
|
-
SceneInteractionProfiler: SceneInteractionProfiler,
|
|
9594
9482
|
SceneQueryController: SceneQueryController
|
|
9595
9483
|
});
|
|
9596
9484
|
|
|
@@ -11634,15 +11522,14 @@ function SceneGridLayoutRenderer({ model }) {
|
|
|
11634
11522
|
))
|
|
11635
11523
|
);
|
|
11636
11524
|
};
|
|
11637
|
-
return /* @__PURE__ */ React__default.default.createElement(
|
|
11638
|
-
"div",
|
|
11639
|
-
{
|
|
11640
|
-
ref: outerDivRef,
|
|
11641
|
-
style: { flex: "1 1 auto", position: "relative", zIndex: 1, width: "100%" }
|
|
11642
|
-
},
|
|
11643
|
-
renderGrid(width, height)
|
|
11644
|
-
);
|
|
11525
|
+
return /* @__PURE__ */ React__default.default.createElement("div", { ref: outerDivRef, className: gridWrapperClass }, renderGrid(width, height));
|
|
11645
11526
|
}
|
|
11527
|
+
const gridWrapperClass = css.css({
|
|
11528
|
+
flex: "1 1 auto",
|
|
11529
|
+
position: "relative",
|
|
11530
|
+
zIndex: 1,
|
|
11531
|
+
width: "100%"
|
|
11532
|
+
});
|
|
11646
11533
|
const GridItemWrapper = React__default.default.forwardRef((props, ref) => {
|
|
11647
11534
|
var _a;
|
|
11648
11535
|
const { grid, layoutItem, index, totalCount, isLazy, style, onLoad, onChange, children, ...divProps } = props;
|
|
@@ -11847,6 +11734,20 @@ const _SceneGridLayout = class _SceneGridLayout extends SceneObjectBase {
|
|
|
11847
11734
|
}
|
|
11848
11735
|
};
|
|
11849
11736
|
}
|
|
11737
|
+
adjustYPositions(after, amount) {
|
|
11738
|
+
for (const child of this.state.children) {
|
|
11739
|
+
if (child.state.y > after) {
|
|
11740
|
+
child.setState({ y: child.state.y + amount });
|
|
11741
|
+
}
|
|
11742
|
+
if (child instanceof SceneGridRow) {
|
|
11743
|
+
for (const rowChild of child.state.children) {
|
|
11744
|
+
if (rowChild.state.y > after) {
|
|
11745
|
+
rowChild.setState({ y: rowChild.state.y + amount });
|
|
11746
|
+
}
|
|
11747
|
+
}
|
|
11748
|
+
}
|
|
11749
|
+
}
|
|
11750
|
+
}
|
|
11850
11751
|
toggleRow(row) {
|
|
11851
11752
|
var _a, _b;
|
|
11852
11753
|
const isCollapsed = row.state.isCollapsed;
|
|
@@ -14887,25 +14788,25 @@ const VizConfigBuilders = {
|
|
|
14887
14788
|
|
|
14888
14789
|
function __variableDynamicImportRuntime0__(path) {
|
|
14889
14790
|
switch (path) {
|
|
14890
|
-
case '../locales/cs-CZ/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14891
|
-
case '../locales/de-DE/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14791
|
+
case '../locales/cs-CZ/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-BcDO8gk4.js'); });
|
|
14792
|
+
case '../locales/de-DE/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CzZTvOrf.js'); });
|
|
14892
14793
|
case '../locales/en-US/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-C_CT7peT.js'); });
|
|
14893
|
-
case '../locales/es-ES/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14894
|
-
case '../locales/fr-FR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14895
|
-
case '../locales/hu-HU/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14896
|
-
case '../locales/id-ID/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14897
|
-
case '../locales/it-IT/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14898
|
-
case '../locales/ja-JP/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14899
|
-
case '../locales/ko-KR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14900
|
-
case '../locales/nl-NL/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14901
|
-
case '../locales/pl-PL/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14902
|
-
case '../locales/pt-BR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14903
|
-
case '../locales/pt-PT/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14904
|
-
case '../locales/ru-RU/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14905
|
-
case '../locales/sv-SE/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14906
|
-
case '../locales/tr-TR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14907
|
-
case '../locales/zh-Hans/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14908
|
-
case '../locales/zh-Hant/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
14794
|
+
case '../locales/es-ES/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-zGpJY4O3.js'); });
|
|
14795
|
+
case '../locales/fr-FR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CfoPR_PZ.js'); });
|
|
14796
|
+
case '../locales/hu-HU/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CoXR5Z7T.js'); });
|
|
14797
|
+
case '../locales/id-ID/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-kfW02M-K.js'); });
|
|
14798
|
+
case '../locales/it-IT/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CMtHJ23j.js'); });
|
|
14799
|
+
case '../locales/ja-JP/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-cTJt4LR7.js'); });
|
|
14800
|
+
case '../locales/ko-KR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-BbJq3cEa.js'); });
|
|
14801
|
+
case '../locales/nl-NL/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-BwQ_A3lk.js'); });
|
|
14802
|
+
case '../locales/pl-PL/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-BbRDYrqK.js'); });
|
|
14803
|
+
case '../locales/pt-BR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-naZktXG6.js'); });
|
|
14804
|
+
case '../locales/pt-PT/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CixWq8rH.js'); });
|
|
14805
|
+
case '../locales/ru-RU/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-VOzZRdKp.js'); });
|
|
14806
|
+
case '../locales/sv-SE/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-BtGEpoZT.js'); });
|
|
14807
|
+
case '../locales/tr-TR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CqMfWT-f.js'); });
|
|
14808
|
+
case '../locales/zh-Hans/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CS09sc_L.js'); });
|
|
14809
|
+
case '../locales/zh-Hant/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-C-CibbsO.js'); });
|
|
14909
14810
|
default: return new Promise(function(resolve, reject) {
|
|
14910
14811
|
(typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(
|
|
14911
14812
|
reject.bind(null, new Error("Unknown variable dynamic import: " + path))
|
|
@@ -15028,6 +14929,7 @@ exports.VizPanelExploreButton = VizPanelExploreButton;
|
|
|
15028
14929
|
exports.VizPanelMenu = VizPanelMenu;
|
|
15029
14930
|
exports.behaviors = index$1;
|
|
15030
14931
|
exports.dataLayers = index;
|
|
14932
|
+
exports.escapeUrlPipeDelimiters = escapeUrlPipeDelimiters;
|
|
15031
14933
|
exports.formatRegistry = formatRegistry;
|
|
15032
14934
|
exports.getExploreURL = getExploreURL;
|
|
15033
14935
|
exports.isCustomVariableValue = isCustomVariableValue;
|