Added performance metrics for transform and flags for types
This commit is contained in:
parent
e984fb80b6
commit
38c24798e4
|
@ -2,6 +2,9 @@
|
|||
/// <reference path="transform.generated.ts" />
|
||||
/* @internal */
|
||||
namespace ts.transform {
|
||||
|
||||
/* @internal */ export let aggregateTime = 0;
|
||||
|
||||
// Flags enum to track count of temp variables and a few dedicated names
|
||||
const enum TempFlags {
|
||||
Auto = 0x00000000, // No preferred name
|
||||
|
@ -40,6 +43,8 @@ namespace ts.transform {
|
|||
function aggregateTransformFlagsForNode(node: Node) {
|
||||
forEachChild(node, aggregateTransformFlagsForChildNode);
|
||||
|
||||
let start = new Date().getTime();
|
||||
|
||||
if (node.flags & NodeFlags.Ambient) {
|
||||
transformFlags |= TransformFlags.ThisNodeIsTypeScript;
|
||||
}
|
||||
|
@ -281,9 +286,34 @@ namespace ts.transform {
|
|||
case SyntaxKind.ExportDeclaration:
|
||||
transformFlags |= TransformFlags.ThisNodeIsES6;
|
||||
break;
|
||||
|
||||
case SyntaxKind.AnyKeyword:
|
||||
case SyntaxKind.NumberKeyword:
|
||||
case SyntaxKind.StringKeyword:
|
||||
case SyntaxKind.BooleanKeyword:
|
||||
case SyntaxKind.SymbolKeyword:
|
||||
case SyntaxKind.TypeParameter:
|
||||
case SyntaxKind.CallSignature:
|
||||
case SyntaxKind.ConstructSignature:
|
||||
case SyntaxKind.IndexSignature:
|
||||
case SyntaxKind.MethodSignature:
|
||||
case SyntaxKind.PropertySignature:
|
||||
transformFlags |= TransformFlags.ThisNodeIsTypeScript;
|
||||
node.excludeTransformFlags = TransformFlags.TypeExcludes;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (SyntaxKind.FirstTypeNode <= node.kind && node.kind <= SyntaxKind.LastTypeNode) {
|
||||
transformFlags |= TransformFlags.ThisNodeIsTypeScript;
|
||||
node.excludeTransformFlags = TransformFlags.TypeExcludes;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
node.transformFlags = transformFlags;
|
||||
|
||||
aggregateTime += new Date().getTime() - start;
|
||||
}
|
||||
|
||||
export class VisitorContext {
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
/// <reference path="es5.ts" />
|
||||
/*@internal*/
|
||||
namespace ts.transform {
|
||||
|
||||
export let transformTime = 0;
|
||||
|
||||
export type TransformationChain = (context: VisitorContext, statements: NodeArray<Statement>) => NodeArray<Statement>;
|
||||
|
||||
export function getTransformationChain(options: CompilerOptions): TransformationChain {
|
||||
|
@ -25,6 +28,7 @@ namespace ts.transform {
|
|||
}
|
||||
|
||||
function runTransformation(chain: TransformationChain, context: VisitorContext, statements: NodeArray<Statement>) {
|
||||
let start = new Date().getTime();
|
||||
context.pushLexicalEnvironment();
|
||||
|
||||
let transformed = chain(context, statements);
|
||||
|
@ -34,6 +38,7 @@ namespace ts.transform {
|
|||
}
|
||||
|
||||
context.popLexicalEnvironment();
|
||||
transformTime += new Date().getTime() - start;
|
||||
return transformed;
|
||||
}
|
||||
|
||||
|
|
|
@ -118,7 +118,7 @@ namespace ts {
|
|||
}
|
||||
|
||||
function reportStatisticalValue(name: string, value: string) {
|
||||
sys.write(padRight(name + ":", 12) + padLeft(value.toString(), 10) + sys.newLine);
|
||||
sys.write(padRight(name + ":", 20) + padLeft(value.toString(), 10) + sys.newLine);
|
||||
}
|
||||
|
||||
function reportCountStatistic(name: string, count: number) {
|
||||
|
@ -316,6 +316,8 @@ namespace ts {
|
|||
bindTime = 0;
|
||||
checkTime = 0;
|
||||
emitTime = 0;
|
||||
transform.aggregateTime = 0;
|
||||
transform.transformTime = 0;
|
||||
|
||||
let program = createProgram(fileNames, compilerOptions, compilerHost);
|
||||
let exitStatus = compileProgram();
|
||||
|
@ -348,6 +350,8 @@ namespace ts {
|
|||
reportTimeStatistic("Parse time", programTime);
|
||||
reportTimeStatistic("Bind time", bindTime);
|
||||
reportTimeStatistic("Check time", checkTime);
|
||||
reportTimeStatistic("Pre-transform time", transform.aggregateTime);
|
||||
reportTimeStatistic("Transform time", transform.transformTime);
|
||||
reportTimeStatistic("Emit time", emitTime);
|
||||
reportTimeStatistic("Total time", programTime + bindTime + checkTime + emitTime);
|
||||
}
|
||||
|
|
|
@ -623,6 +623,9 @@ namespace ts {
|
|||
ContainsES6VariableBindingPattern |
|
||||
ContainsES6ParameterBindingPattern,
|
||||
|
||||
TypeExcludes =
|
||||
~ContainsTypeScript,
|
||||
|
||||
CallOrArrayLiteralExcludes =
|
||||
ContainsES6SpreadElement,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue