@perceptr/web-sdk
Version:
Perceptr Web SDK for recording and monitoring user sessions
82 lines (81 loc) • 3.27 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PerformanceMonitor = void 0;
const logger_1 = require("./utils/logger");
class PerformanceMonitor {
constructor(memoryLimit = PerformanceMonitor.DEFAULT_MEMORY_LIMIT, onLimitExceeded) {
if (!this.isMemoryAPIAvailable()) {
logger_1.logger.warn("Memory API is not available");
}
this.memoryLimit = memoryLimit;
this.onLimitExceeded = onLimitExceeded;
}
getMemoryLimit() {
return this.memoryLimit;
}
setMemoryLimit(memoryLimit) {
this.memoryLimit = memoryLimit;
}
start() {
if (!this.isMemoryAPIAvailable())
return;
this.checkInterval = window.setInterval(() => {
this.checkMemoryUsage();
}, PerformanceMonitor.CHECK_INTERVAL);
}
stop() {
if (this.checkInterval) {
clearInterval(this.checkInterval);
}
}
checkMemoryUsage() {
return __awaiter(this, void 0, void 0, function* () {
try {
const memory = yield this.getMemoryInfo();
if (memory && typeof memory === "object" && "usedJSHeapSize" in memory) {
if (memory.usedJSHeapSize > memory.jsHeapSizeLimit) {
this.onLimitExceeded();
}
}
else if (memory && typeof memory === "object" && "bytes" in memory) {
if (memory.bytes > this.memoryLimit) {
this.onLimitExceeded();
}
}
}
catch (error) {
logger_1.logger.warn("Memory measurement failed:", error);
}
});
}
getMemoryInfo() {
return __awaiter(this, void 0, void 0, function* () {
if (!this.isMemoryAPIAvailable())
return null;
if (typeof window.performance.measureUserAgentSpecificMemory === "function") {
return window.performance.measureUserAgentSpecificMemory();
}
return window.performance.memory;
});
}
isMemoryAPIAvailable() {
if (typeof window.performance.measureUserAgentSpecificMemory === "function" ||
window.performance.memory) {
return true;
}
return false;
}
}
exports.PerformanceMonitor = PerformanceMonitor;
PerformanceMonitor.MB = 1024 * 1024;
PerformanceMonitor.DEFAULT_MEMORY_LIMIT = 50 * PerformanceMonitor.MB;
PerformanceMonitor.CHECK_INTERVAL = 5000;