tasq/node_modules/onnxruntime-web/lib/onnxjs/backends/webgl/session-handler.js

70 lines
3.1 KiB
JavaScript

"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.WebGLSessionHandler = void 0;
const instrument_1 = require("../../instrument");
const opset_1 = require("../../opset");
const inference_handler_1 = require("./inference-handler");
const op_resolve_rules_1 = require("./op-resolve-rules");
const program_manager_1 = require("./program-manager");
const texture_layout_strategy_1 = require("./texture-layout-strategy");
const texture_manager_1 = require("./texture-manager");
class WebGLSessionHandler {
constructor(backend, context) {
this.backend = backend;
this.context = context;
this.layoutStrategy = new texture_layout_strategy_1.PreferLogicalStrategy(backend.glContext.maxTextureSize);
this.programManager = new program_manager_1.ProgramManager(this.context.profiler, backend.glContext, this.layoutStrategy);
this.textureManager = new texture_manager_1.TextureManager(backend.glContext, this.layoutStrategy, this.context.profiler, { reuseTextures: backend.textureCacheMode === 'full' });
this.packedTextureDataCache = new Map();
this.unpackedTextureDataCache = new Map();
this.pack = backend.pack;
this.pack2unpackMap = new Map();
this.unpack2packMap = new Map();
}
createInferenceHandler() {
return new inference_handler_1.WebGLInferenceHandler(this);
}
onGraphInitialized(graph) {
const initializers = graph.getValues().filter(v => v.from === -1 && v.tensor).map(v => v.tensor.dataId);
this.initializers = new Set(initializers);
}
isInitializer(tensorId) {
return this.initializers ? this.initializers.has(tensorId) : false;
}
addInitializer(tensorId) {
this.initializers.add(tensorId);
}
getTextureData(tensorId, isPacked) {
if (isPacked) {
return this.packedTextureDataCache.get(tensorId);
}
else {
return this.unpackedTextureDataCache.get(tensorId);
}
}
setTextureData(tensorId, textureData, isPacked = false) {
instrument_1.Logger.verbose('WebGLSessionHandler', 'Storing Texture data in cache');
if (isPacked) {
this.packedTextureDataCache.set(tensorId, textureData);
}
else {
this.unpackedTextureDataCache.set(tensorId, textureData);
}
}
dispose() {
this.programManager.dispose();
this.textureManager.clearActiveTextures();
this.packedTextureDataCache.forEach(td => this.textureManager.releaseTexture(td, true));
this.packedTextureDataCache = new Map();
this.unpackedTextureDataCache.forEach(td => this.textureManager.releaseTexture(td, true));
this.unpackedTextureDataCache = new Map();
}
resolve(node, opsets, graph) {
const op = (0, opset_1.resolveOperator)(node, opsets, op_resolve_rules_1.WEBGL_OP_RESOLVE_RULES);
return { impl: op.opImpl, context: op.opInit ? op.opInit(node, graph) : node };
}
}
exports.WebGLSessionHandler = WebGLSessionHandler;
//# sourceMappingURL=session-handler.js.map