Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
public async waitForAllTilesToRender(): Promise {
this.renderFrame();
// NB: ToolAdmin loop is not turned on, and this viewport is not tracked by ViewManager - must manually pump tile request scheduler.
IModelApp.tileAdmin.process();
if (this.areAllTilesLoaded)
return Promise.resolve();
await new Promise((resolve: any) => setTimeout(resolve, 100));
// This viewport isn't added to ViewManager, so it won't be notified (and have its scene invalidated) when new tiles become loaded.
this.sync.invalidateScene();
return this.waitForAllTilesToRender();
}
public async waitForAllTilesToRender(): Promise {
this.renderFrame();
// NB: ToolAdmin loop is not turned on, and this vieport is not tracked by ViewManager - must manually pump tile request scheduler.
IModelApp.tileAdmin.process();
if (this.areAllTilesLoaded)
return Promise.resolve();
await new Promise((resolve: any) => setTimeout(resolve, 100));
// This viewport isn't added to ViewManager, so it won't be notified (and have its scene invalidated) when new tiles become loaded.
this.sync.invalidateScene();
return this.waitForAllTilesToRender();
}
const timer = new StopWatch(undefined, true);
let haveNewTiles = true;
while (haveNewTiles) {
theViewport!.sync.setRedrawPending;
theViewport!.sync.invalidateScene();
theViewport!.renderFrame();
// The scene is ready when (1) all required TileTree roots have been created and (2) all required tiles have finished loading
const sceneContext = theViewport!.createSceneContext();
activeViewState.viewState!.createScene(sceneContext);
sceneContext.requestMissingTiles();
haveNewTiles = !(activeViewState.viewState!.areAllTileTreesLoaded) || sceneContext.hasMissingTiles || 0 < sceneContext.missingTiles.size;
// NB: The viewport is NOT added to the ViewManager's render loop, therefore we must manually pump the tile request scheduler...
if (haveNewTiles)
IModelApp.tileAdmin.process();
// debugPrint(haveNewTiles ? "Awaiting tile loads..." : "...All tiles loaded.");
await resolveAfterXMilSeconds(100);
}
theViewport!.continuousRendering = false;
theViewport!.renderFrame();
timer.stop();
curTileLoadingTime = timer.current.milliseconds;
}
private updateMaxActive(value: number): void {
IModelApp.tileAdmin.maxActiveRequests = value;
}
private addMaxActive(parent: HTMLElement): void {
const div = document.createElement("div");
const label = document.createElement("label") as HTMLLabelElement;
label.style.display = "inline";
label.htmlFor = "maxActiveRequests";
label.innerText = "Max Active Requests: ";
div.appendChild(label);
createNumericInput({
parent: div,
id: "maxActiveRequests",
display: "inline",
min: 0,
step: 1,
value: IModelApp.tileAdmin.maxActiveRequests,
handler: (value, _input) => this.updateMaxActive(value),
});
parent.appendChild(div);
}