const experimentLimits = {
maxExecutionTime: 5000, // milliseconds
maxMemoryUsage: 1024 * 1024, // KB
maxStackDepth: 1000,
};
function trackExecution(code) {
let startTime = performance.now();
let memoryUsage = 0;
let stackDepth = 0;
const executionContext = {
startTime: startTime,
memoryUsage: memoryUsage,
stackDepth: stackDepth,
};
try {
// Wrap the code in a function to capture execution context
const wrappedCode = `(function() {
${code}
return null;
})();`;
// Execute the wrapped code
eval(wrappedCode);
const endTime = performance.now();
const executionTime = endTime - startTime;
// Calculate memory usage (approximation)
memoryUsage = process.memoryUsage().heapTotal / (1024 * 1024); // in MB
// Calculate stack depth (approximation)
stackDepth = arguments.length;
//Check limits
if (executionTime > experimentLimits.maxExecutionTime) {
console.warn(`Execution time exceeded limit (${experimentLimits.maxExecutionTime}ms): ${executionTime}ms`);
}
if (memoryUsage > experimentLimits.maxMemoryUsage) {
console.warn(`Memory usage exceeded limit (${experimentLimits.maxMemoryUsage}KB): ${memoryUsage}KB`);
}
if (stackDepth > experimentLimits.maxStackDepth) {
console.warn(`Stack depth exceeded limit (${experimentLimits.maxStackDepth}): ${stackDepth}`);
}
return {
executionTime: executionTime,
memoryUsage: memoryUsage,
stackDepth: stackDepth,
};
} catch (error) {
console.error("Error during execution:", error);
return {
executionTime: performance.now() - startTime,
memoryUsage: process.memoryUsage().heapTotal / (1024 * 1024),
stackDepth: arguments.length,
error: error.message
};
}
}
// Example Usage:
// const myCode = `
// let sum = 0;
// for (let i = 0; i < 1000000; i++) {
// sum += i;
// }
// return sum;
// `;
// const results = trackExecution(myCode);
// console.log(results);
Add your comment