@itwin/core-frontend 3.1.0-dev.7 → 3.1.1
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 +210 -35
- package/lib/cjs/AccuSnap.js +2 -2
- package/lib/cjs/AccuSnap.js.map +1 -1
- package/lib/cjs/ApproximateTerrainHeights.d.ts +1 -1
- package/lib/cjs/ApproximateTerrainHeights.d.ts.map +1 -1
- package/lib/cjs/ApproximateTerrainHeights.js +21 -9
- package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
- package/lib/cjs/ApproximateTerrainHeightsProps.d.ts +12 -0
- package/lib/cjs/ApproximateTerrainHeightsProps.d.ts.map +1 -0
- package/lib/cjs/ApproximateTerrainHeightsProps.js +13 -0
- package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -0
- package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
- package/lib/cjs/BriefcaseConnection.js +6 -5
- package/lib/cjs/BriefcaseConnection.js.map +1 -1
- package/lib/cjs/CategorySelectorState.js +1 -1
- package/lib/cjs/CategorySelectorState.js.map +1 -1
- package/lib/cjs/DisplayStyleState.d.ts +4 -3
- package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleState.js +32 -8
- package/lib/cjs/DisplayStyleState.js.map +1 -1
- package/lib/cjs/DrawingViewState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.js +9 -8
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/FrontendLoggerCategory.d.ts +3 -1
- package/lib/cjs/FrontendLoggerCategory.d.ts.map +1 -1
- package/lib/cjs/FrontendLoggerCategory.js +2 -0
- package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
- package/lib/cjs/IModelApp.d.ts +10 -4
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +26 -13
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModelConnection.d.ts +3 -2
- package/lib/cjs/IModelConnection.d.ts.map +1 -1
- package/lib/cjs/IModelConnection.js +6 -4
- package/lib/cjs/IModelConnection.js.map +1 -1
- package/lib/cjs/ImageUtil.d.ts.map +1 -1
- package/lib/cjs/ImageUtil.js +8 -14
- package/lib/cjs/ImageUtil.js.map +1 -1
- package/lib/cjs/LocalhostIpcApp.d.ts +2 -0
- package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/cjs/LocalhostIpcApp.js +10 -4
- package/lib/cjs/LocalhostIpcApp.js.map +1 -1
- package/lib/cjs/RealityDataSource.d.ts +60 -14
- package/lib/cjs/RealityDataSource.d.ts.map +1 -1
- package/lib/cjs/RealityDataSource.js +36 -235
- package/lib/cjs/RealityDataSource.js.map +1 -1
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +166 -0
- package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
- package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +83 -0
- package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -0
- package/lib/cjs/RealityDataSourceContextShareImpl.js +234 -0
- package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +135 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -0
- package/lib/cjs/SheetViewState.js +7 -3
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/ViewState.d.ts +8 -0
- package/lib/cjs/ViewState.d.ts.map +1 -1
- package/lib/cjs/ViewState.js +1 -1
- package/lib/cjs/ViewState.js.map +1 -1
- package/lib/cjs/Viewport.d.ts +35 -14
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +59 -10
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/core-frontend.d.ts +6 -4
- package/lib/cjs/core-frontend.d.ts.map +1 -1
- package/lib/cjs/core-frontend.js +6 -4
- package/lib/cjs/core-frontend.js.map +1 -1
- package/lib/cjs/extension/Extension.d.ts +48 -0
- package/lib/cjs/extension/Extension.d.ts.map +1 -0
- package/lib/cjs/extension/Extension.js +18 -0
- package/lib/cjs/extension/Extension.js.map +1 -0
- package/lib/cjs/extension/ExtensionAdmin.d.ts +64 -0
- package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionAdmin.js +106 -0
- package/lib/cjs/extension/ExtensionAdmin.js.map +1 -0
- package/lib/cjs/extension/ExtensionHost.d.ts +23 -0
- package/lib/cjs/extension/ExtensionHost.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionHost.js +26 -0
- package/lib/cjs/extension/ExtensionHost.js.map +1 -0
- package/lib/cjs/extension/ExtensionImpl.d.ts +21 -0
- package/lib/cjs/extension/ExtensionImpl.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionImpl.js +45 -0
- package/lib/cjs/extension/ExtensionImpl.js.map +1 -0
- package/lib/cjs/extension/ExtensionLoader.d.ts +26 -0
- package/lib/cjs/extension/ExtensionLoader.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionLoader.js +10 -0
- package/lib/cjs/extension/ExtensionLoader.js.map +1 -0
- package/lib/cjs/extension/ExtensionRuntime.d.ts +5 -0
- package/lib/cjs/extension/ExtensionRuntime.d.ts.map +1 -0
- package/lib/cjs/extension/ExtensionRuntime.js +86 -0
- package/lib/cjs/extension/ExtensionRuntime.js.map +1 -0
- package/lib/cjs/extension/extensions.d.ts +19 -0
- package/lib/cjs/extension/extensions.d.ts.map +1 -0
- package/lib/cjs/extension/extensions.js +36 -0
- package/lib/cjs/extension/extensions.js.map +1 -0
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +48 -44
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +90 -80
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +85 -45
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js +32 -0
- package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
- package/lib/cjs/quantity-formatting/UnitsData.d.ts +11 -0
- package/lib/cjs/quantity-formatting/UnitsData.d.ts.map +1 -0
- package/lib/cjs/quantity-formatting/UnitsData.js +59 -0
- package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -0
- package/lib/cjs/render/GraphicBranch.d.ts +2 -0
- package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
- package/lib/cjs/render/GraphicBranch.js.map +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.d.ts +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +12 -7
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js +8 -5
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/RenderTarget.d.ts +4 -4
- package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
- package/lib/cjs/render/RenderTarget.js.map +1 -1
- package/lib/cjs/render/Scene.d.ts.map +1 -1
- package/lib/cjs/render/Scene.js.map +1 -1
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
- package/lib/cjs/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
- package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/cjs/render/webgl/BranchState.js +5 -3
- package/lib/cjs/render/webgl/BranchState.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/Graphic.d.ts +5 -3
- package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Graphic.js +7 -2
- package/lib/cjs/render/webgl/Graphic.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts +4 -1
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +22 -9
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts +2 -2
- package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +5 -3
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.d.ts +31 -11
- package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RealityMesh.js +155 -52
- package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/cjs/render/webgl/RenderCommands.js +4 -0
- package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.d.ts +3 -0
- package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +45 -19
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -0
- package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderProgram.js +1 -0
- package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +9 -9
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +5 -5
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +102 -27
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.d.ts +4 -2
- package/lib/cjs/tile/ClassifierTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/ClassifierTileTree.js +31 -16
- package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
- package/lib/cjs/tile/DynamicIModelTile.d.ts.map +1 -1
- package/lib/cjs/tile/DynamicIModelTile.js +1 -1
- package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +22 -3
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +224 -40
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/IModelTileRequestChannels.d.ts +3 -3
- package/lib/cjs/tile/IModelTileRequestChannels.d.ts.map +1 -1
- package/lib/cjs/tile/IModelTileRequestChannels.js +7 -11
- package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
- package/lib/cjs/tile/LRUTileList.d.ts +29 -29
- package/lib/cjs/tile/LRUTileList.d.ts.map +1 -1
- package/lib/cjs/tile/LRUTileList.js +50 -50
- package/lib/cjs/tile/LRUTileList.js.map +1 -1
- package/lib/cjs/tile/OPCFormatInterpreter.d.ts +22 -0
- package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -0
- package/lib/cjs/tile/OPCFormatInterpreter.js +92 -0
- package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -0
- package/lib/cjs/tile/OrbitGtTileTree.js +1 -1
- package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/cjs/tile/PntsReader.d.ts +1 -1
- package/lib/cjs/tile/PntsReader.d.ts.map +1 -1
- package/lib/cjs/tile/PntsReader.js +170 -36
- package/lib/cjs/tile/PntsReader.js.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.d.ts +18 -2
- package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/PrimaryTileTree.js +53 -2
- package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts +24 -3
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +37 -12
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTile.d.ts +17 -3
- package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTile.js +34 -2
- package/lib/cjs/tile/RealityTile.js.map +1 -1
- package/lib/cjs/tile/RealityTileDrawArgs.d.ts +4 -1
- package/lib/cjs/tile/RealityTileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileDrawArgs.js +3 -1
- package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.d.ts +8 -5
- package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +20 -6
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/cjs/tile/RealityTileTree.d.ts +4 -1
- package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileTree.js +12 -4
- package/lib/cjs/tile/RealityTileTree.js.map +1 -1
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +179 -0
- package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -0
- package/lib/cjs/tile/Tile.d.ts +5 -4
- package/lib/cjs/tile/Tile.d.ts.map +1 -1
- package/lib/cjs/tile/Tile.js +3 -2
- package/lib/cjs/tile/Tile.js.map +1 -1
- package/lib/cjs/tile/TileAdmin.d.ts +43 -45
- package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
- package/lib/cjs/tile/TileAdmin.js +104 -104
- package/lib/cjs/tile/TileAdmin.js.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.d.ts +2 -0
- package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/cjs/tile/TileDrawArgs.js +5 -0
- package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
- package/lib/cjs/tile/TileGeometryCollector.d.ts +80 -0
- package/lib/cjs/tile/TileGeometryCollector.d.ts.map +1 -0
- package/lib/cjs/tile/TileGeometryCollector.js +71 -0
- package/lib/cjs/tile/TileGeometryCollector.js.map +1 -0
- package/lib/cjs/tile/TileRequest.d.ts +12 -9
- package/lib/cjs/tile/TileRequest.d.ts.map +1 -1
- package/lib/cjs/tile/TileRequest.js +19 -11
- package/lib/cjs/tile/TileRequest.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannel.js +3 -3
- package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
- package/lib/cjs/tile/TileRequestChannels.d.ts +0 -4
- package/lib/cjs/tile/TileRequestChannels.d.ts.map +1 -1
- package/lib/cjs/tile/TileRequestChannels.js +1 -6
- package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
- package/lib/cjs/tile/TileTree.d.ts +7 -1
- package/lib/cjs/tile/TileTree.d.ts.map +1 -1
- package/lib/cjs/tile/TileTree.js +8 -1
- package/lib/cjs/tile/TileTree.js.map +1 -1
- package/lib/cjs/tile/TileTreeReference.d.ts +27 -2
- package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/TileTreeReference.js +41 -1
- package/lib/cjs/tile/TileTreeReference.js.map +1 -1
- package/lib/cjs/tile/TileUsageMarker.d.ts +9 -9
- package/lib/cjs/tile/TileUsageMarker.d.ts.map +1 -1
- package/lib/cjs/tile/TileUsageMarker.js +9 -9
- package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
- package/lib/cjs/tile/TileUser.d.ts +33 -0
- package/lib/cjs/tile/TileUser.d.ts.map +1 -0
- package/lib/cjs/tile/TileUser.js +28 -0
- package/lib/cjs/tile/TileUser.js.map +1 -0
- package/lib/cjs/tile/TileUserSet.d.ts +28 -0
- package/lib/cjs/tile/TileUserSet.d.ts.map +1 -0
- package/lib/cjs/tile/TileUserSet.js +123 -0
- package/lib/cjs/tile/TileUserSet.js.map +1 -0
- package/lib/cjs/tile/internal.d.ts +6 -0
- package/lib/cjs/tile/internal.d.ts.map +1 -1
- package/lib/cjs/tile/internal.js +6 -0
- package/lib/cjs/tile/internal.js.map +1 -1
- package/lib/cjs/tile/map/CesiumTerrainProvider.js +2 -2
- package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +6 -5
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -13
- package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +3 -4
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
- package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +3 -4
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +5 -4
- package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -3
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +13 -11
- package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.d.ts +4 -5
- package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/ImageryTileTree.js +5 -4
- package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapFeatureInfo.d.ts +26 -0
- package/lib/cjs/tile/map/MapFeatureInfo.d.ts.map +1 -0
- package/lib/cjs/tile/map/MapFeatureInfo.js +19 -0
- package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -0
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +4 -4
- package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +3 -3
- package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +5 -4
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +5 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.d.ts +2 -2
- package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerSources.js +6 -4
- package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts +10 -2
- package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerTileTreeReference.js +26 -3
- package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
- package/lib/cjs/tile/map/MapTile.d.ts +12 -10
- package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTile.js +60 -39
- package/lib/cjs/tile/map/MapTile.js.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.d.ts +2 -1
- package/lib/cjs/tile/map/MapTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileLoader.js +4 -1
- package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.d.ts +21 -11
- package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTileTree.js +154 -67
- package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +1 -1
- package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
- package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
- package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts +2 -3
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +7 -2
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/cjs/tools/ViewTool.d.ts +4 -4
- package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
- package/lib/cjs/tools/ViewTool.js +1 -1
- package/lib/cjs/tools/ViewTool.js.map +1 -1
- package/lib/esm/AccuSnap.js +2 -2
- package/lib/esm/AccuSnap.js.map +1 -1
- package/lib/esm/ApproximateTerrainHeights.d.ts +1 -1
- package/lib/esm/ApproximateTerrainHeights.d.ts.map +1 -1
- package/lib/esm/ApproximateTerrainHeights.js +2 -9
- package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
- package/lib/esm/ApproximateTerrainHeightsProps.d.ts +12 -0
- package/lib/esm/ApproximateTerrainHeightsProps.d.ts.map +1 -0
- package/lib/esm/ApproximateTerrainHeightsProps.js +10 -0
- package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -0
- package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
- package/lib/esm/BriefcaseConnection.js +6 -5
- package/lib/esm/BriefcaseConnection.js.map +1 -1
- package/lib/esm/CategorySelectorState.js +1 -1
- package/lib/esm/CategorySelectorState.js.map +1 -1
- package/lib/esm/DisplayStyleState.d.ts +4 -3
- package/lib/esm/DisplayStyleState.d.ts.map +1 -1
- package/lib/esm/DisplayStyleState.js +34 -10
- package/lib/esm/DisplayStyleState.js.map +1 -1
- package/lib/esm/DrawingViewState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.js +9 -8
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/FrontendLoggerCategory.d.ts +3 -1
- package/lib/esm/FrontendLoggerCategory.d.ts.map +1 -1
- package/lib/esm/FrontendLoggerCategory.js +2 -0
- package/lib/esm/FrontendLoggerCategory.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +10 -4
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +25 -12
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModelConnection.d.ts +3 -2
- package/lib/esm/IModelConnection.d.ts.map +1 -1
- package/lib/esm/IModelConnection.js +7 -5
- package/lib/esm/IModelConnection.js.map +1 -1
- package/lib/esm/ImageUtil.d.ts.map +1 -1
- package/lib/esm/ImageUtil.js +8 -14
- package/lib/esm/ImageUtil.js.map +1 -1
- package/lib/esm/LocalhostIpcApp.d.ts +2 -0
- package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
- package/lib/esm/LocalhostIpcApp.js +10 -4
- package/lib/esm/LocalhostIpcApp.js.map +1 -1
- package/lib/esm/RealityDataSource.d.ts +60 -14
- package/lib/esm/RealityDataSource.d.ts.map +1 -1
- package/lib/esm/RealityDataSource.js +37 -237
- package/lib/esm/RealityDataSource.js.map +1 -1
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +67 -0
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -0
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +162 -0
- package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -0
- package/lib/esm/RealityDataSourceContextShareImpl.d.ts +83 -0
- package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -0
- package/lib/esm/RealityDataSourceContextShareImpl.js +230 -0
- package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +65 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js +131 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -0
- package/lib/esm/SheetViewState.js +7 -3
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/ViewState.d.ts +8 -0
- package/lib/esm/ViewState.d.ts.map +1 -1
- package/lib/esm/ViewState.js +1 -1
- package/lib/esm/ViewState.js.map +1 -1
- package/lib/esm/Viewport.d.ts +35 -14
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +60 -11
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/core-frontend.d.ts +6 -4
- package/lib/esm/core-frontend.d.ts.map +1 -1
- package/lib/esm/core-frontend.js +6 -4
- package/lib/esm/core-frontend.js.map +1 -1
- package/lib/esm/extension/Extension.d.ts +48 -0
- package/lib/esm/extension/Extension.d.ts.map +1 -0
- package/lib/esm/extension/Extension.js +15 -0
- package/lib/esm/extension/Extension.js.map +1 -0
- package/lib/esm/extension/ExtensionAdmin.d.ts +64 -0
- package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionAdmin.js +102 -0
- package/lib/esm/extension/ExtensionAdmin.js.map +1 -0
- package/lib/esm/extension/ExtensionHost.d.ts +23 -0
- package/lib/esm/extension/ExtensionHost.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionHost.js +22 -0
- package/lib/esm/extension/ExtensionHost.js.map +1 -0
- package/lib/esm/extension/ExtensionImpl.d.ts +21 -0
- package/lib/esm/extension/ExtensionImpl.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionImpl.js +40 -0
- package/lib/esm/extension/ExtensionImpl.js.map +1 -0
- package/lib/esm/extension/ExtensionLoader.d.ts +26 -0
- package/lib/esm/extension/ExtensionLoader.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionLoader.js +9 -0
- package/lib/esm/extension/ExtensionLoader.js.map +1 -0
- package/lib/esm/extension/ExtensionRuntime.d.ts +5 -0
- package/lib/esm/extension/ExtensionRuntime.d.ts.map +1 -0
- package/lib/esm/extension/ExtensionRuntime.js +84 -0
- package/lib/esm/extension/ExtensionRuntime.js.map +1 -0
- package/lib/esm/extension/extensions.d.ts +19 -0
- package/lib/esm/extension/extensions.d.ts.map +1 -0
- package/lib/esm/extension/extensions.js +24 -0
- package/lib/esm/extension/extensions.js.map +1 -0
- package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +2 -2
- package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BasicUnitsProvider.js +48 -44
- package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +90 -80
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +85 -42
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts +54 -0
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -0
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js +26 -0
- package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -0
- package/lib/esm/quantity-formatting/UnitsData.d.ts +11 -0
- package/lib/esm/quantity-formatting/UnitsData.d.ts.map +1 -0
- package/lib/esm/quantity-formatting/UnitsData.js +56 -0
- package/lib/esm/quantity-formatting/UnitsData.js.map +1 -0
- package/lib/esm/render/GraphicBranch.d.ts +2 -0
- package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
- package/lib/esm/render/GraphicBranch.js.map +1 -1
- package/lib/esm/render/RenderPlanarClassifier.d.ts +1 -1
- package/lib/esm/render/RenderPlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +12 -7
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js +6 -3
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/RenderTarget.d.ts +4 -4
- package/lib/esm/render/RenderTarget.d.ts.map +1 -1
- package/lib/esm/render/RenderTarget.js.map +1 -1
- package/lib/esm/render/Scene.d.ts.map +1 -1
- package/lib/esm/render/Scene.js.map +1 -1
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts +17 -2
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.d.ts.map +1 -1
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js +39 -2
- package/lib/esm/render/primitives/mesh/RealityMeshPrimitive.js.map +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
- package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
- package/lib/esm/render/webgl/BranchState.d.ts +2 -0
- package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
- package/lib/esm/render/webgl/BranchState.js +5 -3
- package/lib/esm/render/webgl/BranchState.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +1 -1
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/Graphic.d.ts +5 -3
- package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
- package/lib/esm/render/webgl/Graphic.js +7 -2
- package/lib/esm/render/webgl/Graphic.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.d.ts +4 -1
- package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +22 -9
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.d.ts +2 -2
- package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +5 -3
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.d.ts +31 -11
- package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/RealityMesh.js +155 -52
- package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
- package/lib/esm/render/webgl/RenderCommands.js +4 -0
- package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.d.ts +3 -0
- package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +45 -19
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -0
- package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderProgram.js +1 -0
- package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +9 -9
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +6 -6
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +103 -28
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.d.ts +4 -2
- package/lib/esm/tile/ClassifierTileTree.d.ts.map +1 -1
- package/lib/esm/tile/ClassifierTileTree.js +32 -17
- package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
- package/lib/esm/tile/DynamicIModelTile.d.ts.map +1 -1
- package/lib/esm/tile/DynamicIModelTile.js +1 -1
- package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +22 -3
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +207 -42
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/IModelTileRequestChannels.d.ts +3 -3
- package/lib/esm/tile/IModelTileRequestChannels.d.ts.map +1 -1
- package/lib/esm/tile/IModelTileRequestChannels.js +7 -11
- package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
- package/lib/esm/tile/LRUTileList.d.ts +29 -29
- package/lib/esm/tile/LRUTileList.d.ts.map +1 -1
- package/lib/esm/tile/LRUTileList.js +47 -47
- package/lib/esm/tile/LRUTileList.js.map +1 -1
- package/lib/esm/tile/OPCFormatInterpreter.d.ts +22 -0
- package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -0
- package/lib/esm/tile/OPCFormatInterpreter.js +88 -0
- package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -0
- package/lib/esm/tile/OrbitGtTileTree.js +1 -1
- package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
- package/lib/esm/tile/PntsReader.d.ts +1 -1
- package/lib/esm/tile/PntsReader.d.ts.map +1 -1
- package/lib/esm/tile/PntsReader.js +154 -39
- package/lib/esm/tile/PntsReader.js.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.d.ts +18 -2
- package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/PrimaryTileTree.js +51 -2
- package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts +24 -3
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +37 -13
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTile.d.ts +17 -3
- package/lib/esm/tile/RealityTile.d.ts.map +1 -1
- package/lib/esm/tile/RealityTile.js +34 -2
- package/lib/esm/tile/RealityTile.js.map +1 -1
- package/lib/esm/tile/RealityTileDrawArgs.d.ts +4 -1
- package/lib/esm/tile/RealityTileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileDrawArgs.js +3 -1
- package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.d.ts +8 -5
- package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +20 -6
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/tile/RealityTileTree.d.ts +4 -1
- package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileTree.js +14 -6
- package/lib/esm/tile/RealityTileTree.js.map +1 -1
- package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts +52 -0
- package/lib/esm/tile/ThreeDTileFormatInterpreter.d.ts.map +1 -0
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js +175 -0
- package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -0
- package/lib/esm/tile/Tile.d.ts +5 -4
- package/lib/esm/tile/Tile.d.ts.map +1 -1
- package/lib/esm/tile/Tile.js +3 -2
- package/lib/esm/tile/Tile.js.map +1 -1
- package/lib/esm/tile/TileAdmin.d.ts +43 -45
- package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
- package/lib/esm/tile/TileAdmin.js +105 -105
- package/lib/esm/tile/TileAdmin.js.map +1 -1
- package/lib/esm/tile/TileDrawArgs.d.ts +2 -0
- package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
- package/lib/esm/tile/TileDrawArgs.js +5 -0
- package/lib/esm/tile/TileDrawArgs.js.map +1 -1
- package/lib/esm/tile/TileGeometryCollector.d.ts +80 -0
- package/lib/esm/tile/TileGeometryCollector.d.ts.map +1 -0
- package/lib/esm/tile/TileGeometryCollector.js +67 -0
- package/lib/esm/tile/TileGeometryCollector.js.map +1 -0
- package/lib/esm/tile/TileRequest.d.ts +12 -9
- package/lib/esm/tile/TileRequest.d.ts.map +1 -1
- package/lib/esm/tile/TileRequest.js +19 -11
- package/lib/esm/tile/TileRequest.js.map +1 -1
- package/lib/esm/tile/TileRequestChannel.js +3 -3
- package/lib/esm/tile/TileRequestChannel.js.map +1 -1
- package/lib/esm/tile/TileRequestChannels.d.ts +0 -4
- package/lib/esm/tile/TileRequestChannels.d.ts.map +1 -1
- package/lib/esm/tile/TileRequestChannels.js +1 -6
- package/lib/esm/tile/TileRequestChannels.js.map +1 -1
- package/lib/esm/tile/TileTree.d.ts +7 -1
- package/lib/esm/tile/TileTree.d.ts.map +1 -1
- package/lib/esm/tile/TileTree.js +8 -1
- package/lib/esm/tile/TileTree.js.map +1 -1
- package/lib/esm/tile/TileTreeReference.d.ts +27 -2
- package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/TileTreeReference.js +43 -3
- package/lib/esm/tile/TileTreeReference.js.map +1 -1
- package/lib/esm/tile/TileUsageMarker.d.ts +9 -9
- package/lib/esm/tile/TileUsageMarker.d.ts.map +1 -1
- package/lib/esm/tile/TileUsageMarker.js +9 -9
- package/lib/esm/tile/TileUsageMarker.js.map +1 -1
- package/lib/esm/tile/TileUser.d.ts +33 -0
- package/lib/esm/tile/TileUser.d.ts.map +1 -0
- package/lib/esm/tile/TileUser.js +25 -0
- package/lib/esm/tile/TileUser.js.map +1 -0
- package/lib/esm/tile/TileUserSet.d.ts +28 -0
- package/lib/esm/tile/TileUserSet.d.ts.map +1 -0
- package/lib/esm/tile/TileUserSet.js +118 -0
- package/lib/esm/tile/TileUserSet.js.map +1 -0
- package/lib/esm/tile/internal.d.ts +6 -0
- package/lib/esm/tile/internal.d.ts.map +1 -1
- package/lib/esm/tile/internal.js +6 -0
- package/lib/esm/tile/internal.js.map +1 -1
- package/lib/esm/tile/map/CesiumTerrainProvider.js +2 -2
- package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +6 -5
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +47 -14
- package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +3 -4
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
- package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +3 -4
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +5 -4
- package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +2 -3
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +13 -11
- package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +2 -2
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.d.ts +4 -5
- package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/ImageryTileTree.js +5 -4
- package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapFeatureInfo.d.ts +26 -0
- package/lib/esm/tile/map/MapFeatureInfo.d.ts.map +1 -0
- package/lib/esm/tile/map/MapFeatureInfo.js +15 -0
- package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -0
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +4 -4
- package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +3 -3
- package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +5 -4
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +5 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.d.ts +2 -2
- package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerSources.js +6 -4
- package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
- package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts +10 -2
- package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerTileTreeReference.js +25 -3
- package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
- package/lib/esm/tile/map/MapTile.d.ts +12 -10
- package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTile.js +60 -39
- package/lib/esm/tile/map/MapTile.js.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.d.ts +2 -1
- package/lib/esm/tile/map/MapTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileLoader.js +4 -1
- package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
- package/lib/esm/tile/map/MapTileTree.d.ts +21 -11
- package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTileTree.js +156 -69
- package/lib/esm/tile/map/MapTileTree.js.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js +2 -2
- package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
- package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
- package/lib/esm/tile/map/WmsCapabilities.js +11 -10
- package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts +2 -3
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +8 -3
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/tools/ViewTool.d.ts +4 -4
- package/lib/esm/tools/ViewTool.d.ts.map +1 -1
- package/lib/esm/tools/ViewTool.js +1 -1
- package/lib/esm/tools/ViewTool.js.map +1 -1
- package/package.json +22 -20
- package/lib/cjs/ViewportSet.d.ts +0 -28
- package/lib/cjs/ViewportSet.d.ts.map +0 -1
- package/lib/cjs/ViewportSet.js +0 -126
- package/lib/cjs/ViewportSet.js.map +0 -1
- package/lib/cjs/tile/DracoDecoder.d.ts +0 -20
- package/lib/cjs/tile/DracoDecoder.d.ts.map +0 -1
- package/lib/cjs/tile/DracoDecoder.js +0 -169
- package/lib/cjs/tile/DracoDecoder.js.map +0 -1
- package/lib/esm/ViewportSet.d.ts +0 -28
- package/lib/esm/ViewportSet.d.ts.map +0 -1
- package/lib/esm/ViewportSet.js +0 -121
- package/lib/esm/ViewportSet.js.map +0 -1
- package/lib/esm/tile/DracoDecoder.d.ts +0 -20
- package/lib/esm/tile/DracoDecoder.d.ts.map +0 -1
- package/lib/esm/tile/DracoDecoder.js +0 -165
- package/lib/esm/tile/DracoDecoder.js.map +0 -1
- package/lib/public/assets/approximateTerrainHeights.json +0 -1
|
@@ -6,16 +6,16 @@ import { IModelTile, IModelTileContent, TileRequestChannel } from "./internal";
|
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
8
8
|
export declare class IModelTileRequestChannels {
|
|
9
|
-
private _cloudStorage
|
|
9
|
+
private _cloudStorage;
|
|
10
10
|
private readonly _contentCache?;
|
|
11
11
|
readonly rpc: TileRequestChannel;
|
|
12
12
|
constructor(args: {
|
|
13
13
|
concurrency: number;
|
|
14
14
|
usesHttp: boolean;
|
|
15
15
|
cacheMetadata: boolean;
|
|
16
|
+
cacheConcurrency: number;
|
|
16
17
|
});
|
|
17
|
-
get cloudStorage(): TileRequestChannel
|
|
18
|
-
enableCloudStorageCache(concurrency: number): TileRequestChannel;
|
|
18
|
+
get cloudStorage(): TileRequestChannel;
|
|
19
19
|
[Symbol.iterator](): Iterator<TileRequestChannel>;
|
|
20
20
|
setRpcConcurrency(concurrency: number): void;
|
|
21
21
|
getChannelForTile(tile: IModelTile): TileRequestChannel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelTileRequestChannels.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAqB,kBAAkB,EAAY,MAAM,YAAY,CAAC;AAoI5G;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"IModelTileRequestChannels.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAqB,kBAAkB,EAAY,MAAM,YAAY,CAAC;AAoI5G;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAiC;IAChE,SAAgB,GAAG,EAAE,kBAAkB,CAAC;gBAErB,IAAI,EAAE;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAaD,IAAW,YAAY,IAAI,kBAAkB,CAE5C;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAWjD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB;IAI9D,0BAA0B;IACnB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS;CAGzE"}
|
|
@@ -126,23 +126,19 @@ class IModelTileMetadataCacheChannel extends internal_1.TileRequestChannel {
|
|
|
126
126
|
*/
|
|
127
127
|
class IModelTileRequestChannels {
|
|
128
128
|
constructor(args) {
|
|
129
|
+
var _a;
|
|
129
130
|
const channelName = "itwinjs-tile-rpc";
|
|
130
131
|
this.rpc = args.usesHttp ? new internal_1.TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);
|
|
131
|
-
if (
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
132
|
+
if (args.cacheMetadata) {
|
|
133
|
+
this._contentCache = new IModelTileMetadataCacheChannel();
|
|
134
|
+
this._contentCache.registerChannel(this.rpc);
|
|
135
|
+
}
|
|
136
|
+
this._cloudStorage = new CloudStorageCacheChannel("itwinjs-cloud-cache", args.cacheConcurrency);
|
|
137
|
+
(_a = this._contentCache) === null || _a === void 0 ? void 0 : _a.registerChannel(this._cloudStorage);
|
|
135
138
|
}
|
|
136
139
|
get cloudStorage() {
|
|
137
140
|
return this._cloudStorage;
|
|
138
141
|
}
|
|
139
|
-
enableCloudStorageCache(concurrency) {
|
|
140
|
-
var _a;
|
|
141
|
-
(0, core_bentley_1.assert)(undefined === this._cloudStorage);
|
|
142
|
-
this._cloudStorage = new CloudStorageCacheChannel("itwinjs-cloud-cache", concurrency);
|
|
143
|
-
(_a = this._contentCache) === null || _a === void 0 ? void 0 : _a.registerChannel(this._cloudStorage);
|
|
144
|
-
return this._cloudStorage;
|
|
145
|
-
}
|
|
146
142
|
[Symbol.iterator]() {
|
|
147
143
|
const channels = [this.rpc];
|
|
148
144
|
if (this._cloudStorage)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelTileRequestChannels.js","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.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/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareStrings, SortedArray } from \"@itwin/core-bentley\";\r\nimport { TileTreeContentIds } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IpcApp } from \"../IpcApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { IModelTile, IModelTileContent, Tile, TileRequest, TileRequestChannel, TileTree } from \"./internal\";\r\n\r\n/** Handles requests to the cloud storage tile cache, if one is configured. If a tile's content is not found in the cache, subsequent requests for the same tile will\r\n * use the IModelTileChannel instead.\r\n */\r\nclass CloudStorageCacheChannel extends TileRequestChannel {\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n return IModelApp.tileAdmin.requestCachedTileContent(tile);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n request.tile.requestChannel = IModelApp.tileAdmin.channels.iModelChannels.rpc;\r\n ++this._statistics.totalCacheMisses;\r\n return true;\r\n }\r\n}\r\n\r\n/** For an [[IpcApp]], allows backend tile generation requests in progress to be canceled. */\r\nclass IModelTileChannel extends TileRequestChannel {\r\n private readonly _canceled = new Map<IModelConnection, Map<string, Set<string>>>();\r\n\r\n public override onActiveRequestCanceled(request: TileRequest): void {\r\n const tree = request.tile.tree;\r\n let entry = this._canceled.get(tree.iModel);\r\n if (!entry)\r\n this._canceled.set(tree.iModel, entry = new Map<string, Set<string>>());\r\n\r\n let ids = entry.get(tree.id);\r\n if (!ids)\r\n entry.set(tree.id, ids = new Set<string>());\r\n\r\n ids.add(request.tile.contentId);\r\n }\r\n\r\n public override processCancellations(): void {\r\n for (const [imodel, entries] of this._canceled) {\r\n const treeContentIds: TileTreeContentIds[] = [];\r\n for (const [treeId, tileIds] of entries) {\r\n const contentIds = Array.from(tileIds);\r\n treeContentIds.push({ treeId, contentIds });\r\n this._statistics.totalAbortedRequests += contentIds.length;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IpcApp.callIpcHost(\"cancelTileContentRequests\", imodel.getRpcProps(), treeContentIds);\r\n }\r\n\r\n this._canceled.clear();\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._canceled.delete(imodel);\r\n }\r\n}\r\n\r\ninterface CachedContent extends Omit<IModelTileContent, \"graphic\"> {\r\n contentId: string;\r\n hasGraphic: boolean;\r\n}\r\n\r\n/** If TileAdmin.Props.cacheTileMetadata is true, then this is the first channel through which we request content for an IModelTile.\r\n * It serves a niche purpose: a tile pre-generation agent that wants to ensure that every tile selected during interaction with the application\r\n * has its tile generated and cached in cloud storage. This agent might request thousands of tiles in sequence, causing a given tile to be discarded\r\n * and reloaded many times. To avoid pointlessly reloading tiles whose contents have already been generated, this channel caches the metadata for each tile;\r\n * on subsequent requests for the same tile, it produces the metadata and an empty RenderGraphic.\r\n */\r\nclass IModelTileMetadataCacheChannel extends TileRequestChannel {\r\n private readonly _cacheByIModel = new Map<IModelConnection, Map<TileTree, SortedArray<CachedContent>>>();\r\n\r\n public constructor() {\r\n super(\"itwinjs-imodel-metadata-cache\", 100);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n const channels = IModelApp.tileAdmin.channels.iModelChannels;\r\n request.tile.requestChannel = channels.cloudStorage ?? channels.rpc;\r\n return true;\r\n }\r\n\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n const content = this.getCachedContent(tile);\r\n return content ? { content } : undefined;\r\n }\r\n\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n const cached = this._cacheByIModel.get(tile.iModel)?.get(tile.tree)?.findEquivalent((x) => compareStrings(x.contentId, tile.contentId));\r\n if (!cached)\r\n return undefined;\r\n\r\n const content: IModelTileContent = {\r\n ...cached,\r\n graphic: cached.hasGraphic ? IModelApp.renderSystem.createGraphicList([]) : undefined,\r\n contentRange: cached.contentRange?.clone(),\r\n };\r\n\r\n return content;\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._cacheByIModel.delete(imodel);\r\n }\r\n\r\n public registerChannel(channel: TileRequestChannel): void {\r\n channel.contentCallback = (tile, content) => this.cache(tile, content);\r\n }\r\n\r\n private cache(tile: Tile, content: IModelTileContent): void {\r\n assert(tile instanceof IModelTile);\r\n let trees = this._cacheByIModel.get(tile.iModel);\r\n if (!trees)\r\n this._cacheByIModel.set(tile.iModel, trees = new Map<TileTree, SortedArray<CachedContent>>());\r\n\r\n let list = trees.get(tile.tree);\r\n if (!list)\r\n trees.set(tile.tree, list = new SortedArray<CachedContent>((lhs, rhs) => compareStrings(lhs.contentId, rhs.contentId)));\r\n\r\n assert(undefined === list.findEquivalent((x) => compareStrings(x.contentId, tile.contentId)));\r\n list.insert({\r\n contentId: tile.contentId,\r\n hasGraphic: undefined !== content.graphic,\r\n contentRange: content.contentRange?.clone(),\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n });\r\n }\r\n}\r\n\r\n/** TileRequestChannels used for requesting content for IModelTiles.\r\n * @internal\r\n */\r\nexport class IModelTileRequestChannels {\r\n private _cloudStorage?: TileRequestChannel;\r\n private readonly _contentCache?: IModelTileMetadataCacheChannel;\r\n public readonly rpc: TileRequestChannel;\r\n\r\n public constructor(args: {\r\n concurrency: number;\r\n usesHttp: boolean;\r\n cacheMetadata: boolean;\r\n }) {\r\n const channelName = \"itwinjs-tile-rpc\";\r\n this.rpc = args.usesHttp ? new TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);\r\n if (!args.cacheMetadata)\r\n return;\r\n\r\n this._contentCache = new IModelTileMetadataCacheChannel();\r\n this._contentCache.registerChannel(this.rpc);\r\n }\r\n\r\n public get cloudStorage(): TileRequestChannel | undefined {\r\n return this._cloudStorage;\r\n }\r\n\r\n public enableCloudStorageCache(concurrency: number): TileRequestChannel {\r\n assert(undefined === this._cloudStorage);\r\n this._cloudStorage = new CloudStorageCacheChannel(\"itwinjs-cloud-cache\", concurrency);\r\n this._contentCache?.registerChannel(this._cloudStorage);\r\n return this._cloudStorage;\r\n }\r\n\r\n public [Symbol.iterator](): Iterator<TileRequestChannel> {\r\n const channels = [this.rpc];\r\n if (this._cloudStorage)\r\n channels.push(this._cloudStorage);\r\n\r\n if (this._contentCache)\r\n channels.push(this._contentCache);\r\n\r\n return channels[Symbol.iterator]();\r\n }\r\n\r\n public setRpcConcurrency(concurrency: number): void {\r\n this.rpc.concurrency = concurrency;\r\n }\r\n\r\n public getChannelForTile(tile: IModelTile): TileRequestChannel {\r\n return tile.requestChannel || this._contentCache || this._cloudStorage || this.rpc;\r\n }\r\n\r\n /** Strictly for tests. */\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n return this._contentCache?.getCachedContent(tile);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"IModelTileRequestChannels.js","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.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/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareStrings, SortedArray } from \"@itwin/core-bentley\";\r\nimport { TileTreeContentIds } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IpcApp } from \"../IpcApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { IModelTile, IModelTileContent, Tile, TileRequest, TileRequestChannel, TileTree } from \"./internal\";\r\n\r\n/** Handles requests to the cloud storage tile cache, if one is configured. If a tile's content is not found in the cache, subsequent requests for the same tile will\r\n * use the IModelTileChannel instead.\r\n */\r\nclass CloudStorageCacheChannel extends TileRequestChannel {\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n return IModelApp.tileAdmin.requestCachedTileContent(tile);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n request.tile.requestChannel = IModelApp.tileAdmin.channels.iModelChannels.rpc;\r\n ++this._statistics.totalCacheMisses;\r\n return true;\r\n }\r\n}\r\n\r\n/** For an [[IpcApp]], allows backend tile generation requests in progress to be canceled. */\r\nclass IModelTileChannel extends TileRequestChannel {\r\n private readonly _canceled = new Map<IModelConnection, Map<string, Set<string>>>();\r\n\r\n public override onActiveRequestCanceled(request: TileRequest): void {\r\n const tree = request.tile.tree;\r\n let entry = this._canceled.get(tree.iModel);\r\n if (!entry)\r\n this._canceled.set(tree.iModel, entry = new Map<string, Set<string>>());\r\n\r\n let ids = entry.get(tree.id);\r\n if (!ids)\r\n entry.set(tree.id, ids = new Set<string>());\r\n\r\n ids.add(request.tile.contentId);\r\n }\r\n\r\n public override processCancellations(): void {\r\n for (const [imodel, entries] of this._canceled) {\r\n const treeContentIds: TileTreeContentIds[] = [];\r\n for (const [treeId, tileIds] of entries) {\r\n const contentIds = Array.from(tileIds);\r\n treeContentIds.push({ treeId, contentIds });\r\n this._statistics.totalAbortedRequests += contentIds.length;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IpcApp.callIpcHost(\"cancelTileContentRequests\", imodel.getRpcProps(), treeContentIds);\r\n }\r\n\r\n this._canceled.clear();\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._canceled.delete(imodel);\r\n }\r\n}\r\n\r\ninterface CachedContent extends Omit<IModelTileContent, \"graphic\"> {\r\n contentId: string;\r\n hasGraphic: boolean;\r\n}\r\n\r\n/** If TileAdmin.Props.cacheTileMetadata is true, then this is the first channel through which we request content for an IModelTile.\r\n * It serves a niche purpose: a tile pre-generation agent that wants to ensure that every tile selected during interaction with the application\r\n * has its tile generated and cached in cloud storage. This agent might request thousands of tiles in sequence, causing a given tile to be discarded\r\n * and reloaded many times. To avoid pointlessly reloading tiles whose contents have already been generated, this channel caches the metadata for each tile;\r\n * on subsequent requests for the same tile, it produces the metadata and an empty RenderGraphic.\r\n */\r\nclass IModelTileMetadataCacheChannel extends TileRequestChannel {\r\n private readonly _cacheByIModel = new Map<IModelConnection, Map<TileTree, SortedArray<CachedContent>>>();\r\n\r\n public constructor() {\r\n super(\"itwinjs-imodel-metadata-cache\", 100);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n const channels = IModelApp.tileAdmin.channels.iModelChannels;\r\n request.tile.requestChannel = channels.cloudStorage ?? channels.rpc;\r\n return true;\r\n }\r\n\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n const content = this.getCachedContent(tile);\r\n return content ? { content } : undefined;\r\n }\r\n\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n const cached = this._cacheByIModel.get(tile.iModel)?.get(tile.tree)?.findEquivalent((x) => compareStrings(x.contentId, tile.contentId));\r\n if (!cached)\r\n return undefined;\r\n\r\n const content: IModelTileContent = {\r\n ...cached,\r\n graphic: cached.hasGraphic ? IModelApp.renderSystem.createGraphicList([]) : undefined,\r\n contentRange: cached.contentRange?.clone(),\r\n };\r\n\r\n return content;\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._cacheByIModel.delete(imodel);\r\n }\r\n\r\n public registerChannel(channel: TileRequestChannel): void {\r\n channel.contentCallback = (tile, content) => this.cache(tile, content);\r\n }\r\n\r\n private cache(tile: Tile, content: IModelTileContent): void {\r\n assert(tile instanceof IModelTile);\r\n let trees = this._cacheByIModel.get(tile.iModel);\r\n if (!trees)\r\n this._cacheByIModel.set(tile.iModel, trees = new Map<TileTree, SortedArray<CachedContent>>());\r\n\r\n let list = trees.get(tile.tree);\r\n if (!list)\r\n trees.set(tile.tree, list = new SortedArray<CachedContent>((lhs, rhs) => compareStrings(lhs.contentId, rhs.contentId)));\r\n\r\n assert(undefined === list.findEquivalent((x) => compareStrings(x.contentId, tile.contentId)));\r\n list.insert({\r\n contentId: tile.contentId,\r\n hasGraphic: undefined !== content.graphic,\r\n contentRange: content.contentRange?.clone(),\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n });\r\n }\r\n}\r\n\r\n/** TileRequestChannels used for requesting content for IModelTiles.\r\n * @internal\r\n */\r\nexport class IModelTileRequestChannels {\r\n private _cloudStorage: TileRequestChannel;\r\n private readonly _contentCache?: IModelTileMetadataCacheChannel;\r\n public readonly rpc: TileRequestChannel;\r\n\r\n public constructor(args: {\r\n concurrency: number;\r\n usesHttp: boolean;\r\n cacheMetadata: boolean;\r\n cacheConcurrency: number;\r\n }) {\r\n const channelName = \"itwinjs-tile-rpc\";\r\n this.rpc = args.usesHttp ? new TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);\r\n\r\n if (args.cacheMetadata) {\r\n this._contentCache = new IModelTileMetadataCacheChannel();\r\n this._contentCache.registerChannel(this.rpc);\r\n }\r\n\r\n this._cloudStorage = new CloudStorageCacheChannel(\"itwinjs-cloud-cache\", args.cacheConcurrency);\r\n this._contentCache?.registerChannel(this._cloudStorage);\r\n }\r\n\r\n public get cloudStorage(): TileRequestChannel {\r\n return this._cloudStorage;\r\n }\r\n\r\n public [Symbol.iterator](): Iterator<TileRequestChannel> {\r\n const channels = [this.rpc];\r\n if (this._cloudStorage)\r\n channels.push(this._cloudStorage);\r\n\r\n if (this._contentCache)\r\n channels.push(this._contentCache);\r\n\r\n return channels[Symbol.iterator]();\r\n }\r\n\r\n public setRpcConcurrency(concurrency: number): void {\r\n this.rpc.concurrency = concurrency;\r\n }\r\n\r\n public getChannelForTile(tile: IModelTile): TileRequestChannel {\r\n return tile.requestChannel || this._contentCache || this._cloudStorage || this.rpc;\r\n }\r\n\r\n /** Strictly for tests. */\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n return this._contentCache?.getCachedContent(tile);\r\n }\r\n}\r\n"]}
|
|
@@ -4,34 +4,34 @@
|
|
|
4
4
|
import { ReadonlySortedArray, SortedArray } from "@itwin/core-bentley";
|
|
5
5
|
import { RenderMemory } from "../render/RenderMemory";
|
|
6
6
|
import { Tile } from "./internal";
|
|
7
|
-
/** Maintains in sorted order a set of
|
|
7
|
+
/** Maintains in sorted order a set of [[TileUser]] Ids for which a given tile has been selected for display. The number of users in a set is expected to be very small - often only 1 for a typical application.
|
|
8
8
|
* Strictly for use by LRUTileList.
|
|
9
|
-
* @see
|
|
9
|
+
* @see TileUserIdSets.
|
|
10
10
|
* @internal
|
|
11
11
|
*/
|
|
12
|
-
export declare class
|
|
13
|
-
constructor(
|
|
14
|
-
equals(set:
|
|
15
|
-
add(
|
|
16
|
-
drop(
|
|
12
|
+
export declare class TileUserIdSet extends ReadonlySortedArray<number> {
|
|
13
|
+
constructor(userId?: number);
|
|
14
|
+
equals(set: TileUserIdSet): boolean;
|
|
15
|
+
add(userId: number): void;
|
|
16
|
+
drop(userId: number): void;
|
|
17
17
|
clear(): void;
|
|
18
|
-
copyFrom(src:
|
|
19
|
-
clone():
|
|
18
|
+
copyFrom(src: TileUserIdSet): void;
|
|
19
|
+
clone(): TileUserIdSet;
|
|
20
20
|
}
|
|
21
|
-
/** Maintains a set of
|
|
21
|
+
/** Maintains a set of TileUserIdSets such that each set represents a unique combination of TileUser ids and each set contains at least one TileUser id.
|
|
22
22
|
* Exported strictly for tests.
|
|
23
23
|
* @see LRUTileList.
|
|
24
24
|
* @internal
|
|
25
25
|
*/
|
|
26
|
-
export declare class
|
|
26
|
+
export declare class TileUserIdSets extends SortedArray<TileUserIdSet> {
|
|
27
27
|
private readonly _scratch;
|
|
28
28
|
constructor();
|
|
29
|
-
/** Remove the specified
|
|
30
|
-
drop(
|
|
31
|
-
/** Obtain a
|
|
32
|
-
plus(
|
|
33
|
-
/** Obtain a
|
|
34
|
-
minus(
|
|
29
|
+
/** Remove the specified TileUser Id from all sets and remove empty and duplicate sets. */
|
|
30
|
+
drop(userId: number): void;
|
|
31
|
+
/** Obtain a TileUserIdSet owned by this object containing userId and (if specified) userIds. */
|
|
32
|
+
plus(userId: number, userIds?: TileUserIdSet): TileUserIdSet;
|
|
33
|
+
/** Obtain a TileUserIdSet owned by this object containing all of userIds (if specified) but not userId. Returns undefined if the resultant set would be empty. */
|
|
34
|
+
minus(userId: number, userIds?: TileUserIdSet): TileUserIdSet | undefined;
|
|
35
35
|
private scratch;
|
|
36
36
|
private getEquivalent;
|
|
37
37
|
}
|
|
@@ -44,12 +44,12 @@ export interface LRUTileListNode {
|
|
|
44
44
|
next?: LRUTileListNode;
|
|
45
45
|
/** The number of bytes of GPU memory allocated to the tile's content. The only node in a LRUTileListNode with `bytesUsed` less than 1 is the sentinel node. */
|
|
46
46
|
bytesUsed: number;
|
|
47
|
-
/** For a tile, the Ids of all of the
|
|
48
|
-
* Undefined if the tile is not
|
|
47
|
+
/** For a tile, the Ids of all of the TileUsers for which the tile is currently in use. The TileUserIdSet is owned by the LRUTileList's TileUserIdSets member.
|
|
48
|
+
* Undefined if the tile is not in use by any TileUser.
|
|
49
49
|
*/
|
|
50
|
-
|
|
50
|
+
tileUserIds?: TileUserIdSet | undefined;
|
|
51
51
|
}
|
|
52
|
-
/** An intrusive doubly-linked list of LRUTileListNodes, containing Tiles partitioned by a singleton sentinel node into two partitions and ordered from least-recently- to most-recently-
|
|
52
|
+
/** An intrusive doubly-linked list of LRUTileListNodes, containing Tiles partitioned by a singleton sentinel node into two partitions and ordered from least-recently- to most-recently-used by any TileUser.
|
|
53
53
|
* Used by TileAdmin to keep track of and impose limits upon the total amount of GPU memory allocated to tile content.
|
|
54
54
|
*
|
|
55
55
|
* Illustration of the structure of the list:
|
|
@@ -70,8 +70,8 @@ export interface LRUTileListNode {
|
|
|
70
70
|
*
|
|
71
71
|
* - When a tile's content is loaded, it is added to the end of the "not selected" partition. Its memory usage is computed and added to the list's total.
|
|
72
72
|
* - When a tile's content is unloaded, it is removed from the list. Its memory usage is deducted from the list's totla.
|
|
73
|
-
* - Just before a Viewport selects tiles for display, it is removed from each tile's set of viewports in which they are selected. If a tile's set of
|
|
74
|
-
* - When a tile becomes selected for
|
|
73
|
+
* - Just before a TileUser selects tiles for use (e.g., Viewport selects tiles for display), it is removed from each tile's set of viewports in which they are selected. If a tile's set of users becomes empty as a result, it is moved to the end of the "not selected" partition.
|
|
74
|
+
* - When a tile becomes selected for use by a TileUser, the user is added to its user set and the tile is moved to the end of the "selected" partition.
|
|
75
75
|
*
|
|
76
76
|
* When the system determines that GPU memory should be freed up, it can simply pop nodes off the beginning of the "not selected" partition, freeing their content, until the target memory usage is reached or no more non-selected nodes exist.
|
|
77
77
|
*
|
|
@@ -81,7 +81,7 @@ export interface LRUTileListNode {
|
|
|
81
81
|
export declare class LRUTileList {
|
|
82
82
|
protected readonly _sentinel: LRUTileListNode;
|
|
83
83
|
protected readonly _stats: RenderMemory.Statistics;
|
|
84
|
-
protected readonly
|
|
84
|
+
protected readonly _userIdSets: TileUserIdSets;
|
|
85
85
|
protected _head: LRUTileListNode;
|
|
86
86
|
protected _tail: LRUTileListNode;
|
|
87
87
|
protected _totalBytesUsed: number;
|
|
@@ -97,12 +97,12 @@ export declare class LRUTileList {
|
|
|
97
97
|
* Invoked by TileAdmin when a tile's content is unloaded, including when the list itself disposes of the content in its `freeMemory` method.
|
|
98
98
|
*/
|
|
99
99
|
drop(tile: Tile): void;
|
|
100
|
-
/** Mark the tiles as
|
|
101
|
-
|
|
102
|
-
/** Mark the tiles as no longer
|
|
103
|
-
* If this results in a tile being no longer selected for any
|
|
100
|
+
/** Mark the tiles as in use by the specified TileUser. They are moved to the end of the "selected" partition. */
|
|
101
|
+
markUsed(userId: number, tiles: Iterable<Tile>): void;
|
|
102
|
+
/** Mark the tiles as no longer in user by the specified TileUser.
|
|
103
|
+
* If this results in a tile being no longer selected for any user, it is moved to the end of the "not selected" partition.
|
|
104
104
|
*/
|
|
105
|
-
|
|
105
|
+
clearUsed(userId: number): void;
|
|
106
106
|
/** Dispose of the contents of tiles currently not selected for display until the total amount of memory consumed is no more than `maxBytes`
|
|
107
107
|
* or until the contents of all un-selected tiles have been disposed.
|
|
108
108
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LRUTileList.d.ts","sourceRoot":"","sources":["../../../src/tile/LRUTileList.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,mBAAmB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,mBAAmB,CAAC,MAAM,CAAC;gBACzC,
|
|
1
|
+
{"version":3,"file":"LRUTileList.d.ts","sourceRoot":"","sources":["../../../src/tile/LRUTileList.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,19 +7,19 @@
|
|
|
7
7
|
* @module Tiles
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.LRUTileList = exports.
|
|
10
|
+
exports.LRUTileList = exports.TileUserIdSets = exports.TileUserIdSet = void 0;
|
|
11
11
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
12
|
const RenderMemory_1 = require("../render/RenderMemory");
|
|
13
|
-
/** Maintains in sorted order a set of
|
|
13
|
+
/** Maintains in sorted order a set of [[TileUser]] Ids for which a given tile has been selected for display. The number of users in a set is expected to be very small - often only 1 for a typical application.
|
|
14
14
|
* Strictly for use by LRUTileList.
|
|
15
|
-
* @see
|
|
15
|
+
* @see TileUserIdSets.
|
|
16
16
|
* @internal
|
|
17
17
|
*/
|
|
18
|
-
class
|
|
19
|
-
constructor(
|
|
18
|
+
class TileUserIdSet extends core_bentley_1.ReadonlySortedArray {
|
|
19
|
+
constructor(userId) {
|
|
20
20
|
super((lhs, rhs) => lhs - rhs);
|
|
21
|
-
if (undefined !==
|
|
22
|
-
this._array.push(
|
|
21
|
+
if (undefined !== userId)
|
|
22
|
+
this._array.push(userId);
|
|
23
23
|
}
|
|
24
24
|
equals(set) {
|
|
25
25
|
if (this.length !== set.length)
|
|
@@ -29,11 +29,11 @@ class ViewportIdSet extends core_bentley_1.ReadonlySortedArray {
|
|
|
29
29
|
return false;
|
|
30
30
|
return true;
|
|
31
31
|
}
|
|
32
|
-
add(
|
|
33
|
-
this._insert(
|
|
32
|
+
add(userId) {
|
|
33
|
+
this._insert(userId);
|
|
34
34
|
}
|
|
35
|
-
drop(
|
|
36
|
-
this._remove(
|
|
35
|
+
drop(userId) {
|
|
36
|
+
this._remove(userId);
|
|
37
37
|
}
|
|
38
38
|
clear() {
|
|
39
39
|
this._clear();
|
|
@@ -41,22 +41,22 @@ class ViewportIdSet extends core_bentley_1.ReadonlySortedArray {
|
|
|
41
41
|
copyFrom(src) {
|
|
42
42
|
this._array.length = src.length;
|
|
43
43
|
let i = 0;
|
|
44
|
-
for (const
|
|
45
|
-
this._array[i++] =
|
|
44
|
+
for (const userId of src)
|
|
45
|
+
this._array[i++] = userId;
|
|
46
46
|
}
|
|
47
47
|
clone() {
|
|
48
|
-
const clone = new
|
|
48
|
+
const clone = new TileUserIdSet();
|
|
49
49
|
clone.copyFrom(this);
|
|
50
50
|
return clone;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
exports.
|
|
54
|
-
/** Maintains a set of
|
|
53
|
+
exports.TileUserIdSet = TileUserIdSet;
|
|
54
|
+
/** Maintains a set of TileUserIdSets such that each set represents a unique combination of TileUser ids and each set contains at least one TileUser id.
|
|
55
55
|
* Exported strictly for tests.
|
|
56
56
|
* @see LRUTileList.
|
|
57
57
|
* @internal
|
|
58
58
|
*/
|
|
59
|
-
class
|
|
59
|
+
class TileUserIdSets extends core_bentley_1.SortedArray {
|
|
60
60
|
constructor() {
|
|
61
61
|
super((lhs, rhs) => {
|
|
62
62
|
if (lhs === rhs)
|
|
@@ -73,15 +73,15 @@ class ViewportIdSets extends core_bentley_1.SortedArray {
|
|
|
73
73
|
}
|
|
74
74
|
return 0;
|
|
75
75
|
});
|
|
76
|
-
this._scratch = new
|
|
76
|
+
this._scratch = new TileUserIdSet();
|
|
77
77
|
}
|
|
78
|
-
/** Remove the specified
|
|
79
|
-
drop(
|
|
78
|
+
/** Remove the specified TileUser Id from all sets and remove empty and duplicate sets. */
|
|
79
|
+
drop(userId) {
|
|
80
80
|
// Remove from all sets, and delete empty sets.
|
|
81
81
|
let i = 0;
|
|
82
82
|
for ( /* */; i < this._array.length; i++) {
|
|
83
83
|
const set = this._array[i];
|
|
84
|
-
set.drop(
|
|
84
|
+
set.drop(userId);
|
|
85
85
|
if (set.length === 0)
|
|
86
86
|
this._array.splice(i, 1);
|
|
87
87
|
}
|
|
@@ -97,22 +97,22 @@ class ViewportIdSets extends core_bentley_1.SortedArray {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
-
/** Obtain a
|
|
101
|
-
plus(
|
|
102
|
-
const scratch = this.scratch(
|
|
103
|
-
scratch.add(
|
|
100
|
+
/** Obtain a TileUserIdSet owned by this object containing userId and (if specified) userIds. */
|
|
101
|
+
plus(userId, userIds) {
|
|
102
|
+
const scratch = this.scratch(userIds);
|
|
103
|
+
scratch.add(userId);
|
|
104
104
|
return this.getEquivalent(scratch);
|
|
105
105
|
}
|
|
106
|
-
/** Obtain a
|
|
107
|
-
minus(
|
|
108
|
-
const scratch = this.scratch(
|
|
109
|
-
scratch.drop(
|
|
106
|
+
/** Obtain a TileUserIdSet owned by this object containing all of userIds (if specified) but not userId. Returns undefined if the resultant set would be empty. */
|
|
107
|
+
minus(userId, userIds) {
|
|
108
|
+
const scratch = this.scratch(userIds);
|
|
109
|
+
scratch.drop(userId);
|
|
110
110
|
return scratch.length > 0 ? this.getEquivalent(scratch) : undefined;
|
|
111
111
|
}
|
|
112
|
-
scratch(
|
|
112
|
+
scratch(userIds) {
|
|
113
113
|
const scratch = this._scratch;
|
|
114
|
-
if (
|
|
115
|
-
scratch.copyFrom(
|
|
114
|
+
if (userIds)
|
|
115
|
+
scratch.copyFrom(userIds);
|
|
116
116
|
else
|
|
117
117
|
scratch.clear();
|
|
118
118
|
return scratch;
|
|
@@ -127,7 +127,7 @@ class ViewportIdSets extends core_bentley_1.SortedArray {
|
|
|
127
127
|
return newSet;
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
-
exports.
|
|
130
|
+
exports.TileUserIdSets = TileUserIdSets;
|
|
131
131
|
function isLinked(node) {
|
|
132
132
|
return undefined !== node.previous || undefined !== node.next;
|
|
133
133
|
}
|
|
@@ -139,7 +139,7 @@ function* lruListIterator(start, end) {
|
|
|
139
139
|
yield prev;
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
|
-
/** An intrusive doubly-linked list of LRUTileListNodes, containing Tiles partitioned by a singleton sentinel node into two partitions and ordered from least-recently- to most-recently-
|
|
142
|
+
/** An intrusive doubly-linked list of LRUTileListNodes, containing Tiles partitioned by a singleton sentinel node into two partitions and ordered from least-recently- to most-recently-used by any TileUser.
|
|
143
143
|
* Used by TileAdmin to keep track of and impose limits upon the total amount of GPU memory allocated to tile content.
|
|
144
144
|
*
|
|
145
145
|
* Illustration of the structure of the list:
|
|
@@ -160,8 +160,8 @@ function* lruListIterator(start, end) {
|
|
|
160
160
|
*
|
|
161
161
|
* - When a tile's content is loaded, it is added to the end of the "not selected" partition. Its memory usage is computed and added to the list's total.
|
|
162
162
|
* - When a tile's content is unloaded, it is removed from the list. Its memory usage is deducted from the list's totla.
|
|
163
|
-
* - Just before a Viewport selects tiles for display, it is removed from each tile's set of viewports in which they are selected. If a tile's set of
|
|
164
|
-
* - When a tile becomes selected for
|
|
163
|
+
* - Just before a TileUser selects tiles for use (e.g., Viewport selects tiles for display), it is removed from each tile's set of viewports in which they are selected. If a tile's set of users becomes empty as a result, it is moved to the end of the "not selected" partition.
|
|
164
|
+
* - When a tile becomes selected for use by a TileUser, the user is added to its user set and the tile is moved to the end of the "selected" partition.
|
|
165
165
|
*
|
|
166
166
|
* When the system determines that GPU memory should be freed up, it can simply pop nodes off the beginning of the "not selected" partition, freeing their content, until the target memory usage is reached or no more non-selected nodes exist.
|
|
167
167
|
*
|
|
@@ -171,7 +171,7 @@ function* lruListIterator(start, end) {
|
|
|
171
171
|
class LRUTileList {
|
|
172
172
|
constructor() {
|
|
173
173
|
this._stats = new RenderMemory_1.RenderMemory.Statistics();
|
|
174
|
-
this.
|
|
174
|
+
this._userIdSets = new TileUserIdSets();
|
|
175
175
|
this._totalBytesUsed = 0;
|
|
176
176
|
this._head = this._tail = this._sentinel = { bytesUsed: 0 };
|
|
177
177
|
}
|
|
@@ -186,12 +186,12 @@ class LRUTileList {
|
|
|
186
186
|
next = node.next;
|
|
187
187
|
node.previous = node.next = undefined;
|
|
188
188
|
node.bytesUsed = 0;
|
|
189
|
-
node.
|
|
189
|
+
node.tileUserIds = undefined;
|
|
190
190
|
node = next;
|
|
191
191
|
}
|
|
192
192
|
this._head = this._tail = this._sentinel;
|
|
193
193
|
this._totalBytesUsed = 0;
|
|
194
|
-
this.
|
|
194
|
+
this._userIdSets.clear();
|
|
195
195
|
}
|
|
196
196
|
/** Compute the amount of GPU memory allocated to the tile's content and, if greater than zero, add the tile to the end of the "not selected" partition.
|
|
197
197
|
* Invoked by TileAdmin whenever a tile's content is set to a valid RenderGraphic.
|
|
@@ -201,7 +201,7 @@ class LRUTileList {
|
|
|
201
201
|
if (isLinked(tile))
|
|
202
202
|
return;
|
|
203
203
|
(0, core_bentley_1.assert)(tile.bytesUsed === 0);
|
|
204
|
-
(0, core_bentley_1.assert)(tile.
|
|
204
|
+
(0, core_bentley_1.assert)(tile.tileUserIds === undefined);
|
|
205
205
|
this._stats.clear();
|
|
206
206
|
tile.collectStatistics(this._stats, false);
|
|
207
207
|
tile.bytesUsed = this.computeBytesUsed(tile);
|
|
@@ -225,33 +225,33 @@ class LRUTileList {
|
|
|
225
225
|
this._totalBytesUsed -= tile.bytesUsed;
|
|
226
226
|
(0, core_bentley_1.assert)(this._totalBytesUsed >= 0);
|
|
227
227
|
this.unlink(tile);
|
|
228
|
-
tile.
|
|
228
|
+
tile.tileUserIds = undefined;
|
|
229
229
|
tile.bytesUsed = 0;
|
|
230
230
|
this.assertList();
|
|
231
231
|
}
|
|
232
|
-
/** Mark the tiles as
|
|
233
|
-
|
|
232
|
+
/** Mark the tiles as in use by the specified TileUser. They are moved to the end of the "selected" partition. */
|
|
233
|
+
markUsed(userId, tiles) {
|
|
234
234
|
for (const tile of tiles) {
|
|
235
235
|
if (tile.bytesUsed <= 0)
|
|
236
236
|
continue;
|
|
237
237
|
(0, core_bentley_1.assert)(isLinked(tile));
|
|
238
238
|
if (isLinked(tile)) {
|
|
239
|
-
tile.
|
|
239
|
+
tile.tileUserIds = this._userIdSets.plus(userId, tile.tileUserIds);
|
|
240
240
|
this.moveToEnd(tile);
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
/** Mark the tiles as no longer
|
|
245
|
-
* If this results in a tile being no longer selected for any
|
|
244
|
+
/** Mark the tiles as no longer in user by the specified TileUser.
|
|
245
|
+
* If this results in a tile being no longer selected for any user, it is moved to the end of the "not selected" partition.
|
|
246
246
|
*/
|
|
247
|
-
|
|
248
|
-
this.
|
|
247
|
+
clearUsed(userId) {
|
|
248
|
+
this._userIdSets.drop(userId);
|
|
249
249
|
let prev = this._sentinel;
|
|
250
250
|
while (prev && prev.next) {
|
|
251
251
|
const tile = prev.next;
|
|
252
252
|
(0, core_bentley_1.assert)(tile !== this._sentinel);
|
|
253
|
-
tile.
|
|
254
|
-
if (undefined === tile.
|
|
253
|
+
tile.tileUserIds = this._userIdSets.minus(userId, tile.tileUserIds);
|
|
254
|
+
if (undefined === tile.tileUserIds)
|
|
255
255
|
this.moveBeforeSentinel(tile);
|
|
256
256
|
else
|
|
257
257
|
prev = tile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LRUTileList.js","sourceRoot":"","sources":["../../../src/tile/LRUTileList.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/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ReadonlySortedArray, SortedArray } from \"@itwin/core-bentley\";\r\nimport { RenderMemory } from \"../render/RenderMemory\";\r\nimport { Tile } from \"./internal\";\r\n\r\n/** Maintains in sorted order a set of Viewport Ids for which a given tile has been selected for display. The number of viewports in a set is expected to be very small - often only 1 for a typical application.\r\n * Strictly for use by LRUTileList.\r\n * @see ViewportIdSets.\r\n * @internal\r\n */\r\nexport class ViewportIdSet extends ReadonlySortedArray<number> {\r\n public constructor(viewportId?: number) {\r\n super((lhs, rhs) => lhs - rhs);\r\n if (undefined !== viewportId)\r\n this._array.push(viewportId);\r\n }\r\n\r\n public equals(set: ViewportIdSet): boolean {\r\n if (this.length !== set.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.length; i++)\r\n if (this._array[i] !== set._array[i])\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public add(viewportId: number): void {\r\n this._insert(viewportId);\r\n }\r\n\r\n public drop(viewportId: number): void {\r\n this._remove(viewportId);\r\n }\r\n\r\n public clear(): void {\r\n this._clear();\r\n }\r\n\r\n public copyFrom(src: ViewportIdSet): void {\r\n this._array.length = src.length;\r\n let i = 0;\r\n for (const viewportId of src)\r\n this._array[i++] = viewportId;\r\n }\r\n\r\n public clone(): ViewportIdSet {\r\n const clone = new ViewportIdSet();\r\n clone.copyFrom(this);\r\n return clone;\r\n }\r\n}\r\n\r\n/** Maintains a set of ViewportIdSets such that each set represents a unique combination of Viewport ids and each set contains at least one Viewport id.\r\n * Exported strictly for tests.\r\n * @see LRUTileList.\r\n * @internal\r\n */\r\nexport class ViewportIdSets extends SortedArray<ViewportIdSet> {\r\n private readonly _scratch = new ViewportIdSet();\r\n\r\n public constructor() {\r\n super((lhs, rhs) => {\r\n if (lhs === rhs)\r\n return 0;\r\n\r\n let diff = lhs.length - rhs.length;\r\n if (0 !== diff)\r\n return diff;\r\n\r\n for (let i = 0; i < lhs.length; i++) {\r\n const lhId = lhs.get(i)!;\r\n const rhId = rhs.get(i)!;\r\n diff = lhId - rhId;\r\n if (0 !== diff)\r\n return diff;\r\n }\r\n\r\n return 0;\r\n });\r\n }\r\n\r\n /** Remove the specified viewport Id from all sets and remove empty and duplicate sets. */\r\n public drop(viewportId: number): void {\r\n // Remove from all sets, and delete empty sets.\r\n let i = 0;\r\n for (/* */; i < this._array.length; i++) {\r\n const set = this._array[i];\r\n set.drop(viewportId);\r\n if (set.length === 0)\r\n this._array.splice(i, 1);\r\n }\r\n\r\n // Collapse equivalent sets.\r\n i = 0;\r\n for (let j = 1; j < this._array.length; /* */) {\r\n if (this._array[i].equals(this._array[j])) {\r\n this._array.splice(i, 1);\r\n } else {\r\n i++;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n /** Obtain a ViewportIdSet owned by this object containing viewportId and (if specified) viewportIds. */\r\n public plus(viewportId: number, viewportIds?: ViewportIdSet): ViewportIdSet {\r\n const scratch = this.scratch(viewportIds);\r\n scratch.add(viewportId);\r\n return this.getEquivalent(scratch);\r\n }\r\n\r\n /** Obtain a ViewportIdSet owned by this object containing all of viewportIds (if specified) but not viewportId. Returns undefined if the resultant set would be empty. */\r\n public minus(viewportId: number, viewportIds?: ViewportIdSet): ViewportIdSet | undefined {\r\n const scratch = this.scratch(viewportIds);\r\n scratch.drop(viewportId);\r\n return scratch.length > 0 ? this.getEquivalent(scratch) : undefined;\r\n }\r\n\r\n private scratch(viewportIds?: ViewportIdSet): ViewportIdSet {\r\n const scratch = this._scratch;\r\n if (viewportIds)\r\n scratch.copyFrom(viewportIds);\r\n else\r\n scratch.clear();\r\n\r\n return scratch;\r\n }\r\n\r\n private getEquivalent(sought: ViewportIdSet): ViewportIdSet {\r\n assert(sought.length > 0);\r\n\r\n for (const set of this)\r\n if (set.equals(sought))\r\n return set;\r\n\r\n const newSet = sought.clone();\r\n this.insert(newSet);\r\n return newSet;\r\n }\r\n}\r\n\r\n/** A node in an LRUTileList. It is either a [[Tile]], or a sentinel node used to partition the list.\r\n * Strictly for use by LRUTileList.\r\n * @internal\r\n */\r\nexport interface LRUTileListNode {\r\n previous?: LRUTileListNode;\r\n next?: LRUTileListNode;\r\n /** The number of bytes of GPU memory allocated to the tile's content. The only node in a LRUTileListNode with `bytesUsed` less than 1 is the sentinel node. */\r\n bytesUsed: number;\r\n /** For a tile, the Ids of all of the Viewports for which the tile is currently selected for display. The ViewportIdSet is owned by the LRUTileList's ViewportIdSets member.\r\n * Undefined if the tile is not selected for display in any viewport.\r\n */\r\n viewportIds?: ViewportIdSet | undefined;\r\n}\r\n\r\nfunction isLinked(node: LRUTileListNode): boolean {\r\n return undefined !== node.previous || undefined !== node.next;\r\n}\r\n\r\nfunction* lruListIterator(start: Tile | undefined, end: LRUTileListNode | undefined): Iterator<Tile> {\r\n let cur = start;\r\n while (cur && cur !== end) {\r\n const prev = cur;\r\n cur = cur.next as Tile | undefined;\r\n yield prev;\r\n }\r\n}\r\n\r\n/** An intrusive doubly-linked list of LRUTileListNodes, containing Tiles partitioned by a singleton sentinel node into two partitions and ordered from least-recently- to most-recently-selected for display in any Viewport.\r\n * Used by TileAdmin to keep track of and impose limits upon the total amount of GPU memory allocated to tile content.\r\n *\r\n * Illustration of the structure of the list:\r\n *\r\n * ```\r\n * v------------- Not selected --------------v v----------------- Selected ------------------v\r\n * ______ ______ __________ ______ ______\r\n * | head |.next => | |.next => ... | sentinel |.next => ... | |.next => | tail |\r\n * | 12kb | | 8kb | | 0kb | | 19kb | | 23kb |\r\n * |______| <= previous.|______| ... <= previous.|__________| ... <= previous.|______| <= previous.|______|\r\n *\r\n * least-recently-selected --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> most-recently-selected\r\n * ```\r\n *\r\n * The sentinel node is always present and floats freely as the contents of each partition change. Note that the `next` and `previous` pointers are stored directly on the tiles - no link nodes are allocated to hold the entries in the list. This of course means that a Tile can only ever belong to one LRUTileList - the one owned by the TileAdmin.\r\n *\r\n * The list contains only those tiles whose content has been loaded. Each node records the amount of GPU memory allocated for the tile's content. The list keeps track of the total amount of GPU memory allocated by all tiles. The list's contents are updated as follows:\r\n *\r\n * - When a tile's content is loaded, it is added to the end of the \"not selected\" partition. Its memory usage is computed and added to the list's total.\r\n * - When a tile's content is unloaded, it is removed from the list. Its memory usage is deducted from the list's totla.\r\n * - Just before a Viewport selects tiles for display, it is removed from each tile's set of viewports in which they are selected. If a tile's set of viewports becomes empty as a result, it is moved to the end of the \"not selected\" partition.\r\n * - When a tile becomes selected for display in a Viewport, the viewport is added to its viewport set and the tile is moved to the end of the \"selected\" partition.\r\n *\r\n * When the system determines that GPU memory should be freed up, it can simply pop nodes off the beginning of the \"not selected\" partition, freeing their content, until the target memory usage is reached or no more non-selected nodes exist.\r\n *\r\n * Strictly for use by [[TileAdmin]].\r\n * @internal\r\n */\r\nexport class LRUTileList {\r\n protected readonly _sentinel: LRUTileListNode;\r\n protected readonly _stats = new RenderMemory.Statistics();\r\n protected readonly _viewportIdSets = new ViewportIdSets();\r\n protected _head: LRUTileListNode;\r\n protected _tail: LRUTileListNode;\r\n protected _totalBytesUsed = 0;\r\n\r\n /** The amount of GPU memory, in bytes, allocated to all tiles in the list. */\r\n public get totalBytesUsed(): number {\r\n return this._totalBytesUsed;\r\n }\r\n\r\n public constructor() {\r\n this._head = this._tail = this._sentinel = { bytesUsed: 0 };\r\n }\r\n\r\n public dispose(): void {\r\n let node: LRUTileListNode | undefined = this._head;\r\n let next: LRUTileListNode | undefined;\r\n while (node) {\r\n next = node.next;\r\n node.previous = node.next = undefined;\r\n node.bytesUsed = 0;\r\n node.viewportIds = undefined;\r\n node = next;\r\n }\r\n\r\n this._head = this._tail = this._sentinel;\r\n this._totalBytesUsed = 0;\r\n this._viewportIdSets.clear();\r\n }\r\n\r\n /** Compute the amount of GPU memory allocated to the tile's content and, if greater than zero, add the tile to the end of the \"not selected\" partition.\r\n * Invoked by TileAdmin whenever a tile's content is set to a valid RenderGraphic.\r\n */\r\n public add(tile: Tile): void {\r\n assert(!isLinked(tile));\r\n if (isLinked(tile))\r\n return;\r\n\r\n assert(tile.bytesUsed === 0);\r\n assert(tile.viewportIds === undefined);\r\n\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n tile.bytesUsed = this.computeBytesUsed(tile);\r\n assert(tile.bytesUsed >= 0);\r\n assert(tile.bytesUsed === Math.floor(tile.bytesUsed));\r\n\r\n if (tile.bytesUsed <= 0)\r\n return;\r\n\r\n // Insert just before the sentinel, indicating this is the most-recently-used non-selected tile.\r\n this._totalBytesUsed += tile.bytesUsed;\r\n this.append(tile);\r\n this.moveBeforeSentinel(tile);\r\n }\r\n\r\n /** Remove the tile from the list and deduct its previously-used GPU memory from the list's running total.\r\n * Invoked by TileAdmin when a tile's content is unloaded, including when the list itself disposes of the content in its `freeMemory` method.\r\n */\r\n public drop(tile: Tile): void {\r\n assert(isLinked(tile) || tile.bytesUsed === 0);\r\n if (!isLinked(tile))\r\n return;\r\n\r\n assert(tile.bytesUsed > 0);\r\n this._totalBytesUsed -= tile.bytesUsed;\r\n assert(this._totalBytesUsed >= 0);\r\n\r\n this.unlink(tile);\r\n tile.viewportIds = undefined;\r\n tile.bytesUsed = 0;\r\n\r\n this.assertList();\r\n }\r\n\r\n /** Mark the tiles as selected for display in the specified Viewport. They are moved to the end of the \"selected\" partition. */\r\n public markSelectedForViewport(viewportId: number, tiles: Iterable<Tile>): void {\r\n for (const tile of tiles) {\r\n if (tile.bytesUsed <= 0)\r\n continue;\r\n\r\n assert(isLinked(tile));\r\n\r\n if (isLinked(tile)) {\r\n tile.viewportIds = this._viewportIdSets.plus(viewportId, tile.viewportIds);\r\n this.moveToEnd(tile);\r\n }\r\n }\r\n }\r\n\r\n /** Mark the tiles as no longer selected for display in the specified Viewport.\r\n * If this results in a tile being no longer selected for any viewport, it is moved to the end of the \"not selected\" partition.\r\n */\r\n public clearSelectedForViewport(viewportId: number): void {\r\n this._viewportIdSets.drop(viewportId);\r\n let prev: LRUTileListNode | undefined = this._sentinel;\r\n while (prev && prev.next) {\r\n const tile = prev.next as Tile;\r\n assert(tile !== this._sentinel);\r\n tile.viewportIds = this._viewportIdSets.minus(viewportId, tile.viewportIds);\r\n if (undefined === tile.viewportIds)\r\n this.moveBeforeSentinel(tile);\r\n else\r\n prev = tile;\r\n }\r\n }\r\n\r\n /** Dispose of the contents of tiles currently not selected for display until the total amount of memory consumed is no more than `maxBytes`\r\n * or until the contents of all un-selected tiles have been disposed.\r\n */\r\n public freeMemory(maxBytes: number): void {\r\n let prev: LRUTileListNode | undefined = this._head;\r\n while (prev && prev !== this._sentinel && this.totalBytesUsed > maxBytes) {\r\n const tile = prev as Tile;\r\n prev = tile.next;\r\n tile.freeMemory();\r\n\r\n // Some tiles (ImageryMapTile) use reference-counting, in which case freeMemory() may not actually free the contents.\r\n // If the contents *were* disposed, then `this.drop` will have been called, and `tile` is no longer in the list.\r\n // Otherwise, `tile` remains in the list. Either way, we proceed to the next entry in the list.\r\n assert((this.computeBytesUsed(tile) > 0) === isLinked(tile));\r\n }\r\n }\r\n\r\n /** Iterate over all of the tiles in the unselected partition. */\r\n public get unselectedTiles(): Iterable<Tile> {\r\n const start = this._head === this._sentinel ? undefined : this._head as Tile | undefined;\r\n return {\r\n [Symbol.iterator]: () => lruListIterator(start, this._sentinel),\r\n };\r\n }\r\n\r\n /** Iterate over all of the tiles in the selected partition. */\r\n public get selectedTiles(): Iterable<Tile> {\r\n return {\r\n [Symbol.iterator]: () => lruListIterator(this._sentinel.next as Tile | undefined, undefined),\r\n };\r\n }\r\n\r\n protected computeBytesUsed(tile: Tile): number {\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n return this._stats.totalBytes;\r\n }\r\n\r\n protected assertList(): void {\r\n assert(this._head !== undefined);\r\n assert(this._tail !== undefined);\r\n }\r\n\r\n protected append(tile: Tile): void {\r\n assert(!isLinked(tile));\r\n if (isLinked(tile))\r\n this.unlink(tile);\r\n\r\n this._tail.next = tile;\r\n tile.previous = this._tail;\r\n this._tail = tile;\r\n }\r\n\r\n protected unlink(tile: Tile): void {\r\n assert(isLinked(tile));\r\n if (!isLinked(tile))\r\n return;\r\n\r\n if (tile.next && tile.previous) {\r\n assert(tile !== this._head);\r\n assert(tile !== this._tail);\r\n assert(tile.previous.next === tile);\r\n assert(tile.next.previous === tile);\r\n\r\n tile.previous.next = tile.next;\r\n tile.next.previous = tile.previous;\r\n } else if (tile.previous) {\r\n assert(tile === this._tail);\r\n assert(undefined === tile.next);\r\n assert(tile.previous.next === tile);\r\n\r\n tile.previous.next = undefined;\r\n this._tail = tile.previous;\r\n } else {\r\n assert(tile === this._head);\r\n assert(undefined !== tile.next);\r\n assert(tile.next.previous === tile);\r\n\r\n tile.next.previous = undefined;\r\n this._head = tile.next;\r\n }\r\n\r\n tile.next = tile.previous = undefined;\r\n this.assertList();\r\n }\r\n\r\n protected moveToEnd(tile: Tile): void {\r\n this.unlink(tile);\r\n this.append(tile);\r\n }\r\n\r\n protected moveBeforeSentinel(tile: Tile): void {\r\n this.unlink(tile);\r\n tile.previous = this._sentinel.previous;\r\n this._sentinel.previous = tile;\r\n tile.next = this._sentinel;\r\n\r\n if (!tile.previous)\r\n this._head = tile;\r\n else\r\n tile.previous.next = tile;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"LRUTileList.js","sourceRoot":"","sources":["../../../src/tile/LRUTileList.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/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ReadonlySortedArray, SortedArray } from \"@itwin/core-bentley\";\r\nimport { RenderMemory } from \"../render/RenderMemory\";\r\nimport { Tile } from \"./internal\";\r\n\r\n/** Maintains in sorted order a set of [[TileUser]] Ids for which a given tile has been selected for display. The number of users in a set is expected to be very small - often only 1 for a typical application.\r\n * Strictly for use by LRUTileList.\r\n * @see TileUserIdSets.\r\n * @internal\r\n */\r\nexport class TileUserIdSet extends ReadonlySortedArray<number> {\r\n public constructor(userId?: number) {\r\n super((lhs, rhs) => lhs - rhs);\r\n if (undefined !== userId)\r\n this._array.push(userId);\r\n }\r\n\r\n public equals(set: TileUserIdSet): boolean {\r\n if (this.length !== set.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.length; i++)\r\n if (this._array[i] !== set._array[i])\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public add(userId: number): void {\r\n this._insert(userId);\r\n }\r\n\r\n public drop(userId: number): void {\r\n this._remove(userId);\r\n }\r\n\r\n public clear(): void {\r\n this._clear();\r\n }\r\n\r\n public copyFrom(src: TileUserIdSet): void {\r\n this._array.length = src.length;\r\n let i = 0;\r\n for (const userId of src)\r\n this._array[i++] = userId;\r\n }\r\n\r\n public clone(): TileUserIdSet {\r\n const clone = new TileUserIdSet();\r\n clone.copyFrom(this);\r\n return clone;\r\n }\r\n}\r\n\r\n/** Maintains a set of TileUserIdSets such that each set represents a unique combination of TileUser ids and each set contains at least one TileUser id.\r\n * Exported strictly for tests.\r\n * @see LRUTileList.\r\n * @internal\r\n */\r\nexport class TileUserIdSets extends SortedArray<TileUserIdSet> {\r\n private readonly _scratch = new TileUserIdSet();\r\n\r\n public constructor() {\r\n super((lhs, rhs) => {\r\n if (lhs === rhs)\r\n return 0;\r\n\r\n let diff = lhs.length - rhs.length;\r\n if (0 !== diff)\r\n return diff;\r\n\r\n for (let i = 0; i < lhs.length; i++) {\r\n const lhId = lhs.get(i)!;\r\n const rhId = rhs.get(i)!;\r\n diff = lhId - rhId;\r\n if (0 !== diff)\r\n return diff;\r\n }\r\n\r\n return 0;\r\n });\r\n }\r\n\r\n /** Remove the specified TileUser Id from all sets and remove empty and duplicate sets. */\r\n public drop(userId: number): void {\r\n // Remove from all sets, and delete empty sets.\r\n let i = 0;\r\n for (/* */; i < this._array.length; i++) {\r\n const set = this._array[i];\r\n set.drop(userId);\r\n if (set.length === 0)\r\n this._array.splice(i, 1);\r\n }\r\n\r\n // Collapse equivalent sets.\r\n i = 0;\r\n for (let j = 1; j < this._array.length; /* */) {\r\n if (this._array[i].equals(this._array[j])) {\r\n this._array.splice(i, 1);\r\n } else {\r\n i++;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n /** Obtain a TileUserIdSet owned by this object containing userId and (if specified) userIds. */\r\n public plus(userId: number, userIds?: TileUserIdSet): TileUserIdSet {\r\n const scratch = this.scratch(userIds);\r\n scratch.add(userId);\r\n return this.getEquivalent(scratch);\r\n }\r\n\r\n /** Obtain a TileUserIdSet owned by this object containing all of userIds (if specified) but not userId. Returns undefined if the resultant set would be empty. */\r\n public minus(userId: number, userIds?: TileUserIdSet): TileUserIdSet | undefined {\r\n const scratch = this.scratch(userIds);\r\n scratch.drop(userId);\r\n return scratch.length > 0 ? this.getEquivalent(scratch) : undefined;\r\n }\r\n\r\n private scratch(userIds?: TileUserIdSet): TileUserIdSet {\r\n const scratch = this._scratch;\r\n if (userIds)\r\n scratch.copyFrom(userIds);\r\n else\r\n scratch.clear();\r\n\r\n return scratch;\r\n }\r\n\r\n private getEquivalent(sought: TileUserIdSet): TileUserIdSet {\r\n assert(sought.length > 0);\r\n\r\n for (const set of this)\r\n if (set.equals(sought))\r\n return set;\r\n\r\n const newSet = sought.clone();\r\n this.insert(newSet);\r\n return newSet;\r\n }\r\n}\r\n\r\n/** A node in an LRUTileList. It is either a [[Tile]], or a sentinel node used to partition the list.\r\n * Strictly for use by LRUTileList.\r\n * @internal\r\n */\r\nexport interface LRUTileListNode {\r\n previous?: LRUTileListNode;\r\n next?: LRUTileListNode;\r\n /** The number of bytes of GPU memory allocated to the tile's content. The only node in a LRUTileListNode with `bytesUsed` less than 1 is the sentinel node. */\r\n bytesUsed: number;\r\n /** For a tile, the Ids of all of the TileUsers for which the tile is currently in use. The TileUserIdSet is owned by the LRUTileList's TileUserIdSets member.\r\n * Undefined if the tile is not in use by any TileUser.\r\n */\r\n tileUserIds?: TileUserIdSet | undefined;\r\n}\r\n\r\nfunction isLinked(node: LRUTileListNode): boolean {\r\n return undefined !== node.previous || undefined !== node.next;\r\n}\r\n\r\nfunction* lruListIterator(start: Tile | undefined, end: LRUTileListNode | undefined): Iterator<Tile> {\r\n let cur = start;\r\n while (cur && cur !== end) {\r\n const prev = cur;\r\n cur = cur.next as Tile | undefined;\r\n yield prev;\r\n }\r\n}\r\n\r\n/** An intrusive doubly-linked list of LRUTileListNodes, containing Tiles partitioned by a singleton sentinel node into two partitions and ordered from least-recently- to most-recently-used by any TileUser.\r\n * Used by TileAdmin to keep track of and impose limits upon the total amount of GPU memory allocated to tile content.\r\n *\r\n * Illustration of the structure of the list:\r\n *\r\n * ```\r\n * v------------- Not selected --------------v v----------------- Selected ------------------v\r\n * ______ ______ __________ ______ ______\r\n * | head |.next => | |.next => ... | sentinel |.next => ... | |.next => | tail |\r\n * | 12kb | | 8kb | | 0kb | | 19kb | | 23kb |\r\n * |______| <= previous.|______| ... <= previous.|__________| ... <= previous.|______| <= previous.|______|\r\n *\r\n * least-recently-selected --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> most-recently-selected\r\n * ```\r\n *\r\n * The sentinel node is always present and floats freely as the contents of each partition change. Note that the `next` and `previous` pointers are stored directly on the tiles - no link nodes are allocated to hold the entries in the list. This of course means that a Tile can only ever belong to one LRUTileList - the one owned by the TileAdmin.\r\n *\r\n * The list contains only those tiles whose content has been loaded. Each node records the amount of GPU memory allocated for the tile's content. The list keeps track of the total amount of GPU memory allocated by all tiles. The list's contents are updated as follows:\r\n *\r\n * - When a tile's content is loaded, it is added to the end of the \"not selected\" partition. Its memory usage is computed and added to the list's total.\r\n * - When a tile's content is unloaded, it is removed from the list. Its memory usage is deducted from the list's totla.\r\n * - Just before a TileUser selects tiles for use (e.g., Viewport selects tiles for display), it is removed from each tile's set of viewports in which they are selected. If a tile's set of users becomes empty as a result, it is moved to the end of the \"not selected\" partition.\r\n * - When a tile becomes selected for use by a TileUser, the user is added to its user set and the tile is moved to the end of the \"selected\" partition.\r\n *\r\n * When the system determines that GPU memory should be freed up, it can simply pop nodes off the beginning of the \"not selected\" partition, freeing their content, until the target memory usage is reached or no more non-selected nodes exist.\r\n *\r\n * Strictly for use by [[TileAdmin]].\r\n * @internal\r\n */\r\nexport class LRUTileList {\r\n protected readonly _sentinel: LRUTileListNode;\r\n protected readonly _stats = new RenderMemory.Statistics();\r\n protected readonly _userIdSets = new TileUserIdSets();\r\n protected _head: LRUTileListNode;\r\n protected _tail: LRUTileListNode;\r\n protected _totalBytesUsed = 0;\r\n\r\n /** The amount of GPU memory, in bytes, allocated to all tiles in the list. */\r\n public get totalBytesUsed(): number {\r\n return this._totalBytesUsed;\r\n }\r\n\r\n public constructor() {\r\n this._head = this._tail = this._sentinel = { bytesUsed: 0 };\r\n }\r\n\r\n public dispose(): void {\r\n let node: LRUTileListNode | undefined = this._head;\r\n let next: LRUTileListNode | undefined;\r\n while (node) {\r\n next = node.next;\r\n node.previous = node.next = undefined;\r\n node.bytesUsed = 0;\r\n node.tileUserIds = undefined;\r\n node = next;\r\n }\r\n\r\n this._head = this._tail = this._sentinel;\r\n this._totalBytesUsed = 0;\r\n this._userIdSets.clear();\r\n }\r\n\r\n /** Compute the amount of GPU memory allocated to the tile's content and, if greater than zero, add the tile to the end of the \"not selected\" partition.\r\n * Invoked by TileAdmin whenever a tile's content is set to a valid RenderGraphic.\r\n */\r\n public add(tile: Tile): void {\r\n assert(!isLinked(tile));\r\n if (isLinked(tile))\r\n return;\r\n\r\n assert(tile.bytesUsed === 0);\r\n assert(tile.tileUserIds === undefined);\r\n\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n tile.bytesUsed = this.computeBytesUsed(tile);\r\n assert(tile.bytesUsed >= 0);\r\n assert(tile.bytesUsed === Math.floor(tile.bytesUsed));\r\n\r\n if (tile.bytesUsed <= 0)\r\n return;\r\n\r\n // Insert just before the sentinel, indicating this is the most-recently-used non-selected tile.\r\n this._totalBytesUsed += tile.bytesUsed;\r\n this.append(tile);\r\n this.moveBeforeSentinel(tile);\r\n }\r\n\r\n /** Remove the tile from the list and deduct its previously-used GPU memory from the list's running total.\r\n * Invoked by TileAdmin when a tile's content is unloaded, including when the list itself disposes of the content in its `freeMemory` method.\r\n */\r\n public drop(tile: Tile): void {\r\n assert(isLinked(tile) || tile.bytesUsed === 0);\r\n if (!isLinked(tile))\r\n return;\r\n\r\n assert(tile.bytesUsed > 0);\r\n this._totalBytesUsed -= tile.bytesUsed;\r\n assert(this._totalBytesUsed >= 0);\r\n\r\n this.unlink(tile);\r\n tile.tileUserIds = undefined;\r\n tile.bytesUsed = 0;\r\n\r\n this.assertList();\r\n }\r\n\r\n /** Mark the tiles as in use by the specified TileUser. They are moved to the end of the \"selected\" partition. */\r\n public markUsed(userId: number, tiles: Iterable<Tile>): void {\r\n for (const tile of tiles) {\r\n if (tile.bytesUsed <= 0)\r\n continue;\r\n\r\n assert(isLinked(tile));\r\n\r\n if (isLinked(tile)) {\r\n tile.tileUserIds = this._userIdSets.plus(userId, tile.tileUserIds);\r\n this.moveToEnd(tile);\r\n }\r\n }\r\n }\r\n\r\n /** Mark the tiles as no longer in user by the specified TileUser.\r\n * If this results in a tile being no longer selected for any user, it is moved to the end of the \"not selected\" partition.\r\n */\r\n public clearUsed(userId: number): void {\r\n this._userIdSets.drop(userId);\r\n let prev: LRUTileListNode | undefined = this._sentinel;\r\n while (prev && prev.next) {\r\n const tile = prev.next as Tile;\r\n assert(tile !== this._sentinel);\r\n tile.tileUserIds = this._userIdSets.minus(userId, tile.tileUserIds);\r\n if (undefined === tile.tileUserIds)\r\n this.moveBeforeSentinel(tile);\r\n else\r\n prev = tile;\r\n }\r\n }\r\n\r\n /** Dispose of the contents of tiles currently not selected for display until the total amount of memory consumed is no more than `maxBytes`\r\n * or until the contents of all un-selected tiles have been disposed.\r\n */\r\n public freeMemory(maxBytes: number): void {\r\n let prev: LRUTileListNode | undefined = this._head;\r\n while (prev && prev !== this._sentinel && this.totalBytesUsed > maxBytes) {\r\n const tile = prev as Tile;\r\n prev = tile.next;\r\n tile.freeMemory();\r\n\r\n // Some tiles (ImageryMapTile) use reference-counting, in which case freeMemory() may not actually free the contents.\r\n // If the contents *were* disposed, then `this.drop` will have been called, and `tile` is no longer in the list.\r\n // Otherwise, `tile` remains in the list. Either way, we proceed to the next entry in the list.\r\n assert((this.computeBytesUsed(tile) > 0) === isLinked(tile));\r\n }\r\n }\r\n\r\n /** Iterate over all of the tiles in the unselected partition. */\r\n public get unselectedTiles(): Iterable<Tile> {\r\n const start = this._head === this._sentinel ? undefined : this._head as Tile | undefined;\r\n return {\r\n [Symbol.iterator]: () => lruListIterator(start, this._sentinel),\r\n };\r\n }\r\n\r\n /** Iterate over all of the tiles in the selected partition. */\r\n public get selectedTiles(): Iterable<Tile> {\r\n return {\r\n [Symbol.iterator]: () => lruListIterator(this._sentinel.next as Tile | undefined, undefined),\r\n };\r\n }\r\n\r\n protected computeBytesUsed(tile: Tile): number {\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n return this._stats.totalBytes;\r\n }\r\n\r\n protected assertList(): void {\r\n assert(this._head !== undefined);\r\n assert(this._tail !== undefined);\r\n }\r\n\r\n protected append(tile: Tile): void {\r\n assert(!isLinked(tile));\r\n if (isLinked(tile))\r\n this.unlink(tile);\r\n\r\n this._tail.next = tile;\r\n tile.previous = this._tail;\r\n this._tail = tile;\r\n }\r\n\r\n protected unlink(tile: Tile): void {\r\n assert(isLinked(tile));\r\n if (!isLinked(tile))\r\n return;\r\n\r\n if (tile.next && tile.previous) {\r\n assert(tile !== this._head);\r\n assert(tile !== this._tail);\r\n assert(tile.previous.next === tile);\r\n assert(tile.next.previous === tile);\r\n\r\n tile.previous.next = tile.next;\r\n tile.next.previous = tile.previous;\r\n } else if (tile.previous) {\r\n assert(tile === this._tail);\r\n assert(undefined === tile.next);\r\n assert(tile.previous.next === tile);\r\n\r\n tile.previous.next = undefined;\r\n this._tail = tile.previous;\r\n } else {\r\n assert(tile === this._head);\r\n assert(undefined !== tile.next);\r\n assert(tile.next.previous === tile);\r\n\r\n tile.next.previous = undefined;\r\n this._head = tile.next;\r\n }\r\n\r\n tile.next = tile.previous = undefined;\r\n this.assertList();\r\n }\r\n\r\n protected moveToEnd(tile: Tile): void {\r\n this.unlink(tile);\r\n this.append(tile);\r\n }\r\n\r\n protected moveBeforeSentinel(tile: Tile): void {\r\n this.unlink(tile);\r\n tile.previous = this._sentinel.previous;\r\n this._sentinel.previous = tile;\r\n tile.next = this._sentinel;\r\n\r\n if (!tile.previous)\r\n this._head = tile;\r\n else\r\n tile.previous.next = tile;\r\n }\r\n}\r\n"]}
|