1. const experimentLimits = {
  2. maxExecutionTime: 5000, // milliseconds
  3. maxMemoryUsage: 1024 * 1024, // KB
  4. maxStackDepth: 1000,
  5. };
  6. function trackExecution(code) {
  7. let startTime = performance.now();
  8. let memoryUsage = 0;
  9. let stackDepth = 0;
  10. const executionContext = {
  11. startTime: startTime,
  12. memoryUsage: memoryUsage,
  13. stackDepth: stackDepth,
  14. };
  15. try {
  16. // Wrap the code in a function to capture execution context
  17. const wrappedCode = `(function() {
  18. ${code}
  19. return null;
  20. })();`;
  21. // Execute the wrapped code
  22. eval(wrappedCode);
  23. const endTime = performance.now();
  24. const executionTime = endTime - startTime;
  25. // Calculate memory usage (approximation)
  26. memoryUsage = process.memoryUsage().heapTotal / (1024 * 1024); // in MB
  27. // Calculate stack depth (approximation)
  28. stackDepth = arguments.length;
  29. //Check limits
  30. if (executionTime > experimentLimits.maxExecutionTime) {
  31. console.warn(`Execution time exceeded limit (${experimentLimits.maxExecutionTime}ms): ${executionTime}ms`);
  32. }
  33. if (memoryUsage > experimentLimits.maxMemoryUsage) {
  34. console.warn(`Memory usage exceeded limit (${experimentLimits.maxMemoryUsage}KB): ${memoryUsage}KB`);
  35. }
  36. if (stackDepth > experimentLimits.maxStackDepth) {
  37. console.warn(`Stack depth exceeded limit (${experimentLimits.maxStackDepth}): ${stackDepth}`);
  38. }
  39. return {
  40. executionTime: executionTime,
  41. memoryUsage: memoryUsage,
  42. stackDepth: stackDepth,
  43. };
  44. } catch (error) {
  45. console.error("Error during execution:", error);
  46. return {
  47. executionTime: performance.now() - startTime,
  48. memoryUsage: process.memoryUsage().heapTotal / (1024 * 1024),
  49. stackDepth: arguments.length,
  50. error: error.message
  51. };
  52. }
  53. }
  54. // Example Usage:
  55. // const myCode = `
  56. // let sum = 0;
  57. // for (let i = 0; i < 1000000; i++) {
  58. // sum += i;
  59. // }
  60. // return sum;
  61. // `;
  62. // const results = trackExecution(myCode);
  63. // console.log(results);

Add your comment