public void V8ScriptEngine_ResourceConstraints_Dual() { const int limit = 4 * 1024 * 1024; const string code = @"x = []; for (i = 0; i < 1024 * 1024; i++) { x.push(x); }"; engine.Execute(code); engine.CollectGarbage(true); var usedHeapSize = engine.GetRuntimeHeapInfo().UsedHeapSize; var constraints = new V8RuntimeConstraints { MaxYoungSpaceSize = limit, MaxOldSpaceSize = limit, MaxExecutableSize = limit }; engine.Dispose(); engine = new V8ScriptEngine(constraints); TestUtil.AssertException<ScriptEngineException>(() => { try { engine.Execute(code); } catch (ScriptEngineException exception) { Assert.IsTrue(exception.IsFatal); throw; } }); engine.CollectGarbage(true); Assert.IsTrue(usedHeapSize > engine.GetRuntimeHeapInfo().UsedHeapSize); }
public void BugFix_V8RuntimeConstraintScale() { const int maxNewSpaceSize = 16; const int maxOldSpaceSize = 512; var constraints = new V8RuntimeConstraints { MaxNewSpaceSize = maxNewSpaceSize, MaxOldSpaceSize = maxOldSpaceSize }; using (var tempEngine = new V8ScriptEngine(constraints)) { Assert.AreEqual(Math.PI, tempEngine.Evaluate("Math.PI")); Assert.AreEqual(Convert.ToUInt64(maxNewSpaceSize * 4 + maxOldSpaceSize), tempEngine.GetRuntimeHeapInfo().HeapSizeLimit / (1024 * 1024)); } constraints = new V8RuntimeConstraints { MaxNewSpaceSize = maxNewSpaceSize * 1024 * 1024, MaxOldSpaceSize = maxOldSpaceSize * 1024 * 1024 }; using (var tempEngine = new V8ScriptEngine(constraints)) { Assert.AreEqual(Math.E, tempEngine.Evaluate("Math.E")); Assert.AreEqual(Convert.ToUInt64(maxNewSpaceSize * 4 + maxOldSpaceSize), tempEngine.GetRuntimeHeapInfo().HeapSizeLimit / (1024 * 1024)); } }