diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts
index be3e13ede..acc372264 100644
--- a/lib/base-compiler.ts
+++ b/lib/base-compiler.ts
@@ -1966,7 +1966,7 @@ export class BaseCompiler implements ICompiler {
inputFilename: inputFilename,
dirPath: dirPath,
executableFilename: this.getExecutableFilename(dirPath, this.outputFilebase, key),
- packageDownloadAndUnzipTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ packageDownloadAndUnzipTime: utils.deltaTimeNanoToMili(startTime, endTime),
});
}
logger.debug('Tried to get executable from cache, but got a cache miss');
@@ -2904,10 +2904,7 @@ export class BaseCompiler implements ICompiler {
const result = await this.env.cacheGet(key as any);
if (result) {
const cacheRetrieveTimeEnd = process.hrtime.bigint();
- result.retreivedFromCacheTime = (
- (cacheRetrieveTimeEnd - cacheRetrieveTimeStart) /
- BigInt(1000000)
- ).toString();
+ result.retreivedFromCacheTime = utils.deltaTimeNanoToMili(cacheRetrieveTimeStart, cacheRetrieveTimeEnd);
result.retreivedFromCache = true;
if (doExecute) {
const queueTime = performance.now();
diff --git a/lib/buildenvsetup/buildenv.interfaces.ts b/lib/buildenvsetup/buildenv.interfaces.ts
index 4c726662d..30a3abc58 100644
--- a/lib/buildenvsetup/buildenv.interfaces.ts
+++ b/lib/buildenvsetup/buildenv.interfaces.ts
@@ -1,5 +1,5 @@
export type BuildEnvDownloadInfo = {
step: string;
packageUrl: string;
- time: string;
+ time: number;
};
diff --git a/lib/buildenvsetup/ceconan.ts b/lib/buildenvsetup/ceconan.ts
index e76570e7c..ee314378d 100644
--- a/lib/buildenvsetup/ceconan.ts
+++ b/lib/buildenvsetup/ceconan.ts
@@ -35,10 +35,10 @@ import {CompilerInfo} from '../../types/compiler.interfaces.js';
import {CompilationEnvironment} from '../compilation-env.js';
import {logger} from '../logger.js';
import {VersionInfo} from '../options-handler.js';
+import * as utils from '../utils.js';
import {BuildEnvSetupBase} from './base.js';
import type {BuildEnvDownloadInfo} from './buildenv.interfaces.js';
-// import { CompilationEnvironment } from '../compilation-env.js';
export type ConanBuildProperties = {
os: string;
@@ -189,7 +189,7 @@ export class BuildEnvSetupCeConanDirect extends BuildEnvSetupBase {
resolve({
step: `Download of ${libId} ${version}`,
packageUrl: packageUrl,
- time: ((endTime - startTime) / BigInt(1000000)).toString(),
+ time: utils.deltaTimeNanoToMili(startTime, endTime),
});
});
diff --git a/lib/compilers/assembly.ts b/lib/compilers/assembly.ts
index b6aaa601e..1d9fa9ed6 100644
--- a/lib/compilers/assembly.ts
+++ b/lib/compilers/assembly.ts
@@ -128,7 +128,7 @@ export class AssemblyCompiler extends BaseCompiler {
okToCache: false,
filenameTransform: (fn: string) => fn,
stdout: [],
- execTime: '',
+ execTime: 0,
timedOut: false,
compilationOptions: [],
};
diff --git a/lib/compilers/rga.ts b/lib/compilers/rga.ts
index 0637b34db..d9a21857f 100644
--- a/lib/compilers/rga.ts
+++ b/lib/compilers/rga.ts
@@ -35,6 +35,7 @@ import type {ParseFiltersAndOutputOptions} from '../../types/features/filters.in
import {BaseCompiler} from '../base-compiler.js';
import * as exec from '../exec.js';
import {logger} from '../logger.js';
+import * as utils from '../utils.js';
interface ASICSelection {
asic?: string;
@@ -101,10 +102,6 @@ Please supply an ASIC from the following options:`,
};
}
- execTime(startTime: bigint, endTime: bigint): string {
- return ((endTime - startTime) / BigInt(1000000)).toString();
- }
-
override async runCompiler(
compiler: string,
options: string[],
@@ -153,7 +150,7 @@ Please supply an ASIC from the following options:`,
okToCache: true,
filenameTransform: (x: string) => x,
stdout: asicSelection.error,
- execTime: this.execTime(startTime, endTime),
+ execTime: utils.deltaTimeNanoToMili(startTime, endTime),
};
}
@@ -161,7 +158,7 @@ Please supply an ASIC from the following options:`,
if (dxcResult.code !== 0) {
// Failed to compile SPIR-V intermediate product. Exit immediately with DXC invocation result.
const endTime = process.hrtime.bigint();
- dxcResult.execTime = this.execTime(startTime, endTime);
+ dxcResult.execTime = utils.deltaTimeNanoToMili(startTime, endTime);
return dxcResult;
}
@@ -174,7 +171,7 @@ Please supply an ASIC from the following options:`,
okToCache: true,
filenameTransform: (x: string) => x,
stdout: 'Failed to emit intermediate SPIR-V result.',
- execTime: this.execTime(startTime, endTime),
+ execTime: utils.deltaTimeNanoToMili(startTime, endTime),
};
}
@@ -196,7 +193,7 @@ Please supply an ASIC from the following options:`,
if (rgaResult.code !== 0) {
// Failed to compile AMD ISA
const endTime = process.hrtime.bigint();
- rgaResult.execTime = this.execTime(startTime, endTime);
+ rgaResult.execTime = utils.deltaTimeNanoToMili(startTime, endTime);
return rgaResult;
}
@@ -263,14 +260,14 @@ where [ASIC] corresponds to one of the following options:`;
}
const endTime = process.hrtime.bigint();
- rgaResult.execTime = this.execTime(startTime, endTime);
+ rgaResult.execTime = utils.deltaTimeNanoToMili(startTime, endTime);
return rgaResult;
}
}
// Arriving here means the expected ISA result wasn't emitted. Synthesize an error.
const endTime = process.hrtime.bigint();
- rgaResult.execTime = this.execTime(startTime, endTime);
+ rgaResult.execTime = utils.deltaTimeNanoToMili(startTime, endTime);
rgaResult.stdout += `\nRGA didn't emit expected ISA output.`;
return rgaResult;
}
diff --git a/lib/exec.ts b/lib/exec.ts
index 1534f60c9..004e332ea 100644
--- a/lib/exec.ts
+++ b/lib/exec.ts
@@ -39,6 +39,7 @@ import {assert, unwrap, unwrapString} from './assert.js';
import {logger} from './logger.js';
import {Graceful} from './node-graceful.js';
import {propsFor} from './properties.js';
+import * as utils from './utils.js';
type NsJailOptions = {
args: string[];
@@ -174,7 +175,7 @@ export function executeDirect(
stdout: streams.stdout,
stderr: streams.stderr,
truncated: streams.truncated,
- execTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ execTime: utils.deltaTimeNanoToMili(startTime, endTime),
};
// Check debug level explicitly as result may be a very large string
// which we'd prefer to avoid preparing if it won't be used
diff --git a/lib/execution/base-execution-env.ts b/lib/execution/base-execution-env.ts
index fb70cff7b..891ef8543 100644
--- a/lib/execution/base-execution-env.ts
+++ b/lib/execution/base-execution-env.ts
@@ -118,7 +118,7 @@ export class LocalExecutionEnvironment implements IExecutionEnvironment {
inputFilename: inputFilename,
dirPath: dirPath,
executableFilename: executableFilename,
- packageDownloadAndUnzipTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ packageDownloadAndUnzipTime: utils.deltaTimeNanoToMili(startTime, endTime),
});
} else {
throw new ExecutablePackageCacheMiss('Tried to get executable from cache, but got a cache miss');
diff --git a/lib/parsers/asm-parser-beebasm.ts b/lib/parsers/asm-parser-beebasm.ts
index 32169360d..3597f7fb4 100644
--- a/lib/parsers/asm-parser-beebasm.ts
+++ b/lib/parsers/asm-parser-beebasm.ts
@@ -14,7 +14,7 @@ export class AsmParserBeebAsm extends AsmParser {
this.asmOpcodeRe = /^\s*(?
[\dA-F]+)\s*(?([\dA-F]{2} ?)+)\s*(?.*)/;
}
- override processAsm(asm: string, filters: ParseFiltersAndOutputOptions): ParsedAsmResult {
+ override processAsm(asm: string, _filters: ParseFiltersAndOutputOptions): ParsedAsmResult {
const startTime = process.hrtime.bigint();
const asmLines: ParsedAsmResultLine[] = [];
@@ -52,7 +52,7 @@ export class AsmParserBeebAsm extends AsmParser {
return {
asm: asmLines,
labelDefinitions: labelDefinitions,
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
};
}
diff --git a/lib/parsers/asm-parser-cpp.ts b/lib/parsers/asm-parser-cpp.ts
index bd173d15a..b01a659cf 100644
--- a/lib/parsers/asm-parser-cpp.ts
+++ b/lib/parsers/asm-parser-cpp.ts
@@ -71,7 +71,7 @@ export class AsmParserCpp implements IAsmParser {
return {
asm: asm,
labelDefinitions: {},
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: 0,
};
}
diff --git a/lib/parsers/asm-parser-dart.ts b/lib/parsers/asm-parser-dart.ts
index e24888e22..642e16c1c 100644
--- a/lib/parsers/asm-parser-dart.ts
+++ b/lib/parsers/asm-parser-dart.ts
@@ -168,7 +168,7 @@ export class DartAsmParser extends AsmParser {
return {
asm: asm,
labelDefinitions: labelDefinitions,
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
};
}
diff --git a/lib/parsers/asm-parser-dotnet.ts b/lib/parsers/asm-parser-dotnet.ts
index a576f26e4..c87f6456f 100644
--- a/lib/parsers/asm-parser-dotnet.ts
+++ b/lib/parsers/asm-parser-dotnet.ts
@@ -22,6 +22,7 @@
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
+import {ParsedAsmResult} from '../../types/asmresult/asmresult.interfaces.js';
import {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
import * as utils from '../utils.js';
@@ -133,7 +134,7 @@ export class DotNetAsmParser implements IAsmParser {
return cleanedAsm;
}
- process(asmResult: string, filters: ParseFiltersAndOutputOptions) {
+ process(asmResult: string, filters: ParseFiltersAndOutputOptions): ParsedAsmResult {
const startTime = process.hrtime.bigint();
const asm: {
@@ -198,7 +199,7 @@ export class DotNetAsmParser implements IAsmParser {
return {
asm: asm,
labelDefinitions: Object.fromEntries(labelDefinitions.filter(i => i[1] !== -1)),
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
};
}
diff --git a/lib/parsers/asm-parser-mads.ts b/lib/parsers/asm-parser-mads.ts
index 2a70f7efc..8bd6ce019 100644
--- a/lib/parsers/asm-parser-mads.ts
+++ b/lib/parsers/asm-parser-mads.ts
@@ -232,7 +232,7 @@ export class MadsAsmParser extends AsmParser {
return {
asm: asm,
labelDefinitions: labelDefinitions,
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
languageId: 'asm6502',
};
diff --git a/lib/parsers/asm-parser-spirv.ts b/lib/parsers/asm-parser-spirv.ts
index 209edf5ea..dd609801c 100644
--- a/lib/parsers/asm-parser-spirv.ts
+++ b/lib/parsers/asm-parser-spirv.ts
@@ -22,7 +22,7 @@
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
-import {AsmResultLabel, ParsedAsmResultLine} from '../../types/asmresult/asmresult.interfaces.js';
+import {AsmResultLabel, ParsedAsmResult, ParsedAsmResultLine} from '../../types/asmresult/asmresult.interfaces.js';
import {ParseFiltersAndOutputOptions} from '../../types/features/filters.interfaces.js';
import * as utils from '../utils.js';
@@ -85,7 +85,7 @@ export class SPIRVAsmParser extends AsmParser {
return labelsInLine;
}
- override processAsm(asmResult, filters: ParseFiltersAndOutputOptions) {
+ override processAsm(asmResult, filters: ParseFiltersAndOutputOptions): ParsedAsmResult {
const startTime = process.hrtime.bigint();
const asm: ParsedAsmResultLine[] = [];
@@ -183,7 +183,7 @@ export class SPIRVAsmParser extends AsmParser {
asm: asm,
labelDefinitions,
languageId: 'spirv',
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
};
}
diff --git a/lib/parsers/asm-parser-z88dk.ts b/lib/parsers/asm-parser-z88dk.ts
index 460942e8d..5672fcf46 100644
--- a/lib/parsers/asm-parser-z88dk.ts
+++ b/lib/parsers/asm-parser-z88dk.ts
@@ -188,7 +188,7 @@ export class AsmParserZ88dk extends AsmParser {
return {
asm: asm,
labelDefinitions: labelDefinitions,
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
};
}
@@ -260,7 +260,7 @@ export class AsmParserZ88dk extends AsmParser {
return {
asm: asm,
labelDefinitions: labelDefinitions,
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
};
}
diff --git a/lib/parsers/asm-parser.ts b/lib/parsers/asm-parser.ts
index 314e57e37..70034d264 100644
--- a/lib/parsers/asm-parser.ts
+++ b/lib/parsers/asm-parser.ts
@@ -673,7 +673,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
return {
asm: asm,
labelDefinitions: labelDefinitions,
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
};
}
@@ -829,7 +829,7 @@ export class AsmParser extends AsmRegex implements IAsmParser {
return {
asm: asm,
labelDefinitions: labelDefinitions,
- parsingTime: ((endTime - startTime) / BigInt(1000000)).toString(),
+ parsingTime: utils.deltaTimeNanoToMili(startTime, endTime),
filteredCount: startingLineCount - asm.length,
};
}
diff --git a/lib/utils.ts b/lib/utils.ts
index 858403b0e..f97c19fe3 100644
--- a/lib/utils.ts
+++ b/lib/utils.ts
@@ -533,7 +533,11 @@ export function getEmptyExecutionResult(): BasicExecutionResult {
filenameTransform: x => x,
stdout: [],
stderr: [],
- execTime: '',
+ execTime: 0,
timedOut: false,
};
}
+
+export function deltaTimeNanoToMili(startTime: bigint, endTime: bigint): number {
+ return Number((endTime - startTime) / BigInt(1_000_000));
+}
diff --git a/test/asm-tests.ts b/test/asm-tests.ts
index 715e948f2..eea8679b2 100644
--- a/test/asm-tests.ts
+++ b/test/asm-tests.ts
@@ -200,7 +200,7 @@ ${' '.repeat(65530)}x
ret
`;
const output = parser.process(asm, filters);
- expect(parseInt(unwrap(output.parsingTime))).toBeLessThan(500); // reported as ms, generous timeout for ci runner
+ expect(unwrap(output.parsingTime)).toBeLessThan(500); // reported as ms, generous timeout for ci runner
});
});
@@ -229,6 +229,6 @@ ${' '.repeat(65530)}x
ret
`;
const output = parser.process(asm, filters);
- expect(parseInt(unwrap(output.parsingTime))).toBeLessThan(500); // reported as ms, generous timeout for ci runner
+ expect(unwrap(output.parsingTime)).toBeLessThan(500); // reported as ms, generous timeout for ci runner
});
});
diff --git a/types/asmresult/asmresult.interfaces.ts b/types/asmresult/asmresult.interfaces.ts
index d401cfb09..8787d4075 100644
--- a/types/asmresult/asmresult.interfaces.ts
+++ b/types/asmresult/asmresult.interfaces.ts
@@ -34,12 +34,11 @@ export type ParsedAsmResultLine = {
export type ParsedAsmResult = {
asm: ParsedAsmResultLine[];
labelDefinitions?: Record;
- parsingTime?: string;
+ parsingTime?: number;
filteredCount?: number;
externalParserUsed?: boolean;
- // TODO(#4655) A few compilers seem to assign strings here. It might be ok but we should look into it more.
- objdumpTime?: number | string;
- execTime?: string;
+ objdumpTime?: number;
+ execTime?: number;
languageId?: string;
};
diff --git a/types/compilation/compilation.interfaces.ts b/types/compilation/compilation.interfaces.ts
index 28b61e286..aaa0e07b5 100644
--- a/types/compilation/compilation.interfaces.ts
+++ b/types/compilation/compilation.interfaces.ts
@@ -216,7 +216,7 @@ export type CompilationResult = {
retreivedFromCache?: boolean;
retreivedFromCacheTime?: number;
packageDownloadAndUnzipTime?: number;
- execTime?: number | string;
+ execTime?: number;
processExecutionResultTime?: number;
objdumpTime?: number;
parsingTime?: number;
diff --git a/types/execution/execution.interfaces.ts b/types/execution/execution.interfaces.ts
index b28455e3d..a9746bfcb 100644
--- a/types/execution/execution.interfaces.ts
+++ b/types/execution/execution.interfaces.ts
@@ -8,7 +8,7 @@ export type UnprocessedExecResult = {
filenameTransform: FilenameTransformFunc;
stdout: string;
stderr: string;
- execTime: string;
+ execTime: number;
timedOut: boolean;
languageId?: string;
truncated: boolean;
@@ -26,7 +26,7 @@ export type BasicExecutionResult = {
filenameTransform: FilenameTransformFunc;
stdout: ResultLine[];
stderr: ResultLine[];
- execTime: string;
+ execTime: number;
processExecutionResultTime?: number;
timedOut: boolean;
languageId?: string;