@itwin/frontend-devtools 5.0.0-dev.9 → 5.0.0-dev.90
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 +51 -1
- package/lib/cjs/ClipboardUtilities.js.map +1 -1
- package/lib/cjs/FrontEndDevTools.js +1 -1
- package/lib/cjs/FrontEndDevTools.js.map +1 -1
- package/lib/cjs/effects/Convolution.js +23 -23
- package/lib/cjs/effects/Convolution.js.map +1 -1
- package/lib/cjs/effects/EffectTools.js +2 -2
- package/lib/cjs/effects/EffectTools.js.map +1 -1
- package/lib/cjs/effects/Explosion.js +37 -25
- package/lib/cjs/effects/Explosion.js.map +1 -1
- package/lib/cjs/effects/FlipImage.js +22 -22
- package/lib/cjs/effects/FlipImage.js.map +1 -1
- package/lib/cjs/effects/LensDistortion.js +25 -25
- package/lib/cjs/effects/LensDistortion.js.map +1 -1
- package/lib/cjs/effects/Random.js.map +1 -1
- package/lib/cjs/effects/Saturation.js +30 -30
- package/lib/cjs/effects/Saturation.js.map +1 -1
- package/lib/cjs/effects/Snow.d.ts +1 -1
- package/lib/cjs/effects/Snow.d.ts.map +1 -1
- package/lib/cjs/effects/Snow.js +19 -8
- package/lib/cjs/effects/Snow.js.map +1 -1
- package/lib/cjs/effects/Vignette.js +41 -41
- package/lib/cjs/effects/Vignette.js.map +1 -1
- package/lib/cjs/frontend-devtools.js.map +1 -1
- package/lib/cjs/tools/AnimationIntervalTool.js +1 -1
- package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
- package/lib/cjs/tools/ChangeUnitsTool.js +1 -1
- package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
- package/lib/cjs/tools/ClipTools.js +6 -8
- package/lib/cjs/tools/ClipTools.js.map +1 -1
- package/lib/cjs/tools/DisplayStyleTools.js +21 -25
- package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
- package/lib/cjs/tools/EmphasizeElementsTool.js +7 -13
- package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
- package/lib/cjs/tools/FrustumDecoration.js +28 -9
- package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
- package/lib/cjs/tools/InspectElementTool.js +7 -6
- package/lib/cjs/tools/InspectElementTool.js.map +1 -1
- package/lib/cjs/tools/MapLayerTool.js +24 -20
- package/lib/cjs/tools/MapLayerTool.js.map +1 -1
- package/lib/cjs/tools/MeasureTileLoadTime.js +4 -1
- package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
- package/lib/cjs/tools/ModelAppearanceTools.js +9 -9
- package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
- package/lib/cjs/tools/PlanProjectionTools.js +8 -15
- package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
- package/lib/cjs/tools/PlanarMaskTools.js +21 -26
- package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
- package/lib/cjs/tools/ProjectExtents.js +6 -3
- package/lib/cjs/tools/ProjectExtents.js.map +1 -1
- package/lib/cjs/tools/RealityModelTools.js +10 -10
- package/lib/cjs/tools/RealityModelTools.js.map +1 -1
- package/lib/cjs/tools/RealityTransitionTool.js +1 -1
- package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
- package/lib/cjs/tools/RenderSystemTools.js +4 -3
- package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
- package/lib/cjs/tools/RenderTargetTools.d.ts +1 -1
- package/lib/cjs/tools/RenderTargetTools.d.ts.map +1 -1
- package/lib/cjs/tools/RenderTargetTools.js +15 -20
- package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
- package/lib/cjs/tools/ReportWebGLCompatibilityTool.js +1 -1
- package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
- package/lib/cjs/tools/SavedViews.js +4 -7
- package/lib/cjs/tools/SavedViews.js.map +1 -1
- package/lib/cjs/tools/ScheduleScriptTools.d.ts.map +1 -1
- package/lib/cjs/tools/ScheduleScriptTools.js +11 -12
- package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
- package/lib/cjs/tools/SelectionTools.js +4 -6
- package/lib/cjs/tools/SelectionTools.js.map +1 -1
- package/lib/cjs/tools/SetGpuMemoryLimitTool.js +1 -1
- package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
- package/lib/cjs/tools/SourceAspectIdTools.js +2 -2
- package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
- package/lib/cjs/tools/TileRequestDecoration.js +6 -3
- package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
- package/lib/cjs/tools/TileTreeBoundsDecoration.d.ts.map +1 -1
- package/lib/cjs/tools/TileTreeBoundsDecoration.js +8 -4
- package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
- package/lib/cjs/tools/ToolTipProvider.js +2 -1
- package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
- package/lib/cjs/tools/ViewportTools.js +22 -19
- package/lib/cjs/tools/ViewportTools.js.map +1 -1
- package/lib/cjs/tools/parseArgs.js.map +1 -1
- package/lib/cjs/tools/parseBoolean.js.map +1 -1
- package/lib/cjs/tools/parseToggle.js.map +1 -1
- package/lib/cjs/ui/Button.js.map +1 -1
- package/lib/cjs/ui/CheckBox.js.map +1 -1
- package/lib/cjs/ui/ColorInput.js.map +1 -1
- package/lib/cjs/ui/ComboBox.js.map +1 -1
- package/lib/cjs/ui/DataList.js.map +1 -1
- package/lib/cjs/ui/NestedMenu.js.map +1 -1
- package/lib/cjs/ui/NumericInput.js.map +1 -1
- package/lib/cjs/ui/RadioBox.js.map +1 -1
- package/lib/cjs/ui/Slider.js.map +1 -1
- package/lib/cjs/ui/TextBox.js.map +1 -1
- package/lib/cjs/widgets/DiagnosticsPanel.d.ts +1 -1
- package/lib/cjs/widgets/DiagnosticsPanel.d.ts.map +1 -1
- package/lib/cjs/widgets/DiagnosticsPanel.js +11 -1
- package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
- package/lib/cjs/widgets/FpsTracker.d.ts +1 -1
- package/lib/cjs/widgets/FpsTracker.d.ts.map +1 -1
- package/lib/cjs/widgets/FpsTracker.js +5 -1
- package/lib/cjs/widgets/FpsTracker.js.map +1 -1
- package/lib/cjs/widgets/GpuProfiler.d.ts +1 -1
- package/lib/cjs/widgets/GpuProfiler.d.ts.map +1 -1
- package/lib/cjs/widgets/GpuProfiler.js +89 -82
- package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
- package/lib/cjs/widgets/KeyinField.js +8 -1
- package/lib/cjs/widgets/KeyinField.js.map +1 -1
- package/lib/cjs/widgets/MemoryTracker.d.ts +1 -1
- package/lib/cjs/widgets/MemoryTracker.d.ts.map +1 -1
- package/lib/cjs/widgets/MemoryTracker.js +16 -4
- package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
- package/lib/cjs/widgets/RenderCommandBreakdown.d.ts +1 -1
- package/lib/cjs/widgets/RenderCommandBreakdown.d.ts.map +1 -1
- package/lib/cjs/widgets/RenderCommandBreakdown.js +6 -2
- package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
- package/lib/cjs/widgets/TileMemoryBreakdown.d.ts +1 -1
- package/lib/cjs/widgets/TileMemoryBreakdown.d.ts.map +1 -1
- package/lib/cjs/widgets/TileMemoryBreakdown.js +10 -8
- package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
- package/lib/cjs/widgets/TileStatisticsTracker.d.ts +1 -1
- package/lib/cjs/widgets/TileStatisticsTracker.d.ts.map +1 -1
- package/lib/cjs/widgets/TileStatisticsTracker.js +5 -2
- package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
- package/lib/cjs/widgets/ToolSettingsTracker.d.ts +1 -1
- package/lib/cjs/widgets/ToolSettingsTracker.d.ts.map +1 -1
- package/lib/cjs/widgets/ToolSettingsTracker.js +2 -2
- package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
- package/lib/esm/ClipboardUtilities.js.map +1 -1
- package/lib/esm/FrontEndDevTools.js +1 -1
- package/lib/esm/FrontEndDevTools.js.map +1 -1
- package/lib/esm/effects/Convolution.js +23 -23
- package/lib/esm/effects/Convolution.js.map +1 -1
- package/lib/esm/effects/EffectTools.js +2 -2
- package/lib/esm/effects/EffectTools.js.map +1 -1
- package/lib/esm/effects/Explosion.js +37 -25
- package/lib/esm/effects/Explosion.js.map +1 -1
- package/lib/esm/effects/FlipImage.js +22 -22
- package/lib/esm/effects/FlipImage.js.map +1 -1
- package/lib/esm/effects/LensDistortion.js +25 -25
- package/lib/esm/effects/LensDistortion.js.map +1 -1
- package/lib/esm/effects/Random.js.map +1 -1
- package/lib/esm/effects/Saturation.js +30 -30
- package/lib/esm/effects/Saturation.js.map +1 -1
- package/lib/esm/effects/Snow.d.ts +1 -1
- package/lib/esm/effects/Snow.d.ts.map +1 -1
- package/lib/esm/effects/Snow.js +19 -8
- package/lib/esm/effects/Snow.js.map +1 -1
- package/lib/esm/effects/Vignette.js +41 -41
- package/lib/esm/effects/Vignette.js.map +1 -1
- package/lib/esm/frontend-devtools.js.map +1 -1
- package/lib/esm/tools/AnimationIntervalTool.js +1 -1
- package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
- package/lib/esm/tools/ChangeUnitsTool.js +1 -1
- package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
- package/lib/esm/tools/ClipTools.js +6 -8
- package/lib/esm/tools/ClipTools.js.map +1 -1
- package/lib/esm/tools/DisplayStyleTools.js +21 -25
- package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
- package/lib/esm/tools/EmphasizeElementsTool.js +7 -13
- package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
- package/lib/esm/tools/FrustumDecoration.js +28 -9
- package/lib/esm/tools/FrustumDecoration.js.map +1 -1
- package/lib/esm/tools/InspectElementTool.js +7 -6
- package/lib/esm/tools/InspectElementTool.js.map +1 -1
- package/lib/esm/tools/MapLayerTool.js +24 -20
- package/lib/esm/tools/MapLayerTool.js.map +1 -1
- package/lib/esm/tools/MeasureTileLoadTime.js +4 -1
- package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
- package/lib/esm/tools/ModelAppearanceTools.js +9 -9
- package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
- package/lib/esm/tools/PlanProjectionTools.js +8 -15
- package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
- package/lib/esm/tools/PlanarMaskTools.js +21 -26
- package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
- package/lib/esm/tools/ProjectExtents.js +6 -3
- package/lib/esm/tools/ProjectExtents.js.map +1 -1
- package/lib/esm/tools/RealityModelTools.js +10 -10
- package/lib/esm/tools/RealityModelTools.js.map +1 -1
- package/lib/esm/tools/RealityTransitionTool.js +1 -1
- package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
- package/lib/esm/tools/RenderSystemTools.js +4 -3
- package/lib/esm/tools/RenderSystemTools.js.map +1 -1
- package/lib/esm/tools/RenderTargetTools.d.ts +1 -1
- package/lib/esm/tools/RenderTargetTools.d.ts.map +1 -1
- package/lib/esm/tools/RenderTargetTools.js +15 -20
- package/lib/esm/tools/RenderTargetTools.js.map +1 -1
- package/lib/esm/tools/ReportWebGLCompatibilityTool.js +1 -1
- package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
- package/lib/esm/tools/SavedViews.js +4 -7
- package/lib/esm/tools/SavedViews.js.map +1 -1
- package/lib/esm/tools/ScheduleScriptTools.d.ts.map +1 -1
- package/lib/esm/tools/ScheduleScriptTools.js +11 -12
- package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
- package/lib/esm/tools/SelectionTools.js +4 -6
- package/lib/esm/tools/SelectionTools.js.map +1 -1
- package/lib/esm/tools/SetGpuMemoryLimitTool.js +1 -1
- package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
- package/lib/esm/tools/SourceAspectIdTools.js +2 -2
- package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
- package/lib/esm/tools/TileRequestDecoration.js +6 -3
- package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
- package/lib/esm/tools/TileTreeBoundsDecoration.d.ts.map +1 -1
- package/lib/esm/tools/TileTreeBoundsDecoration.js +8 -4
- package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
- package/lib/esm/tools/ToolTipProvider.js +2 -1
- package/lib/esm/tools/ToolTipProvider.js.map +1 -1
- package/lib/esm/tools/ViewportTools.js +22 -19
- package/lib/esm/tools/ViewportTools.js.map +1 -1
- package/lib/esm/tools/parseArgs.js.map +1 -1
- package/lib/esm/tools/parseBoolean.js.map +1 -1
- package/lib/esm/tools/parseToggle.js.map +1 -1
- package/lib/esm/ui/Button.js.map +1 -1
- package/lib/esm/ui/CheckBox.js.map +1 -1
- package/lib/esm/ui/ColorInput.js.map +1 -1
- package/lib/esm/ui/ComboBox.js.map +1 -1
- package/lib/esm/ui/DataList.js.map +1 -1
- package/lib/esm/ui/NestedMenu.js.map +1 -1
- package/lib/esm/ui/NumericInput.js.map +1 -1
- package/lib/esm/ui/RadioBox.js.map +1 -1
- package/lib/esm/ui/Slider.js.map +1 -1
- package/lib/esm/ui/TextBox.js.map +1 -1
- package/lib/esm/widgets/DiagnosticsPanel.d.ts +1 -1
- package/lib/esm/widgets/DiagnosticsPanel.d.ts.map +1 -1
- package/lib/esm/widgets/DiagnosticsPanel.js +11 -1
- package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
- package/lib/esm/widgets/FpsTracker.d.ts +1 -1
- package/lib/esm/widgets/FpsTracker.d.ts.map +1 -1
- package/lib/esm/widgets/FpsTracker.js +5 -1
- package/lib/esm/widgets/FpsTracker.js.map +1 -1
- package/lib/esm/widgets/GpuProfiler.d.ts +1 -1
- package/lib/esm/widgets/GpuProfiler.d.ts.map +1 -1
- package/lib/esm/widgets/GpuProfiler.js +89 -82
- package/lib/esm/widgets/GpuProfiler.js.map +1 -1
- package/lib/esm/widgets/KeyinField.js +8 -1
- package/lib/esm/widgets/KeyinField.js.map +1 -1
- package/lib/esm/widgets/MemoryTracker.d.ts +1 -1
- package/lib/esm/widgets/MemoryTracker.d.ts.map +1 -1
- package/lib/esm/widgets/MemoryTracker.js +16 -4
- package/lib/esm/widgets/MemoryTracker.js.map +1 -1
- package/lib/esm/widgets/RenderCommandBreakdown.d.ts +1 -1
- package/lib/esm/widgets/RenderCommandBreakdown.d.ts.map +1 -1
- package/lib/esm/widgets/RenderCommandBreakdown.js +6 -2
- package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
- package/lib/esm/widgets/TileMemoryBreakdown.d.ts +1 -1
- package/lib/esm/widgets/TileMemoryBreakdown.d.ts.map +1 -1
- package/lib/esm/widgets/TileMemoryBreakdown.js +10 -8
- package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
- package/lib/esm/widgets/TileStatisticsTracker.d.ts +1 -1
- package/lib/esm/widgets/TileStatisticsTracker.d.ts.map +1 -1
- package/lib/esm/widgets/TileStatisticsTracker.js +5 -2
- package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
- package/lib/esm/widgets/ToolSettingsTracker.d.ts +1 -1
- package/lib/esm/widgets/ToolSettingsTracker.d.ts.map +1 -1
- package/lib/esm/widgets/ToolSettingsTracker.js +2 -2
- package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
- package/lib/public/locales/en/FrontendDevTools.json +494 -494
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumericInput.js","sourceRoot":"","sources":["../../../src/ui/NumericInput.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"NumericInput.js","sourceRoot":"","sources":["../../../src/ui/NumericInput.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** @alpha */\nexport type NumericInputHandler = (value: number, input: HTMLInputElement) => void;\n\n/** @alpha */\nexport interface NumericInputProps {\n handler: NumericInputHandler;\n id?: string;\n parent?: HTMLElement;\n value: number;\n display?: \"inline\" | \"none\" | \"block\";\n disabled?: boolean;\n min?: number;\n max?: number;\n step?: number;\n tooltip?: string;\n parseAsFloat?: true;\n}\n\n/** @alpha */\nexport function createNumericInput(props: NumericInputProps, useFloat: boolean = false): HTMLInputElement {\n const input = document.createElement(\"input\");\n input.type = \"number\";\n input.value = props.value.toString();\n\n input.onchange = () => {\n try {\n const value = useFloat ? parseFloat(input.value) : parseInt(input.value, 10);\n if (!Number.isNaN(value))\n props.handler(value, input);\n } catch {\n //\n }\n };\n\n if (undefined !== props.id)\n input.id = props.id;\n if (undefined !== props.display)\n input.style.display = props.display;\n if (undefined !== props.min)\n input.min = props.min.toString();\n if (undefined !== props.max)\n input.max = props.max.toString();\n if (undefined !== props.step)\n input.step = props.step.toString();\n if (undefined !== props.tooltip)\n input.title = props.tooltip;\n if (undefined !== props.disabled)\n input.disabled = props.disabled;\n if (undefined !== props.parent)\n props.parent.appendChild(input);\n\n return input;\n}\n\n/** @alpha */\nexport interface LabeledNumericInputProps extends NumericInputProps {\n name: string;\n id: string;\n divDisplay?: \"block\" | \"none\" | \"inline\";\n}\n\n/** @alpha */\nexport interface LabeledNumericInput {\n input: HTMLInputElement;\n div: HTMLDivElement;\n label: HTMLLabelElement;\n}\n\n/** @alpha */\nexport function createLabeledNumericInput(props: LabeledNumericInputProps): LabeledNumericInput {\n const div = document.createElement(\"div\");\n if (props.divDisplay)\n div.style.display = props.divDisplay;\n\n const label = document.createElement(\"label\");\n label.htmlFor = props.id;\n label.innerText = props.name;\n div.appendChild(label);\n\n const inputProps = { ...props };\n inputProps.parent = div;\n inputProps.display = \"inline\";\n const input = createNumericInput(inputProps, true === props.parseAsFloat);\n\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n if (undefined !== props.tooltip)\n div.title = props.tooltip;\n\n return { label, div, input };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioBox.js","sourceRoot":"","sources":["../../../src/ui/RadioBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"RadioBox.js","sourceRoot":"","sources":["../../../src/ui/RadioBox.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAkC/F,aAAa;AACb,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,KAAmC,CAAC;IACxC,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QAC7B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAEnB,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;QACrB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAEhD,KAAK,CAAC,KAAK,GAAG,CAAC,SAAS,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAExE,MAAM,UAAU,GAAqB,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrE,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAEnC,UAAU,CAAC,OAAO,GAAG,GAAG,EAAE;YACxB,IAAI,CAAC;gBACH,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;gBACrB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,QAAQ,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE;YACJ,CAAC;QACH,CAAC,CAAC;QACF,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YACvC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7B,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,QAAQ,GAAG,CAAC,KAAsB,EAAW,EAAE;QACnD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,UAAU,GAAY,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACzF,IAAI,UAAU,EAAE,CAAC;YACf,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;YAC3E,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** @alpha */\nexport interface RadioBoxEntry {\n value: number | string | undefined;\n label: string;\n}\n\n/** @alpha */\nexport type RadioBoxHandler = (value: string, form: HTMLFormElement) => void;\n\n/** @alpha */\nexport interface RadioBoxProps {\n id: string;\n entries: RadioBoxEntry[];\n handler: RadioBoxHandler;\n name?: string;\n parent?: HTMLElement;\n defaultValue?: number | string;\n vertical?: boolean;\n}\n\n/** @alpha */\nexport interface RadioBox {\n label?: HTMLLabelElement;\n setValue: (newValue: number | string) => boolean;\n div: HTMLDivElement;\n form: HTMLFormElement;\n}\n\n/** @alpha */\nexport function createRadioBox(props: RadioBoxProps): RadioBox {\n const div = document.createElement(\"div\");\n\n let label: HTMLLabelElement | undefined;\n if (undefined !== props.name) {\n label = document.createElement(\"label\");\n label.htmlFor = props.id;\n label.innerText = props.name;\n div.appendChild(label);\n }\n\n const form = document.createElement(\"form\");\n form.id = props.id;\n\n const radioBoxes: HTMLInputElement[] = [];\n\n for (const entry of props.entries) {\n const input = document.createElement(\"input\");\n input.type = \"radio\";\n input.name = props.name ? props.name : props.id;\n\n input.value = (undefined !== entry.value) ? entry.value.toString() : \"\";\n\n const inputLabel: HTMLLabelElement = document.createElement(\"label\");\n inputLabel.innerText = entry.label;\n\n inputLabel.onclick = () => {\n try {\n input.checked = true;\n const value = input.value;\n props.handler(value, form);\n } catch {\n //\n }\n };\n\n input.onchange = () => {\n try {\n const value = input.value;\n props.handler(value, form);\n } catch {\n //\n }\n };\n if (props.defaultValue === entry.value) {\n input.checked = true;\n }\n\n radioBoxes.push(input);\n\n if (props.vertical) {\n const container = document.createElement(\"div\");\n container.appendChild(input);\n container.appendChild(inputLabel);\n form.appendChild(container);\n } else {\n form.appendChild(input);\n form.appendChild(inputLabel);\n }\n }\n\n div.appendChild(form);\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n const setValue = (value: number | string): boolean => {\n const stringValue = value.toString();\n const validValue: boolean = radioBoxes.map((input) => input.value).includes(stringValue);\n if (validValue) {\n radioBoxes.forEach((input) => input.checked = input.value === stringValue);\n props.handler(stringValue, form);\n }\n return validValue;\n };\n\n return { div, label, setValue, form };\n}\n"]}
|
package/lib/esm/ui/Slider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../../src/ui/Slider.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAgC/F,aAAa;AACb,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC5B,IAAI,KAAK,CAAC,aAAa;QACrB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAEhD,IAAI,KAAK,CAAC,SAAS;QACjB,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAExC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IACzB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACpC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAExB,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,aAAa;AACb,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,KAAa;IACjE,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,UAAU,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"Slider.js","sourceRoot":"","sources":["../../../src/ui/Slider.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAgC/F,aAAa;AACb,MAAM,UAAU,YAAY,CAAC,KAAkB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC5B,IAAI,KAAK,CAAC,aAAa;QACrB,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAEhD,IAAI,KAAK,CAAC,SAAS;QACjB,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAExC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IACzB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACpC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAExB,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,aAAa;AACb,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,KAAa;IACjE,UAAU,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAChC,UAAU,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACvC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** @alpha */\nexport interface Slider {\n label: HTMLLabelElement;\n slider: HTMLInputElement;\n div: HTMLDivElement;\n readout: HTMLLabelElement;\n}\n\n/** @alpha */\nexport type SliderHandler = (slider: HTMLInputElement) => void;\n\n/** @alpha */\nexport interface SliderProps {\n name: string;\n handler: SliderHandler;\n id: string;\n parent?: HTMLElement;\n min: string;\n max: string;\n step: string;\n value: string;\n verticalAlign?: \"middle\" | false;\n textAlign?: \"right\" | false;\n readout?: \"right\" | false;\n}\n\n/** @alpha */\nexport function createSlider(props: SliderProps): Slider {\n const div = document.createElement(\"div\");\n div.style.display = \"block\";\n if (props.verticalAlign)\n div.style.verticalAlign = props.verticalAlign;\n\n if (props.textAlign)\n div.style.textAlign = props.textAlign;\n\n const label = document.createElement(\"label\");\n label.htmlFor = props.id;\n label.innerText = props.name;\n div.appendChild(label);\n\n const readout = document.createElement(\"label\");\n\n const slider = document.createElement(\"input\");\n slider.type = \"range\";\n slider.className = \"slider\";\n slider.id = props.id;\n slider.min = props.min;\n slider.max = props.max;\n slider.step = props.step;\n slider.value = props.value;\n slider.addEventListener(\"input\", () => {\n props.handler(slider);\n readout.innerText = slider.value;\n });\n div.appendChild(slider);\n\n if (props.readout === \"right\") {\n readout.innerText = slider.value;\n div.appendChild(readout);\n }\n\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n return { label, slider, div, readout };\n}\n\n/** @alpha */\nexport function updateSliderValue(sliderCtrl: Slider, value: string) {\n sliderCtrl.slider.value = value;\n sliderCtrl.readout.innerText = value;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextBox.js","sourceRoot":"","sources":["../../../src/ui/TextBox.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAqC/F,aAAa;AACb,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,KAAK,CAAC,MAAM;QACvB,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,IAAI,KAAK,CAAC;IACV,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;YACxB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QAE3B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IACtB,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAExB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,sFAAsF;IACtF,MAAM,eAAe,GAAG,CAAC,EAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;IACpE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC;IACtD,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QAClC,OAAO,CAAC,UAAU,GAAG,CAAC,EAAiB,EAAE,EAAE;YACzC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,CAAC,eAAe,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,uDAAuD;IAC/F,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACjC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"TextBox.js","sourceRoot":"","sources":["../../../src/ui/TextBox.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAqC/F,aAAa;AACb,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,KAAK,CAAC,MAAM;QACvB,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,IAAI,KAAK,CAAC;IACV,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAC9B,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9B,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;YACxB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QAE3B,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;IACtB,IAAI,SAAS,KAAK,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAExB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzB,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;QAC5B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,sFAAsF;IACtF,MAAM,eAAe,GAAG,CAAC,EAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;IACpE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,eAAe,CAAC;IACtD,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IAC9C,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;QAClC,OAAO,CAAC,UAAU,GAAG,CAAC,EAAiB,EAAE,EAAE;YACzC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,CAAC,eAAe,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,UAAU,GAAG,eAAe,CAAC,CAAC,uDAAuD;IAC/F,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QAC/B,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,SAAS,KAAK,KAAK,CAAC,OAAO;QAC7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;IAE5B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACjC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Controls\n */\n\n/** Wraps an HTML text input field.\n * @beta\n */\nexport interface TextBox {\n /** The label, if the text box has one. */\n label?: HTMLLabelElement;\n /** The text input element. */\n textbox: HTMLInputElement;\n /** The div containing the text box. */\n div: HTMLDivElement;\n}\n\n/** @alpha */\nexport type TextBoxHandler = (textbox: HTMLInputElement) => void;\n\n/** @alpha */\nexport type TextBoxKeyPressHandler = (textbox: HTMLInputElement, ev: KeyboardEvent) => void;\n\n/** @alpha */\nexport interface TextBoxProps {\n label?: string;\n id?: string;\n parent?: HTMLElement;\n handler?: TextBoxHandler;\n keypresshandler?: TextBoxKeyPressHandler;\n focushandler?: TextBoxHandler;\n tooltip?: string;\n inline?: boolean;\n list?: string; // if defined, contains the id of a datalist to bind to this textbox for autocompletion\n}\n\n/** @alpha */\nexport function createTextBox(props: TextBoxProps): TextBox {\n const div = document.createElement(\"div\");\n if (true === props.inline)\n div.style.display = \"inline\";\n\n let label;\n if (undefined !== props.label) {\n label = document.createElement(\"label\");\n label.innerText = props.label;\n if (undefined !== props.id)\n label.htmlFor = props.id;\n\n div.appendChild(label);\n }\n\n const textbox = document.createElement(\"input\");\n textbox.type = \"text\";\n if (undefined !== props.id)\n textbox.id = props.id;\n\n div.appendChild(textbox);\n\n if (undefined !== props.parent)\n props.parent.appendChild(div);\n\n const handler = props.handler;\n if (undefined !== handler) {\n textbox.onchange = () => handler(textbox);\n }\n\n // Don't want the document's listeners intepreting keypresses as keyboard shortcuts...\n const stopPropagation = (ev: KeyboardEvent) => ev.stopPropagation();\n textbox.onkeydown = textbox.onkeyup = stopPropagation;\n const keypresshandler = props.keypresshandler;\n if (undefined !== keypresshandler) {\n textbox.onkeypress = (ev: KeyboardEvent) => { // eslint-disable-line @typescript-eslint/no-deprecated\n keypresshandler(textbox, ev);\n ev.stopPropagation();\n };\n } else {\n textbox.onkeypress = stopPropagation; // eslint-disable-line @typescript-eslint/no-deprecated\n }\n\n const focushandler = props.focushandler;\n if (undefined !== focushandler) {\n textbox.onfocus = () => focushandler(textbox);\n }\n\n if (undefined !== props.list) {\n textbox.setAttribute(\"list\", props.list);\n }\n\n if (undefined !== props.tooltip)\n div.title = props.tooltip;\n\n return { label, textbox, div };\n}\n"]}
|
|
@@ -32,7 +32,7 @@ export declare class DiagnosticsPanel {
|
|
|
32
32
|
readonly keyinField?: KeyinField;
|
|
33
33
|
constructor(vp: Viewport, props?: DiagnosticsPanelProps);
|
|
34
34
|
get element(): HTMLElement;
|
|
35
|
-
dispose(): void;
|
|
35
|
+
[Symbol.dispose](): void;
|
|
36
36
|
private addSeparator;
|
|
37
37
|
}
|
|
38
38
|
//# sourceMappingURL=DiagnosticsPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiagnosticsPanel.d.ts","sourceRoot":"","sources":["../../../src/widgets/DiagnosticsPanel.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAgB;IAChD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAyB;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;IAC5D,SAAgB,UAAU,CAAC,EAAE,UAAU,CAAC;gBAErB,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,qBAAqB;IAoD9D,IAAW,OAAO,IAAI,WAAW,CAA0B;IAEpD,OAAO,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"DiagnosticsPanel.d.ts","sourceRoot":"","sources":["../../../src/widgets/DiagnosticsPanel.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,GAAG,CAAC,EAAE,OAAO,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAc;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAgB;IAChD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAyB;IAC1D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAsB;IAC5D,SAAgB,UAAU,CAAC,EAAE,UAAU,CAAC;gBAErB,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,qBAAqB;IAoD9D,IAAW,OAAO,IAAI,WAAW,CAA0B;IAEpD,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAa/B,OAAO,CAAC,YAAY;CAGrB"}
|
|
@@ -18,6 +18,16 @@ import { ToolSettingsTracker } from "./ToolSettingsTracker";
|
|
|
18
18
|
* @beta
|
|
19
19
|
*/
|
|
20
20
|
export class DiagnosticsPanel {
|
|
21
|
+
_element;
|
|
22
|
+
_parentElement;
|
|
23
|
+
_fpsTracker;
|
|
24
|
+
_memoryTracker;
|
|
25
|
+
_tileMemoryBreakdown;
|
|
26
|
+
_renderCommands;
|
|
27
|
+
_statsTracker;
|
|
28
|
+
_gpuProfiler;
|
|
29
|
+
_toolSettingsTracker;
|
|
30
|
+
keyinField;
|
|
21
31
|
constructor(vp, props) {
|
|
22
32
|
const exclude = (undefined !== props && undefined !== props.exclude) ? props.exclude : {};
|
|
23
33
|
this._element = document.createElement("div");
|
|
@@ -60,7 +70,7 @@ export class DiagnosticsPanel {
|
|
|
60
70
|
this._toolSettingsTracker = new ToolSettingsTracker(this._element, vp);
|
|
61
71
|
}
|
|
62
72
|
get element() { return this._element; }
|
|
63
|
-
dispose() {
|
|
73
|
+
[Symbol.dispose]() {
|
|
64
74
|
dispose(this._fpsTracker);
|
|
65
75
|
dispose(this._memoryTracker);
|
|
66
76
|
dispose(this._tileMemoryBreakdown);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiagnosticsPanel.js","sourceRoot":"","sources":["../../../src/widgets/DiagnosticsPanel.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAmB5D;;GAEG;AACH,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"DiagnosticsPanel.js","sourceRoot":"","sources":["../../../src/widgets/DiagnosticsPanel.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { dispose } from \"@itwin/core-bentley\";\nimport { Viewport } from \"@itwin/core-frontend\";\nimport { FpsTracker } from \"./FpsTracker\";\nimport { GpuProfiler } from \"./GpuProfiler\";\nimport { KeyinField } from \"./KeyinField\";\nimport { MemoryTracker } from \"./MemoryTracker\";\nimport { RenderCommandBreakdown } from \"./RenderCommandBreakdown\";\nimport { TileMemoryBreakdown } from \"./TileMemoryBreakdown\";\nimport { TileStatisticsTracker } from \"./TileStatisticsTracker\";\nimport { ToolSettingsTracker } from \"./ToolSettingsTracker\";\n\n/** Options for configuring a [[DiagnosticsPanel]].\n * @beta\n */\nexport interface DiagnosticsPanelProps {\n /** Widgets to exclude from the panel. */\n exclude?: {\n keyin?: boolean;\n fps?: boolean;\n tileStats?: boolean;\n memory?: boolean;\n tileMemoryBreakdown?: boolean;\n renderCommands?: boolean;\n gpuProfiler?: boolean;\n toolSettings?: boolean;\n };\n}\n\n/** Consolidates many other widgets into a single panel.\n * @beta\n */\nexport class DiagnosticsPanel {\n private readonly _element: HTMLElement;\n private readonly _parentElement?: HTMLElement;\n private readonly _fpsTracker?: FpsTracker;\n private readonly _memoryTracker?: MemoryTracker;\n private readonly _tileMemoryBreakdown?: TileMemoryBreakdown;\n private readonly _renderCommands?: RenderCommandBreakdown;\n private readonly _statsTracker?: TileStatisticsTracker;\n private readonly _gpuProfiler?: GpuProfiler;\n private readonly _toolSettingsTracker?: ToolSettingsTracker;\n public readonly keyinField?: KeyinField;\n\n public constructor(vp: Viewport, props?: DiagnosticsPanelProps) {\n const exclude = (undefined !== props && undefined !== props.exclude) ? props.exclude : {};\n\n this._element = document.createElement(\"div\");\n this._element.className = \"debugPanel\";\n\n if (true !== exclude.fps) {\n this._fpsTracker = new FpsTracker(this._element, vp);\n this.addSeparator();\n }\n\n if (true !== exclude.keyin) {\n this.keyinField = new KeyinField({\n parent: this._element,\n baseId: \"diagnosticsPanelKeyin\",\n wantButton: true,\n wantLabel: true,\n historyLength: 20,\n });\n\n this.addSeparator();\n }\n\n if (true !== exclude.tileStats) {\n this._statsTracker = new TileStatisticsTracker(this._element, vp);\n this.addSeparator();\n }\n\n if (true !== exclude.tileMemoryBreakdown) {\n this._tileMemoryBreakdown = new TileMemoryBreakdown(this._element);\n this.addSeparator();\n }\n\n if (!exclude.renderCommands) {\n this._renderCommands = new RenderCommandBreakdown(this._element);\n this.addSeparator();\n }\n\n if (true !== exclude.memory) {\n this._memoryTracker = new MemoryTracker(this._element, vp);\n this.addSeparator();\n }\n\n if (true !== exclude.gpuProfiler) {\n this._gpuProfiler = new GpuProfiler(this._element);\n this.addSeparator();\n }\n\n if (true !== exclude.toolSettings)\n this._toolSettingsTracker = new ToolSettingsTracker(this._element, vp);\n }\n\n public get element(): HTMLElement { return this._element; }\n\n public [Symbol.dispose](): void {\n dispose(this._fpsTracker);\n dispose(this._memoryTracker);\n dispose(this._tileMemoryBreakdown);\n dispose(this._renderCommands);\n dispose(this._statsTracker);\n dispose(this._gpuProfiler);\n dispose(this._toolSettingsTracker);\n\n if (undefined !== this._parentElement)\n this._parentElement.removeChild(this._element);\n }\n\n private addSeparator(): void {\n this._element.appendChild(document.createElement(\"hr\"));\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FpsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAA8B,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5E;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;gBAEZ,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ;IAUnD,OAAO,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"FpsTracker.d.ts","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":"AAKA;;GAEG;AAEH,OAAO,EAA8B,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG5E;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAW;gBAEZ,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ;IAUnD,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAI/B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,MAAM;IAed,OAAO,CAAC,SAAS;CAKlB"}
|
|
@@ -12,6 +12,10 @@ import { createCheckBox } from "../ui/CheckBox";
|
|
|
12
12
|
* @beta
|
|
13
13
|
*/
|
|
14
14
|
export class FpsTracker {
|
|
15
|
+
_label;
|
|
16
|
+
_metrics;
|
|
17
|
+
_curIntervalId;
|
|
18
|
+
_vp;
|
|
15
19
|
constructor(parent, viewport) {
|
|
16
20
|
this._vp = viewport;
|
|
17
21
|
this._label = createCheckBox({
|
|
@@ -21,7 +25,7 @@ export class FpsTracker {
|
|
|
21
25
|
handler: (cb) => this.toggle(cb.checked),
|
|
22
26
|
}).label;
|
|
23
27
|
}
|
|
24
|
-
dispose() {
|
|
28
|
+
[Symbol.dispose]() {
|
|
25
29
|
this.toggle(false);
|
|
26
30
|
}
|
|
27
31
|
clearInterval() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FpsTracker.js","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"FpsTracker.js","sourceRoot":"","sources":["../../../src/widgets/FpsTracker.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,UAAU;IACJ,MAAM,CAAmB;IAClC,QAAQ,CAAsB;IAC9B,cAAc,CAAU;IACf,GAAG,CAAW;IAE/B,YAAmB,MAAmB,EAAE,QAAkB;QACxD,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC;YAC3B,MAAM;YACN,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,mBAAmB;YACvB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC;SACzC,CAAC,CAAC,KAAK,CAAC;IACX,CAAC;IAEM,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAEO,aAAa;QACnB,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,OAAgB;QAC7B,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;QACtC,CAAC;QAEA,IAAI,CAAC,GAAG,CAAC,MAAiB,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjE,CAAC;IAEO,SAAS;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAS,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,EAAE,CAAC;IACxC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { PerformanceMetrics, Target, Viewport } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\n\n/** Displays average frames-per-second.\n * NOTE: Enabling fps tracking causes a new frame to render on every tick of the render loop, which may negatively impact battery life.\n * @beta\n */\nexport class FpsTracker {\n private readonly _label: HTMLLabelElement;\n private _metrics?: PerformanceMetrics;\n private _curIntervalId?: number;\n private readonly _vp: Viewport;\n\n public constructor(parent: HTMLElement, viewport: Viewport) {\n this._vp = viewport;\n this._label = createCheckBox({\n parent,\n name: \"Track FPS\",\n id: \"fpsTracker_toggle\",\n handler: (cb) => this.toggle(cb.checked),\n }).label;\n }\n\n public [Symbol.dispose](): void {\n this.toggle(false);\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n window.clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private toggle(enabled: boolean): void {\n this._vp.continuousRendering = enabled;\n if (enabled) {\n this._metrics = new PerformanceMetrics(false, true);\n this._curIntervalId = window.setInterval(() => this.updateFPS(), 500);\n this._label.innerText = \"Tracking FPS...\";\n } else {\n this._metrics = undefined;\n this.clearInterval();\n this._label.innerText = \"Track FPS\";\n }\n\n (this._vp.target as Target).performanceMetrics = this._metrics;\n }\n\n private updateFPS(): void {\n const metrics = this._metrics!;\n const fps = (metrics.spfTimes.length / metrics.spfSum).toFixed(2);\n this._label.innerText = `FPS: ${fps}`;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GpuProfiler.d.ts","sourceRoot":"","sources":["../../../src/widgets/GpuProfiler.ts"],"names":[],"mappings":"AA2FA,aAAa;AACb,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IAEzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,YAAY,CAAU;gBAEX,MAAM,EAAE,WAAW;IAmC/B,OAAO,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"GpuProfiler.d.ts","sourceRoot":"","sources":["../../../src/widgets/GpuProfiler.ts"],"names":[],"mappings":"AA2FA,aAAa;AACb,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IAEzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,YAAY,CAAU;gBAEX,MAAM,EAAE,WAAW;IAmC/B,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAI/B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,YAAY,CAQlB;IAEF,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,gBAAgB,CA0EtB;CACH"}
|
|
@@ -51,88 +51,14 @@ function createTraceFromTimerResults(timerResults) {
|
|
|
51
51
|
}
|
|
52
52
|
/** @alpha */
|
|
53
53
|
export class GpuProfiler {
|
|
54
|
+
_div;
|
|
55
|
+
_resultsDiv;
|
|
56
|
+
_results;
|
|
57
|
+
_debugControl;
|
|
58
|
+
_recordButton;
|
|
59
|
+
_recordedResults;
|
|
60
|
+
_isRecording;
|
|
54
61
|
constructor(parent) {
|
|
55
|
-
this._clickRecord = () => {
|
|
56
|
-
if (!this._isRecording) {
|
|
57
|
-
this._isRecording = true;
|
|
58
|
-
this._recordButton.innerText = "Stop Recording";
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
this.stopRecording();
|
|
62
|
-
};
|
|
63
|
-
this._resultsCallback = (result) => {
|
|
64
|
-
if (this._isRecording)
|
|
65
|
-
this._recordedResults.push(result);
|
|
66
|
-
const fragment = document.createDocumentFragment();
|
|
67
|
-
const numSavedFrames = 120;
|
|
68
|
-
let lastValue;
|
|
69
|
-
const changedResults = new Array(this._results.length); // default values false
|
|
70
|
-
const printDepth = (depth, currentRes) => {
|
|
71
|
-
const index = this._results.findIndex((res) => res.label === currentRes.label);
|
|
72
|
-
if (index < 0) { // Add brand new entry
|
|
73
|
-
const data = {
|
|
74
|
-
label: currentRes.label,
|
|
75
|
-
paddingLeft: `${depth}em`,
|
|
76
|
-
sum: currentRes.nanoseconds,
|
|
77
|
-
values: [currentRes.nanoseconds],
|
|
78
|
-
};
|
|
79
|
-
if (lastValue === undefined) {
|
|
80
|
-
this._results.unshift(data);
|
|
81
|
-
changedResults.unshift(true);
|
|
82
|
-
}
|
|
83
|
-
else if (currentRes.label === "Read Pixels") {
|
|
84
|
-
this._results.push(data); // Read Pixels should go at the end of the list
|
|
85
|
-
changedResults.push(true);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
const prevIndex = this._results.findIndex((res) => res.label === lastValue);
|
|
89
|
-
this._results.splice(prevIndex + 1, 0, data);
|
|
90
|
-
changedResults.splice(prevIndex + 1, 0, true);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
else { // Edit old entry
|
|
94
|
-
let oldVal = 0.0;
|
|
95
|
-
const savedResults = this._results[index];
|
|
96
|
-
if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between
|
|
97
|
-
oldVal = savedResults.values.shift();
|
|
98
|
-
}
|
|
99
|
-
const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise
|
|
100
|
-
savedResults.sum += newVal - oldVal;
|
|
101
|
-
savedResults.values.push(newVal);
|
|
102
|
-
changedResults[index] = true;
|
|
103
|
-
}
|
|
104
|
-
lastValue = currentRes.label;
|
|
105
|
-
if (!currentRes.children)
|
|
106
|
-
return;
|
|
107
|
-
for (const childRes of currentRes.children)
|
|
108
|
-
printDepth(depth + 1, childRes);
|
|
109
|
-
};
|
|
110
|
-
printDepth(0, result);
|
|
111
|
-
this._results.forEach((value, index) => {
|
|
112
|
-
if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.
|
|
113
|
-
const oldVal = value.values.length >= numSavedFrames ? value.values.shift() : 0.0;
|
|
114
|
-
value.sum -= oldVal;
|
|
115
|
-
value.values.push(0.0);
|
|
116
|
-
}
|
|
117
|
-
const div = document.createElement("div");
|
|
118
|
-
div.style.display = "flex";
|
|
119
|
-
div.style.width = "75%";
|
|
120
|
-
const textLabel = document.createElement("text");
|
|
121
|
-
textLabel.innerText = `${value.label}`;
|
|
122
|
-
textLabel.style.paddingLeft = value.paddingLeft;
|
|
123
|
-
div.appendChild(textLabel);
|
|
124
|
-
const divLine = document.createElement("div");
|
|
125
|
-
divLine.style.flexGrow = "1";
|
|
126
|
-
divLine.style.borderBottom = "dotted 1px";
|
|
127
|
-
div.appendChild(divLine);
|
|
128
|
-
const textValue = document.createElement("text");
|
|
129
|
-
textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\n`;
|
|
130
|
-
div.appendChild(textValue);
|
|
131
|
-
fragment.appendChild(div);
|
|
132
|
-
});
|
|
133
|
-
this._resultsDiv.innerHTML = "";
|
|
134
|
-
this._resultsDiv.appendChild(fragment);
|
|
135
|
-
};
|
|
136
62
|
this._debugControl = IModelApp.renderSystem.debugControl;
|
|
137
63
|
const checkBox = createCheckBox({
|
|
138
64
|
parent,
|
|
@@ -160,7 +86,7 @@ export class GpuProfiler {
|
|
|
160
86
|
this._div.appendChild(this._resultsDiv);
|
|
161
87
|
parent.appendChild(this._div);
|
|
162
88
|
}
|
|
163
|
-
dispose() {
|
|
89
|
+
[Symbol.dispose]() {
|
|
164
90
|
this._debugControl.resultsCallback = undefined;
|
|
165
91
|
}
|
|
166
92
|
toggleProfileCheckBox(isEnabled) {
|
|
@@ -175,6 +101,14 @@ export class GpuProfiler {
|
|
|
175
101
|
this.stopRecording();
|
|
176
102
|
}
|
|
177
103
|
}
|
|
104
|
+
_clickRecord = () => {
|
|
105
|
+
if (!this._isRecording) {
|
|
106
|
+
this._isRecording = true;
|
|
107
|
+
this._recordButton.innerText = "Stop Recording";
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
this.stopRecording();
|
|
111
|
+
};
|
|
178
112
|
stopRecording() {
|
|
179
113
|
this._isRecording = false;
|
|
180
114
|
this._recordButton.innerText = "Record Profile";
|
|
@@ -185,5 +119,78 @@ export class GpuProfiler {
|
|
|
185
119
|
this._recordedResults = [];
|
|
186
120
|
}
|
|
187
121
|
}
|
|
122
|
+
_resultsCallback = (result) => {
|
|
123
|
+
if (this._isRecording)
|
|
124
|
+
this._recordedResults.push(result);
|
|
125
|
+
const fragment = document.createDocumentFragment();
|
|
126
|
+
const numSavedFrames = 120;
|
|
127
|
+
let lastValue;
|
|
128
|
+
const changedResults = new Array(this._results.length); // default values false
|
|
129
|
+
const printDepth = (depth, currentRes) => {
|
|
130
|
+
const index = this._results.findIndex((res) => res.label === currentRes.label);
|
|
131
|
+
if (index < 0) { // Add brand new entry
|
|
132
|
+
const data = {
|
|
133
|
+
label: currentRes.label,
|
|
134
|
+
paddingLeft: `${depth}em`,
|
|
135
|
+
sum: currentRes.nanoseconds,
|
|
136
|
+
values: [currentRes.nanoseconds],
|
|
137
|
+
};
|
|
138
|
+
if (lastValue === undefined) {
|
|
139
|
+
this._results.unshift(data);
|
|
140
|
+
changedResults.unshift(true);
|
|
141
|
+
}
|
|
142
|
+
else if (currentRes.label === "Read Pixels") {
|
|
143
|
+
this._results.push(data); // Read Pixels should go at the end of the list
|
|
144
|
+
changedResults.push(true);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const prevIndex = this._results.findIndex((res) => res.label === lastValue);
|
|
148
|
+
this._results.splice(prevIndex + 1, 0, data);
|
|
149
|
+
changedResults.splice(prevIndex + 1, 0, true);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else { // Edit old entry
|
|
153
|
+
let oldVal = 0.0;
|
|
154
|
+
const savedResults = this._results[index];
|
|
155
|
+
if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between
|
|
156
|
+
oldVal = savedResults.values.shift();
|
|
157
|
+
}
|
|
158
|
+
const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise
|
|
159
|
+
savedResults.sum += newVal - oldVal;
|
|
160
|
+
savedResults.values.push(newVal);
|
|
161
|
+
changedResults[index] = true;
|
|
162
|
+
}
|
|
163
|
+
lastValue = currentRes.label;
|
|
164
|
+
if (!currentRes.children)
|
|
165
|
+
return;
|
|
166
|
+
for (const childRes of currentRes.children)
|
|
167
|
+
printDepth(depth + 1, childRes);
|
|
168
|
+
};
|
|
169
|
+
printDepth(0, result);
|
|
170
|
+
this._results.forEach((value, index) => {
|
|
171
|
+
if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.
|
|
172
|
+
const oldVal = value.values.length >= numSavedFrames ? value.values.shift() : 0.0;
|
|
173
|
+
value.sum -= oldVal;
|
|
174
|
+
value.values.push(0.0);
|
|
175
|
+
}
|
|
176
|
+
const div = document.createElement("div");
|
|
177
|
+
div.style.display = "flex";
|
|
178
|
+
div.style.width = "75%";
|
|
179
|
+
const textLabel = document.createElement("text");
|
|
180
|
+
textLabel.innerText = `${value.label}`;
|
|
181
|
+
textLabel.style.paddingLeft = value.paddingLeft;
|
|
182
|
+
div.appendChild(textLabel);
|
|
183
|
+
const divLine = document.createElement("div");
|
|
184
|
+
divLine.style.flexGrow = "1";
|
|
185
|
+
divLine.style.borderBottom = "dotted 1px";
|
|
186
|
+
div.appendChild(divLine);
|
|
187
|
+
const textValue = document.createElement("text");
|
|
188
|
+
textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\n`;
|
|
189
|
+
div.appendChild(textValue);
|
|
190
|
+
fragment.appendChild(div);
|
|
191
|
+
});
|
|
192
|
+
this._resultsDiv.innerHTML = "";
|
|
193
|
+
this._resultsDiv.appendChild(fragment);
|
|
194
|
+
};
|
|
188
195
|
}
|
|
189
196
|
//# sourceMappingURL=GpuProfiler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GpuProfiler.js","sourceRoot":"","sources":["../../../src/widgets/GpuProfiler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { saveAs } from \"file-saver\";\r\nimport { GLTimerResult, IModelApp, RenderSystemDebugControl } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\n\r\n/** Trace Event Format, viewable with chrome://tracing\r\n * https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit\r\n */\r\ninterface ChromeTrace {\r\n traceEvents: ChromeTraceEvent[];\r\n}\r\n\r\ninterface ChromeTraceEvent {\r\n /** Required by chrome://tracing */\r\n pid: 1;\r\n /** Timestamp in microseconds */\r\n ts: number;\r\n /** Duration in microseconds */\r\n dur: number;\r\n /** Denotes \"complete\" event */\r\n ph: \"X\";\r\n /** Label for chrome://tracing view */\r\n name: string;\r\n /** dummy value, args must be defined for entries to be clickable in chrome://tracing */\r\n args: ChromeTraceEventArgs;\r\n}\r\n\r\ninterface ChromeTraceEventArgs { 0: 0 }\r\nconst dummyArgs: ChromeTraceEventArgs = { 0: 0 }; // Reuse instead of allocating for each entry\r\n\r\n/**\r\n * @param name Label for the trace event\r\n * @param start Timestamp in microseconds of when trace event started\r\n * @param duration Duration in microseconds of trace event\r\n */\r\nfunction createTraceEvent(name: string, start: number, duration: number): ChromeTraceEvent {\r\n return {\r\n pid: 1,\r\n ts: start,\r\n dur: duration,\r\n ph: \"X\",\r\n name,\r\n args: dummyArgs,\r\n };\r\n}\r\n\r\nfunction createTraceFromTimerResults(timerResults: GLTimerResult[]): ChromeTrace {\r\n const traceEvents: ChromeTraceEvent[] = [];\r\n\r\n const addChildren = (startTime: number, children: GLTimerResult[]) => {\r\n for (const child of children) {\r\n if (child.nanoseconds < 100)\r\n continue;\r\n const microseconds = child.nanoseconds / 1E3;\r\n traceEvents.push(createTraceEvent(child.label, startTime, microseconds));\r\n if (child.children)\r\n addChildren(startTime, child.children);\r\n startTime += microseconds;\r\n }\r\n };\r\n\r\n let frameStartTime = 0;\r\n let frameNumber = 0;\r\n for (const tr of timerResults) {\r\n const microseconds = tr.nanoseconds / 1E3;\r\n traceEvents.push(createTraceEvent(`Frame ${frameNumber}`, frameStartTime, microseconds));\r\n if (tr.children)\r\n addChildren(frameStartTime, tr.children);\r\n frameStartTime += microseconds;\r\n ++frameNumber;\r\n }\r\n\r\n return { traceEvents };\r\n}\r\n\r\n/** @internal */\r\ninterface GpuProfilerResults {\r\n label: string;\r\n sum: number;\r\n paddingLeft: string;\r\n values: number[];\r\n}\r\n\r\n/** @alpha */\r\nexport class GpuProfiler {\r\n private readonly _div: HTMLDivElement;\r\n private readonly _resultsDiv: HTMLDivElement;\r\n private readonly _results: GpuProfilerResults[];\r\n private readonly _debugControl: RenderSystemDebugControl;\r\n\r\n private readonly _recordButton!: HTMLButtonElement;\r\n private _recordedResults: GLTimerResult[];\r\n private _isRecording: boolean;\r\n\r\n public constructor(parent: HTMLElement) {\r\n this._debugControl = IModelApp.renderSystem.debugControl!;\r\n\r\n const checkBox = createCheckBox({\r\n parent,\r\n name: \"Profile GPU\",\r\n id: \"gpu-profiler-toggle\",\r\n handler: (cb) => this.toggleProfileCheckBox(cb.checked),\r\n });\r\n\r\n if (!this._debugControl.isGLTimerSupported) {\r\n checkBox.checkbox.disabled = true;\r\n checkBox.div.title = \"EXT_disjoint_timer_query is not available in this browser\";\r\n }\r\n\r\n this._div = document.createElement(\"div\");\r\n this._div.style.display = \"none\";\r\n\r\n this._recordButton = document.createElement(\"button\");\r\n this._recordButton.style.textAlign = \"center\";\r\n this._isRecording = false;\r\n this._recordButton.innerText = \"Record Profile\";\r\n this._recordButton.title = \"Record a profile to open with chrome://tracing\";\r\n this._recordedResults = [];\r\n this._recordButton.addEventListener(\"click\", this._clickRecord);\r\n this._div.appendChild(this._recordButton);\r\n\r\n this._results = [];\r\n this._resultsDiv = document.createElement(\"div\");\r\n this._resultsDiv.style.textAlign = \"left\";\r\n this._div.appendChild(this._resultsDiv);\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public dispose(): void {\r\n this._debugControl.resultsCallback = undefined;\r\n }\r\n\r\n private toggleProfileCheckBox(isEnabled: boolean): void {\r\n if (isEnabled) {\r\n this._debugControl.resultsCallback = this._resultsCallback;\r\n this._resultsDiv.innerHTML = \"\";\r\n this._div.style.display = \"block\";\r\n } else {\r\n this._debugControl.resultsCallback = undefined;\r\n this._div.style.display = \"none\";\r\n this.stopRecording();\r\n }\r\n }\r\n\r\n private _clickRecord = () => {\r\n if (!this._isRecording) {\r\n this._isRecording = true;\r\n this._recordButton.innerText = \"Stop Recording\";\r\n return;\r\n }\r\n\r\n this.stopRecording();\r\n };\r\n\r\n private stopRecording() {\r\n this._isRecording = false;\r\n this._recordButton.innerText = \"Record Profile\";\r\n\r\n if (this._recordedResults.length !== 0) {\r\n const chromeTrace = createTraceFromTimerResults(this._recordedResults);\r\n const blob = new Blob([JSON.stringify(chromeTrace)], { type: \"application/json;charset=utf-8\" });\r\n saveAs(blob, \"gpu-profile.json\");\r\n this._recordedResults = [];\r\n }\r\n }\r\n\r\n private _resultsCallback = (result: GLTimerResult): void => {\r\n if (this._isRecording)\r\n this._recordedResults.push(result);\r\n\r\n const fragment = document.createDocumentFragment();\r\n const numSavedFrames = 120;\r\n let lastValue: string;\r\n const changedResults = new Array<boolean>(this._results.length); // default values false\r\n const printDepth = (depth: number, currentRes: GLTimerResult) => {\r\n const index = this._results.findIndex((res) => res.label === currentRes.label);\r\n if (index < 0) { // Add brand new entry\r\n const data: GpuProfilerResults = {\r\n label: currentRes.label,\r\n paddingLeft: `${depth}em`,\r\n sum: currentRes.nanoseconds,\r\n values: [currentRes.nanoseconds],\r\n };\r\n if (lastValue === undefined) {\r\n this._results.unshift(data);\r\n changedResults.unshift(true);\r\n } else if (currentRes.label === \"Read Pixels\") {\r\n this._results.push(data); // Read Pixels should go at the end of the list\r\n changedResults.push(true);\r\n } else {\r\n const prevIndex = this._results.findIndex((res) => res.label === lastValue);\r\n this._results.splice(prevIndex + 1, 0, data);\r\n changedResults.splice(prevIndex + 1, 0, true);\r\n }\r\n } else { // Edit old entry\r\n let oldVal = 0.0;\r\n const savedResults = this._results[index];\r\n if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between\r\n oldVal = savedResults.values.shift()!;\r\n }\r\n const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise\r\n savedResults.sum += newVal - oldVal;\r\n savedResults.values.push(newVal);\r\n changedResults[index] = true;\r\n }\r\n lastValue = currentRes.label;\r\n\r\n if (!currentRes.children)\r\n return;\r\n\r\n for (const childRes of currentRes.children)\r\n printDepth(depth + 1, childRes);\r\n };\r\n printDepth(0, result);\r\n\r\n this._results.forEach((value, index) => {\r\n if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.\r\n const oldVal = value.values.length >= numSavedFrames ? value.values.shift()! : 0.0;\r\n value.sum -= oldVal;\r\n value.values.push(0.0);\r\n }\r\n const div = document.createElement(\"div\");\r\n div.style.display = \"flex\";\r\n div.style.width = \"75%\";\r\n const textLabel = document.createElement(\"text\");\r\n textLabel.innerText = `${value.label}`;\r\n textLabel.style.paddingLeft = value.paddingLeft;\r\n div.appendChild(textLabel);\r\n const divLine = document.createElement(\"div\");\r\n divLine.style.flexGrow = \"1\";\r\n divLine.style.borderBottom = \"dotted 1px\";\r\n div.appendChild(divLine);\r\n const textValue = document.createElement(\"text\");\r\n textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\\n`;\r\n div.appendChild(textValue);\r\n fragment.appendChild(div);\r\n });\r\n\r\n this._resultsDiv.innerHTML = \"\";\r\n this._resultsDiv.appendChild(fragment);\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"GpuProfiler.js","sourceRoot":"","sources":["../../../src/widgets/GpuProfiler.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { saveAs } from \"file-saver\";\nimport { GLTimerResult, IModelApp, RenderSystemDebugControl } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\n\n/** Trace Event Format, viewable with chrome://tracing\n * https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit\n */\ninterface ChromeTrace {\n traceEvents: ChromeTraceEvent[];\n}\n\ninterface ChromeTraceEvent {\n /** Required by chrome://tracing */\n pid: 1;\n /** Timestamp in microseconds */\n ts: number;\n /** Duration in microseconds */\n dur: number;\n /** Denotes \"complete\" event */\n ph: \"X\";\n /** Label for chrome://tracing view */\n name: string;\n /** dummy value, args must be defined for entries to be clickable in chrome://tracing */\n args: ChromeTraceEventArgs;\n}\n\ninterface ChromeTraceEventArgs { 0: 0 }\nconst dummyArgs: ChromeTraceEventArgs = { 0: 0 }; // Reuse instead of allocating for each entry\n\n/**\n * @param name Label for the trace event\n * @param start Timestamp in microseconds of when trace event started\n * @param duration Duration in microseconds of trace event\n */\nfunction createTraceEvent(name: string, start: number, duration: number): ChromeTraceEvent {\n return {\n pid: 1,\n ts: start,\n dur: duration,\n ph: \"X\",\n name,\n args: dummyArgs,\n };\n}\n\nfunction createTraceFromTimerResults(timerResults: GLTimerResult[]): ChromeTrace {\n const traceEvents: ChromeTraceEvent[] = [];\n\n const addChildren = (startTime: number, children: GLTimerResult[]) => {\n for (const child of children) {\n if (child.nanoseconds < 100)\n continue;\n const microseconds = child.nanoseconds / 1E3;\n traceEvents.push(createTraceEvent(child.label, startTime, microseconds));\n if (child.children)\n addChildren(startTime, child.children);\n startTime += microseconds;\n }\n };\n\n let frameStartTime = 0;\n let frameNumber = 0;\n for (const tr of timerResults) {\n const microseconds = tr.nanoseconds / 1E3;\n traceEvents.push(createTraceEvent(`Frame ${frameNumber}`, frameStartTime, microseconds));\n if (tr.children)\n addChildren(frameStartTime, tr.children);\n frameStartTime += microseconds;\n ++frameNumber;\n }\n\n return { traceEvents };\n}\n\n/** @internal */\ninterface GpuProfilerResults {\n label: string;\n sum: number;\n paddingLeft: string;\n values: number[];\n}\n\n/** @alpha */\nexport class GpuProfiler {\n private readonly _div: HTMLDivElement;\n private readonly _resultsDiv: HTMLDivElement;\n private readonly _results: GpuProfilerResults[];\n private readonly _debugControl: RenderSystemDebugControl;\n\n private readonly _recordButton!: HTMLButtonElement;\n private _recordedResults: GLTimerResult[];\n private _isRecording: boolean;\n\n public constructor(parent: HTMLElement) {\n this._debugControl = IModelApp.renderSystem.debugControl!;\n\n const checkBox = createCheckBox({\n parent,\n name: \"Profile GPU\",\n id: \"gpu-profiler-toggle\",\n handler: (cb) => this.toggleProfileCheckBox(cb.checked),\n });\n\n if (!this._debugControl.isGLTimerSupported) {\n checkBox.checkbox.disabled = true;\n checkBox.div.title = \"EXT_disjoint_timer_query is not available in this browser\";\n }\n\n this._div = document.createElement(\"div\");\n this._div.style.display = \"none\";\n\n this._recordButton = document.createElement(\"button\");\n this._recordButton.style.textAlign = \"center\";\n this._isRecording = false;\n this._recordButton.innerText = \"Record Profile\";\n this._recordButton.title = \"Record a profile to open with chrome://tracing\";\n this._recordedResults = [];\n this._recordButton.addEventListener(\"click\", this._clickRecord);\n this._div.appendChild(this._recordButton);\n\n this._results = [];\n this._resultsDiv = document.createElement(\"div\");\n this._resultsDiv.style.textAlign = \"left\";\n this._div.appendChild(this._resultsDiv);\n\n parent.appendChild(this._div);\n }\n\n public [Symbol.dispose](): void {\n this._debugControl.resultsCallback = undefined;\n }\n\n private toggleProfileCheckBox(isEnabled: boolean): void {\n if (isEnabled) {\n this._debugControl.resultsCallback = this._resultsCallback;\n this._resultsDiv.innerHTML = \"\";\n this._div.style.display = \"block\";\n } else {\n this._debugControl.resultsCallback = undefined;\n this._div.style.display = \"none\";\n this.stopRecording();\n }\n }\n\n private _clickRecord = () => {\n if (!this._isRecording) {\n this._isRecording = true;\n this._recordButton.innerText = \"Stop Recording\";\n return;\n }\n\n this.stopRecording();\n };\n\n private stopRecording() {\n this._isRecording = false;\n this._recordButton.innerText = \"Record Profile\";\n\n if (this._recordedResults.length !== 0) {\n const chromeTrace = createTraceFromTimerResults(this._recordedResults);\n const blob = new Blob([JSON.stringify(chromeTrace)], { type: \"application/json;charset=utf-8\" });\n saveAs(blob, \"gpu-profile.json\");\n this._recordedResults = [];\n }\n }\n\n private _resultsCallback = (result: GLTimerResult): void => {\n if (this._isRecording)\n this._recordedResults.push(result);\n\n const fragment = document.createDocumentFragment();\n const numSavedFrames = 120;\n let lastValue: string;\n const changedResults = new Array<boolean>(this._results.length); // default values false\n const printDepth = (depth: number, currentRes: GLTimerResult) => {\n const index = this._results.findIndex((res) => res.label === currentRes.label);\n if (index < 0) { // Add brand new entry\n const data: GpuProfilerResults = {\n label: currentRes.label,\n paddingLeft: `${depth}em`,\n sum: currentRes.nanoseconds,\n values: [currentRes.nanoseconds],\n };\n if (lastValue === undefined) {\n this._results.unshift(data);\n changedResults.unshift(true);\n } else if (currentRes.label === \"Read Pixels\") {\n this._results.push(data); // Read Pixels should go at the end of the list\n changedResults.push(true);\n } else {\n const prevIndex = this._results.findIndex((res) => res.label === lastValue);\n this._results.splice(prevIndex + 1, 0, data);\n changedResults.splice(prevIndex + 1, 0, true);\n }\n } else { // Edit old entry\n let oldVal = 0.0;\n const savedResults = this._results[index];\n if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between\n oldVal = savedResults.values.shift()!;\n }\n const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise\n savedResults.sum += newVal - oldVal;\n savedResults.values.push(newVal);\n changedResults[index] = true;\n }\n lastValue = currentRes.label;\n\n if (!currentRes.children)\n return;\n\n for (const childRes of currentRes.children)\n printDepth(depth + 1, childRes);\n };\n printDepth(0, result);\n\n this._results.forEach((value, index) => {\n if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.\n const oldVal = value.values.length >= numSavedFrames ? value.values.shift()! : 0.0;\n value.sum -= oldVal;\n value.values.push(0.0);\n }\n const div = document.createElement(\"div\");\n div.style.display = \"flex\";\n div.style.width = \"75%\";\n const textLabel = document.createElement(\"text\");\n textLabel.innerText = `${value.label}`;\n textLabel.style.paddingLeft = value.paddingLeft;\n div.appendChild(textLabel);\n const divLine = document.createElement(\"div\");\n divLine.style.flexGrow = \"1\";\n divLine.style.borderBottom = \"dotted 1px\";\n div.appendChild(divLine);\n const textValue = document.createElement(\"text\");\n textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\\n`;\n div.appendChild(textValue);\n fragment.appendChild(div);\n });\n\n this._resultsDiv.innerHTML = \"\";\n this._resultsDiv.appendChild(fragment);\n };\n}\n"]}
|
|
@@ -33,8 +33,15 @@ export var KeyinFieldLocalization;
|
|
|
33
33
|
* @beta
|
|
34
34
|
*/
|
|
35
35
|
export class KeyinField {
|
|
36
|
+
/** @alpha */
|
|
37
|
+
autoCompleteList;
|
|
38
|
+
textBox;
|
|
39
|
+
keyins;
|
|
40
|
+
_historyIndex;
|
|
41
|
+
_historyLength = 0;
|
|
42
|
+
_history;
|
|
43
|
+
_localization;
|
|
36
44
|
constructor(props) {
|
|
37
|
-
this._historyLength = 0;
|
|
38
45
|
this._localization = props.localization ?? KeyinFieldLocalization.NonLocalized;
|
|
39
46
|
this.keyins = this.findKeyins();
|
|
40
47
|
const autoCompleteListId = `${props.baseId}_autoComplete`;
|