onnxruntime-web
Version:
A Javascript library for running ONNX models on browsers
83 lines (82 loc) • 3.12 kB
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