Merge pull request #1594 from danielyxie/dev

Fix ram miscalc and ls with tiemstamps
This commit is contained in:
hydroflame 2021-10-27 19:10:38 -04:00 committed by GitHub
commit a4d4ebe2a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 29 additions and 29 deletions

22
dist/vendor.bundle.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -114,13 +114,14 @@ function NetscriptFunctions(workerScript: WorkerScript): NS {
threads = 1; threads = 1;
} }
workerScript.dynamicRamUsage += ramCost * threads; workerScript.dynamicRamUsage += ramCost;
if (workerScript.dynamicRamUsage > 1.01 * workerScript.ramUsage) { if (workerScript.dynamicRamUsage > 1.01 * workerScript.ramUsage) {
throw makeRuntimeRejectMsg( throw makeRuntimeRejectMsg(
workerScript, workerScript,
`Dynamic RAM usage calculated to be greater than initial RAM usage on fn: ${fnName}. `Dynamic RAM usage calculated to be greater than initial RAM usage on fn: ${fnName}.
This is probably because you somehow circumvented the static RAM calculation. This is probably because you somehow circumvented the static RAM calculation.
Threads: ${threads}
Dynamic RAM Usage: ${numeralWrapper.formatRAM(workerScript.dynamicRamUsage)} Dynamic RAM Usage: ${numeralWrapper.formatRAM(workerScript.dynamicRamUsage)}
Static RAM Usage: ${numeralWrapper.formatRAM(workerScript.ramUsage)} Static RAM Usage: ${numeralWrapper.formatRAM(workerScript.ramUsage)}
@ -131,11 +132,6 @@ function NetscriptFunctions(workerScript: WorkerScript): NS {
* Using map access to do the same * Using map access to do the same
  const myScan = ns['scan'];   const myScan = ns['scan'];
* Saving script in the improper order.
  Increase the cost of an imported script, save it, then run the
  parent. To fix this just re-open & save every script in order
  from most imported to least imported (parent script).
Sorry :(`, Sorry :(`,
); );
} }

@ -8,7 +8,7 @@ function makeScriptBlob(code: string): Blob {
return new Blob([code], { type: "text/javascript" }); return new Blob([code], { type: "text/javascript" });
} }
export function compile(script: Script, scripts: Script[]): void { export async function compile(script: Script, scripts: Script[]): Promise<void> {
if (!shouldCompile(script, scripts)) return; if (!shouldCompile(script, scripts)) return;
// The URL at the top is the one we want to import. It will // The URL at the top is the one we want to import. It will
// recursively import all the other modules in the urlStack. // recursively import all the other modules in the urlStack.
@ -17,7 +17,7 @@ export function compile(script: Script, scripts: Script[]): void {
// but not really behaves like import. Particularly, it cannot // but not really behaves like import. Particularly, it cannot
// load fully dynamic content. So we hide the import from webpack // load fully dynamic content. So we hide the import from webpack
// by placing it inside an eval call. // by placing it inside an eval call.
script.markUpdated(); await script.updateRamUsage(scripts);
const uurls = _getScriptUrls(script, scripts, []); const uurls = _getScriptUrls(script, scripts, []);
if (script.url) URL.revokeObjectURL(script.url); // remove the old reference. if (script.url) URL.revokeObjectURL(script.url); // remove the old reference.
if (script.dependencies.length > 0) script.dependencies.forEach((dep) => URL.revokeObjectURL(dep.url)); if (script.dependencies.length > 0) script.dependencies.forEach((dep) => URL.revokeObjectURL(dep.url));
@ -37,7 +37,8 @@ export function compile(script: Script, scripts: Script[]): void {
export async function executeJSScript(scripts: Script[] = [], workerScript: WorkerScript): Promise<void> { export async function executeJSScript(scripts: Script[] = [], workerScript: WorkerScript): Promise<void> {
const script = workerScript.getScript(); const script = workerScript.getScript();
if (script === null) throw new Error("script is null"); if (script === null) throw new Error("script is null");
compile(script, scripts); await compile(script, scripts);
workerScript.ramUsage = script.ramUsage;
const loadedModule = await script.module; const loadedModule = await script.module;
const ns = workerScript.env.vars; const ns = workerScript.env.vars;

@ -477,7 +477,8 @@ function createAndAddWorkerScript(runningScriptObj: RunningScript, server: BaseS
} else { } else {
runningScriptObj.threads = 1; runningScriptObj.threads = 1;
} }
const ramUsage = roundToTwo(getRamUsageFromRunningScript(runningScriptObj) * threads); const oneRamUsage = getRamUsageFromRunningScript(runningScriptObj);
const ramUsage = roundToTwo(oneRamUsage * threads);
const ramAvailable = server.maxRam - server.ramUsed; const ramAvailable = server.maxRam - server.ramUsed;
if (ramUsage > ramAvailable) { if (ramUsage > ramAvailable) {
dialogBoxCreate( dialogBoxCreate(
@ -502,7 +503,7 @@ function createAndAddWorkerScript(runningScriptObj: RunningScript, server: BaseS
// Create the WorkerScript. NOTE: WorkerScript ctor will set the underlying // Create the WorkerScript. NOTE: WorkerScript ctor will set the underlying
// RunningScript's PID as well // RunningScript's PID as well
const s = new WorkerScript(runningScriptObj, pid, NetscriptFunctions); const s = new WorkerScript(runningScriptObj, pid, NetscriptFunctions);
s.ramUsage = ramUsage; s.ramUsage = oneRamUsage;
// Add the WorkerScript to the global pool // Add the WorkerScript to the global pool
workerScripts.set(pid, s); workerScripts.set(pid, s);

@ -22,6 +22,12 @@ export class Output {
export class RawOutput { export class RawOutput {
raw: React.ReactNode; raw: React.ReactNode;
constructor(node: React.ReactNode) { constructor(node: React.ReactNode) {
if (Settings.EnableTimestamps)
node = (
<>
[{getTimestamp()}] {node}
</>
);
this.raw = node; this.raw = node;
} }
} }

@ -143,10 +143,6 @@ export function ls(
{ segments: allScripts, style: { color: "yellow", fontStyle: "bold" } }, { segments: allScripts, style: { color: "yellow", fontStyle: "bold" } },
].filter((g) => g.segments.length > 0); ].filter((g) => g.segments.length > 0);
for (let i = 0; i < groups.length; i++) { for (let i = 0; i < groups.length; i++) {
if (i !== 0) {
terminal.print("");
terminal.print("");
}
postSegments(groups[i].segments, groups[i].style); postSegments(groups[i].segments, groups[i].style);
} }
} }