mirror of
https://github.com/Microsoft/vscode
synced 2024-09-28 15:32:07 +00:00
esm - more AMD removal
This commit is contained in:
parent
d2701aa2ec
commit
d34e895b8e
|
@ -758,7 +758,6 @@
|
|||
// imports that are allowed in all /test/ files
|
||||
"when": "test",
|
||||
"allow": [
|
||||
"vs/css.build",
|
||||
"vs/css.build.js",
|
||||
"assert",
|
||||
"sinon",
|
||||
|
@ -1008,18 +1007,10 @@
|
|||
"vs/editor/~",
|
||||
"vs/editor/contrib/*/~",
|
||||
"vs/code/~",
|
||||
{
|
||||
"when": "hasBrowser",
|
||||
"pattern": "vs/workbench/workbench.web.main"
|
||||
},
|
||||
{
|
||||
"when": "hasBrowser",
|
||||
"pattern": "vs/workbench/workbench.web.main.js"
|
||||
},
|
||||
{
|
||||
"when": "hasBrowser",
|
||||
"pattern": "vs/workbench/workbench.web.main.internal"
|
||||
},
|
||||
{
|
||||
"when": "hasBrowser",
|
||||
"pattern": "vs/workbench/workbench.web.main.internal.js"
|
||||
|
@ -1070,13 +1061,11 @@
|
|||
"vs/platform/*/~",
|
||||
"vs/editor/~",
|
||||
"vs/editor/contrib/*/~",
|
||||
"vs/editor/editor.all",
|
||||
"vs/editor/editor.all.js",
|
||||
"vs/workbench/~",
|
||||
"vs/workbench/api/~",
|
||||
"vs/workbench/services/*/~",
|
||||
"vs/workbench/contrib/*/~",
|
||||
"vs/workbench/contrib/terminal/terminal.all",
|
||||
"vs/workbench/contrib/terminal/terminal.all.js"
|
||||
]
|
||||
},
|
||||
|
@ -1089,13 +1078,11 @@
|
|||
"vs/platform/*/~",
|
||||
"vs/editor/~",
|
||||
"vs/editor/contrib/*/~",
|
||||
"vs/editor/editor.all",
|
||||
"vs/editor/editor.all.js",
|
||||
"vs/workbench/~",
|
||||
"vs/workbench/api/~",
|
||||
"vs/workbench/services/*/~",
|
||||
"vs/workbench/contrib/*/~",
|
||||
"vs/workbench/workbench.common.main",
|
||||
"vs/workbench/workbench.common.main.js"
|
||||
]
|
||||
},
|
||||
|
@ -1108,13 +1095,11 @@
|
|||
"vs/platform/*/~",
|
||||
"vs/editor/~",
|
||||
"vs/editor/contrib/*/~",
|
||||
"vs/editor/editor.all",
|
||||
"vs/editor/editor.all.js",
|
||||
"vs/workbench/~",
|
||||
"vs/workbench/api/~",
|
||||
"vs/workbench/services/*/~",
|
||||
"vs/workbench/contrib/*/~",
|
||||
"vs/workbench/workbench.common.main",
|
||||
"vs/workbench/workbench.common.main.js"
|
||||
]
|
||||
},
|
||||
|
@ -1127,13 +1112,11 @@
|
|||
"vs/platform/*/~",
|
||||
"vs/editor/~",
|
||||
"vs/editor/contrib/*/~",
|
||||
"vs/editor/editor.all",
|
||||
"vs/editor/editor.all.js",
|
||||
"vs/workbench/~",
|
||||
"vs/workbench/api/~",
|
||||
"vs/workbench/services/*/~",
|
||||
"vs/workbench/contrib/*/~",
|
||||
"vs/workbench/workbench.common.main",
|
||||
"vs/workbench/workbench.common.main.js"
|
||||
]
|
||||
},
|
||||
|
|
|
@ -19,7 +19,6 @@ const optimize = require('./lib/optimize');
|
|||
function makeCompileBuildTask(disableMangle) {
|
||||
return task.series(
|
||||
util.rimraf('out-build'),
|
||||
util.buildWebNodePaths('out-build'),
|
||||
date.writeISODate('out-build'),
|
||||
compilation.compileApiProposalNamesTask,
|
||||
compilation.compileTask('src', 'out-build', true, { disableMangle }),
|
||||
|
|
|
@ -20,18 +20,18 @@ gulp.task(compileApiProposalNamesTask);
|
|||
gulp.task(watchApiProposalNamesTask);
|
||||
|
||||
// SWC Client Transpile
|
||||
const transpileClientSWCTask = task.define('transpile-client-swc', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), transpileTask('src', 'out', true)));
|
||||
const transpileClientSWCTask = task.define('transpile-client-swc', task.series(util.rimraf('out'), transpileTask('src', 'out', true)));
|
||||
gulp.task(transpileClientSWCTask);
|
||||
|
||||
// Transpile only
|
||||
const transpileClientTask = task.define('transpile-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), transpileTask('src', 'out')));
|
||||
const transpileClientTask = task.define('transpile-client', task.series(util.rimraf('out'), transpileTask('src', 'out')));
|
||||
gulp.task(transpileClientTask);
|
||||
|
||||
// Fast compile for development time
|
||||
const compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), compileApiProposalNamesTask, compileTask('src', 'out', false)));
|
||||
const compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), compileApiProposalNamesTask, compileTask('src', 'out', false)));
|
||||
gulp.task(compileClientTask);
|
||||
|
||||
const watchClientTask = task.define('watch-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), task.parallel(watchTask('out', false), watchApiProposalNamesTask)));
|
||||
const watchClientTask = task.define('watch-client', task.series(util.rimraf('out'), task.parallel(watchTask('out', false), watchApiProposalNamesTask)));
|
||||
gulp.task(watchClientTask);
|
||||
|
||||
// All
|
||||
|
|
|
@ -26,7 +26,6 @@ exports.streamToPromise = streamToPromise;
|
|||
exports.getElectronVersion = getElectronVersion;
|
||||
exports.acquireWebNodePaths = acquireWebNodePaths;
|
||||
exports.createExternalLoaderConfig = createExternalLoaderConfig;
|
||||
exports.buildWebNodePaths = buildWebNodePaths;
|
||||
const es = require("event-stream");
|
||||
const _debounce = require("debounce");
|
||||
const _filter = require("gulp-filter");
|
||||
|
@ -384,24 +383,4 @@ function createExternalLoaderConfig(webEndpoint, commit, quality) {
|
|||
};
|
||||
return externalLoaderConfig;
|
||||
}
|
||||
function buildWebNodePaths(outDir) {
|
||||
const result = () => new Promise((resolve, _) => {
|
||||
const root = path.join(__dirname, '..', '..');
|
||||
const nodePaths = acquireWebNodePaths();
|
||||
// Now we write the node paths to out/vs
|
||||
const outDirectory = path.join(root, outDir, 'vs');
|
||||
fs.mkdirSync(outDirectory, { recursive: true });
|
||||
const headerWithGeneratedFileWarning = `/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
// This file is generated by build/npm/postinstall.js. Do not edit.`;
|
||||
const fileContents = `${headerWithGeneratedFileWarning}\nself.webPackagePaths = ${JSON.stringify(nodePaths, null, 2)};`;
|
||||
fs.writeFileSync(path.join(outDirectory, 'webPackagePaths.js'), fileContents, 'utf8');
|
||||
resolve();
|
||||
});
|
||||
result.taskName = 'build-web-node-paths';
|
||||
return result;
|
||||
}
|
||||
//# sourceMappingURL=util.js.map
|
|
@ -470,24 +470,3 @@ export function createExternalLoaderConfig(webEndpoint?: string, commit?: string
|
|||
};
|
||||
return externalLoaderConfig;
|
||||
}
|
||||
|
||||
export function buildWebNodePaths(outDir: string) {
|
||||
const result = () => new Promise<void>((resolve, _) => {
|
||||
const root = path.join(__dirname, '..', '..');
|
||||
const nodePaths = acquireWebNodePaths();
|
||||
// Now we write the node paths to out/vs
|
||||
const outDirectory = path.join(root, outDir, 'vs');
|
||||
fs.mkdirSync(outDirectory, { recursive: true });
|
||||
const headerWithGeneratedFileWarning = `/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
// This file is generated by build/npm/postinstall.js. Do not edit.`;
|
||||
const fileContents = `${headerWithGeneratedFileWarning}\nself.webPackagePaths = ${JSON.stringify(nodePaths, null, 2)};`;
|
||||
fs.writeFileSync(path.join(outDirectory, 'webPackagePaths.js'), fileContents, 'utf8');
|
||||
resolve();
|
||||
});
|
||||
result.taskName = 'build-web-node-paths';
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -3,13 +3,14 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { canASAR } from './base/common/amd.js';
|
||||
import { AppResourcePath, FileAccess, nodeModulesAsarPath, nodeModulesPath, Schemas, VSCODE_AUTHORITY } from './base/common/network.js';
|
||||
import * as platform from './base/common/platform.js';
|
||||
import { IProductConfiguration } from './base/common/product.js';
|
||||
import { URI } from './base/common/uri.js';
|
||||
import { generateUuid } from './base/common/uuid.js';
|
||||
|
||||
export const canASAR = false; // TODO@esm: ASAR disabled in ESM
|
||||
|
||||
class DefineCall {
|
||||
constructor(
|
||||
public readonly id: string | null | undefined,
|
||||
|
@ -41,7 +42,6 @@ class AMDModuleImporter {
|
|||
private _initialize(): void {
|
||||
if (this._state === AMDModuleImporterState.Uninitialized) {
|
||||
if ((globalThis as any).define) {
|
||||
console.log('[amdX] AMD loader already present externally');
|
||||
this._state = AMDModuleImporterState.InitializedExternal;
|
||||
return;
|
||||
}
|
||||
|
@ -98,9 +98,7 @@ class AMDModuleImporter {
|
|||
if (this._state === AMDModuleImporterState.InitializedExternal) {
|
||||
return new Promise<T>(resolve => {
|
||||
const tmpModuleId = generateUuid();
|
||||
console.log(`[amdX] Using external define("${tmpModuleId}", ["${scriptSrc}"])`);
|
||||
(globalThis as any).define(tmpModuleId, [scriptSrc], function (moduleResult: T) {
|
||||
console.log(`[amdX] Got a result for ${tmpModuleId}: ${!!moduleResult}`);
|
||||
resolve(moduleResult);
|
||||
});
|
||||
});
|
||||
|
@ -108,7 +106,6 @@ class AMDModuleImporter {
|
|||
|
||||
const defineCall = await (this._isWebWorker ? this._workerLoadScript(scriptSrc) : this._isRenderer ? this._rendererLoadScript(scriptSrc) : this._nodeJSLoadScript(scriptSrc));
|
||||
if (!defineCall) {
|
||||
// throw new Error(`Did not receive a define call from script ${scriptSrc}`);
|
||||
console.warn(`Did not receive a define call from script ${scriptSrc}`);
|
||||
return <T>undefined;
|
||||
}
|
||||
|
|
|
@ -1,158 +0,0 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
export const canASAR = false; // TODO@esm: ASAR disabled in ESM
|
||||
|
||||
export const enum LoaderEventType {
|
||||
LoaderAvailable = 1,
|
||||
|
||||
BeginLoadingScript = 10,
|
||||
EndLoadingScriptOK = 11,
|
||||
EndLoadingScriptError = 12,
|
||||
|
||||
BeginInvokeFactory = 21,
|
||||
EndInvokeFactory = 22,
|
||||
|
||||
NodeBeginEvaluatingScript = 31,
|
||||
NodeEndEvaluatingScript = 32,
|
||||
|
||||
NodeBeginNativeRequire = 33,
|
||||
NodeEndNativeRequire = 34,
|
||||
|
||||
CachedDataFound = 60,
|
||||
CachedDataMissed = 61,
|
||||
CachedDataRejected = 62,
|
||||
CachedDataCreated = 63,
|
||||
}
|
||||
|
||||
export abstract class LoaderStats {
|
||||
abstract get amdLoad(): [string, number][];
|
||||
abstract get amdInvoke(): [string, number][];
|
||||
abstract get nodeRequire(): [string, number][];
|
||||
abstract get nodeEval(): [string, number][];
|
||||
abstract get nodeRequireTotal(): number;
|
||||
|
||||
static get(): LoaderStats {
|
||||
const amdLoadScript = new Map<string, number>();
|
||||
const amdInvokeFactory = new Map<string, number>();
|
||||
const nodeRequire = new Map<string, number>();
|
||||
const nodeEval = new Map<string, number>();
|
||||
|
||||
function mark(map: Map<string, number>, stat: LoaderEvent) {
|
||||
if (map.has(stat.detail)) {
|
||||
// console.warn('BAD events, DOUBLE start', stat);
|
||||
// map.delete(stat.detail);
|
||||
return;
|
||||
}
|
||||
map.set(stat.detail, -stat.timestamp);
|
||||
}
|
||||
|
||||
function diff(map: Map<string, number>, stat: LoaderEvent) {
|
||||
const duration = map.get(stat.detail);
|
||||
if (!duration) {
|
||||
// console.warn('BAD events, end WITHOUT start', stat);
|
||||
// map.delete(stat.detail);
|
||||
return;
|
||||
}
|
||||
if (duration >= 0) {
|
||||
// console.warn('BAD events, DOUBLE end', stat);
|
||||
// map.delete(stat.detail);
|
||||
return;
|
||||
}
|
||||
map.set(stat.detail, duration + stat.timestamp);
|
||||
}
|
||||
|
||||
let stats: readonly LoaderEvent[] = [];
|
||||
if (typeof require === 'function' && typeof require.getStats === 'function') {
|
||||
stats = require.getStats().slice(0).sort((a, b) => a.timestamp - b.timestamp);
|
||||
}
|
||||
|
||||
for (const stat of stats) {
|
||||
switch (stat.type) {
|
||||
case LoaderEventType.BeginLoadingScript:
|
||||
mark(amdLoadScript, stat);
|
||||
break;
|
||||
case LoaderEventType.EndLoadingScriptOK:
|
||||
case LoaderEventType.EndLoadingScriptError:
|
||||
diff(amdLoadScript, stat);
|
||||
break;
|
||||
|
||||
case LoaderEventType.BeginInvokeFactory:
|
||||
mark(amdInvokeFactory, stat);
|
||||
break;
|
||||
case LoaderEventType.EndInvokeFactory:
|
||||
diff(amdInvokeFactory, stat);
|
||||
break;
|
||||
|
||||
case LoaderEventType.NodeBeginNativeRequire:
|
||||
mark(nodeRequire, stat);
|
||||
break;
|
||||
case LoaderEventType.NodeEndNativeRequire:
|
||||
diff(nodeRequire, stat);
|
||||
break;
|
||||
|
||||
case LoaderEventType.NodeBeginEvaluatingScript:
|
||||
mark(nodeEval, stat);
|
||||
break;
|
||||
case LoaderEventType.NodeEndEvaluatingScript:
|
||||
diff(nodeEval, stat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let nodeRequireTotal = 0;
|
||||
nodeRequire.forEach(value => nodeRequireTotal += value);
|
||||
|
||||
function to2dArray(map: Map<string, number>): [string, number][] {
|
||||
const res: [string, number][] = [];
|
||||
map.forEach((value, index) => res.push([index, value]));
|
||||
return res;
|
||||
}
|
||||
|
||||
return {
|
||||
amdLoad: to2dArray(amdLoadScript),
|
||||
amdInvoke: to2dArray(amdInvokeFactory),
|
||||
nodeRequire: to2dArray(nodeRequire),
|
||||
nodeEval: to2dArray(nodeEval),
|
||||
nodeRequireTotal
|
||||
};
|
||||
}
|
||||
|
||||
static toMarkdownTable(header: string[], rows: Array<Array<{ toString(): string } | undefined>>): string {
|
||||
let result = '';
|
||||
|
||||
const lengths: number[] = [];
|
||||
header.forEach((cell, ci) => {
|
||||
lengths[ci] = cell.length;
|
||||
});
|
||||
rows.forEach(row => {
|
||||
row.forEach((cell, ci) => {
|
||||
if (typeof cell === 'undefined') {
|
||||
cell = row[ci] = '-';
|
||||
}
|
||||
const len = cell.toString().length;
|
||||
lengths[ci] = Math.max(len, lengths[ci]);
|
||||
});
|
||||
});
|
||||
|
||||
// header
|
||||
header.forEach((cell, ci) => { result += `| ${cell + ' '.repeat(lengths[ci] - cell.toString().length)} `; });
|
||||
result += '|\n';
|
||||
header.forEach((_cell, ci) => { result += `| ${'-'.repeat(lengths[ci])} `; });
|
||||
result += '|\n';
|
||||
|
||||
// cells
|
||||
rows.forEach(row => {
|
||||
row.forEach((cell, ci) => {
|
||||
if (typeof cell !== 'undefined') {
|
||||
result += `| ${cell + ' '.repeat(lengths[ci] - cell.toString().length)} `;
|
||||
}
|
||||
});
|
||||
result += '|\n';
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -1187,39 +1187,3 @@ export class PersistentProtocol implements IMessagePassingProtocol {
|
|||
this._socketWriter.write(msg);
|
||||
}
|
||||
}
|
||||
|
||||
// (() => {
|
||||
// if (!SocketDiagnostics.enableDiagnostics) {
|
||||
// return;
|
||||
// }
|
||||
// if (typeof require.__$__nodeRequire !== 'function') {
|
||||
// console.log(`Can only log socket diagnostics on native platforms.`);
|
||||
// return;
|
||||
// }
|
||||
// const type = (
|
||||
// process.argv.includes('--type=renderer')
|
||||
// ? 'renderer'
|
||||
// : (process.argv.includes('--type=extensionHost')
|
||||
// ? 'extensionHost'
|
||||
// : (process.argv.some(item => item.includes('server-main'))
|
||||
// ? 'server'
|
||||
// : 'unknown'
|
||||
// )
|
||||
// )
|
||||
// );
|
||||
// setTimeout(() => {
|
||||
// SocketDiagnostics.records.forEach(r => {
|
||||
// if (r.buff) {
|
||||
// r.data = Buffer.from(r.buff.buffer).toString('base64');
|
||||
// r.buff = undefined;
|
||||
// }
|
||||
// });
|
||||
|
||||
// const fs = <typeof import('fs')>require.__$__nodeRequire('fs');
|
||||
// const path = <typeof import('path')>require.__$__nodeRequire('path');
|
||||
// const logPath = path.join(process.cwd(),`${type}-${process.pid}`);
|
||||
|
||||
// console.log(`dumping socket diagnostics at ${logPath}`);
|
||||
// fs.writeFileSync(logPath, JSON.stringify(SocketDiagnostics.records));
|
||||
// }, 20000);
|
||||
// })();
|
||||
|
|
|
@ -15,11 +15,10 @@ import { ITelemetryService } from '../../../../platform/telemetry/common/telemet
|
|||
import { ILogService } from '../../../../platform/log/common/log.js';
|
||||
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
|
||||
import { setTimeout0 } from '../../../../base/common/platform.js';
|
||||
import { importAMDNodeModule } from '../../../../amdX.js';
|
||||
import { canASAR, importAMDNodeModule } from '../../../../amdX.js';
|
||||
import { Emitter, Event } from '../../../../base/common/event.js';
|
||||
import { CancellationToken, cancelOnDispose } from '../../../../base/common/cancellation.js';
|
||||
import { IEnvironmentService } from '../../../../platform/environment/common/environment.js';
|
||||
import { canASAR } from '../../../../base/common/amd.js';
|
||||
import { CancellationError, isCancellationError } from '../../../../base/common/errors.js';
|
||||
import { PromiseResult } from '../../../../base/common/observable.js';
|
||||
import { Range } from '../../../common/core/range.js';
|
||||
|
|
|
@ -9,7 +9,6 @@ import * as http from 'http';
|
|||
import * as net from 'net';
|
||||
import { performance } from 'perf_hooks';
|
||||
import * as url from 'url';
|
||||
import { LoaderStats } from '../../base/common/amd.js';
|
||||
import { VSBuffer } from '../../base/common/buffer.js';
|
||||
import { CharCode } from '../../base/common/charCode.js';
|
||||
import { isSigPipeError, onUnexpectedError, setUnexpectedErrorHandler } from '../../base/common/errors.js';
|
||||
|
@ -849,16 +848,7 @@ export async function createServer(address: string | net.AddressInfo | null, arg
|
|||
});
|
||||
|
||||
if (args['print-startup-performance']) {
|
||||
const stats = LoaderStats.get();
|
||||
let output = '';
|
||||
output += '\n\n### Load AMD-module\n';
|
||||
output += LoaderStats.toMarkdownTable(['Module', 'Duration'], stats.amdLoad);
|
||||
output += '\n\n### Load commonjs-module\n';
|
||||
output += LoaderStats.toMarkdownTable(['Module', 'Duration'], stats.nodeRequire);
|
||||
output += '\n\n### Invoke AMD-module factory\n';
|
||||
output += LoaderStats.toMarkdownTable(['Module', 'Duration'], stats.amdInvoke);
|
||||
output += '\n\n### Invoke commonjs-module\n';
|
||||
output += LoaderStats.toMarkdownTable(['Module', 'Duration'], stats.nodeEval);
|
||||
output += `Start-up time: ${vscodeServerListenTime - vscodeServerStartTime}\n`;
|
||||
output += `Code loading time: ${vscodeServerCodeLoadedTime - vscodeServerStartTime}\n`;
|
||||
output += `Initialized time: ${currentTime - vscodeServerStartTime}\n`;
|
||||
|
|
|
@ -123,7 +123,7 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService {
|
|||
if (extensionId) {
|
||||
performance.mark(`code/extHost/willLoadExtensionCode/${extensionId}`);
|
||||
}
|
||||
r = <T>(require.__$__nodeRequire ?? require /* TODO@esm drop the first */)(module.fsPath);
|
||||
r = <T>(require)(module.fsPath);
|
||||
} finally {
|
||||
if (extensionId) {
|
||||
performance.mark(`code/extHost/didLoadExtensionCode/${extensionId}`);
|
||||
|
|
|
@ -17,7 +17,6 @@ import { IExtensionService } from '../../../services/extensions/common/extension
|
|||
import { IDisposable, dispose } from '../../../../base/common/lifecycle.js';
|
||||
import { ICodeEditorService } from '../../../../editor/browser/services/codeEditorService.js';
|
||||
import { writeTransientState } from '../../codeEditor/browser/toggleWordWrap.js';
|
||||
import { LoaderStats } from '../../../../base/common/amd.js';
|
||||
import { IProductService } from '../../../../platform/product/common/productService.js';
|
||||
import { ITextFileService } from '../../../services/textfile/common/textfiles.js';
|
||||
import { IEditorService } from '../../../services/editor/common/editorService.js';
|
||||
|
@ -143,11 +142,10 @@ class PerfModelContentProvider implements ITextModelContentProvider {
|
|||
]).then(() => {
|
||||
if (this._model && !this._model.isDisposed()) {
|
||||
|
||||
const stats = LoaderStats.get();
|
||||
const md = new MarkdownBuilder();
|
||||
this._addSummary(md);
|
||||
md.blank();
|
||||
this._addSummaryTable(md, stats);
|
||||
this._addSummaryTable(md);
|
||||
md.blank();
|
||||
this._addExtensionsTable(md);
|
||||
md.blank();
|
||||
|
@ -186,7 +184,7 @@ class PerfModelContentProvider implements ITextModelContentProvider {
|
|||
md.li(`Empty Workspace: ${metrics.emptyWorkbench}`);
|
||||
}
|
||||
|
||||
private _addSummaryTable(md: MarkdownBuilder, stats?: LoaderStats): void {
|
||||
private _addSummaryTable(md: MarkdownBuilder): void {
|
||||
|
||||
const metrics = this._timerService.startupMetrics;
|
||||
const contribTimings = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench).timings;
|
||||
|
@ -200,7 +198,7 @@ class PerfModelContentProvider implements ITextModelContentProvider {
|
|||
table.push(['create window', metrics.timers.ellapsedWindowCreate, '[main]', `initial startup: ${metrics.initialStartup}, ${metrics.initialStartup ? `state: ${metrics.timers.ellapsedWindowRestoreState}ms, widget: ${metrics.timers.ellapsedBrowserWindowCreate}ms, show: ${metrics.timers.ellapsedWindowMaximize}ms` : ''}`]);
|
||||
table.push(['app.isReady => window.loadUrl()', metrics.timers.ellapsedWindowLoad, '[main]', `initial startup: ${metrics.initialStartup}`]);
|
||||
table.push(['window.loadUrl() => begin to import(workbench.desktop.main.js)', metrics.timers.ellapsedWindowLoadToRequire, '[main->renderer]', StartupKindToString(metrics.windowKind)]);
|
||||
table.push(['import(workbench.desktop.main.js)', metrics.timers.ellapsedRequire, '[renderer]', `cached data: ${(metrics.didUseCachedData ? 'YES' : 'NO')}${stats ? `, node_modules took ${stats.nodeRequireTotal}ms` : ''}`]);
|
||||
table.push(['import(workbench.desktop.main.js)', metrics.timers.ellapsedRequire, '[renderer]', `cached data: ${(metrics.didUseCachedData ? 'YES' : 'NO')}`]);
|
||||
table.push(['wait for window config', metrics.timers.ellapsedWaitForWindowConfig, '[renderer]', undefined]);
|
||||
table.push(['init storage (global & workspace)', metrics.timers.ellapsedStorageInit, '[renderer]', undefined]);
|
||||
table.push(['init workspace service', metrics.timers.ellapsedWorkspaceServiceInit, '[renderer]', undefined]);
|
||||
|
@ -336,6 +334,42 @@ class MarkdownBuilder {
|
|||
}
|
||||
|
||||
table(header: string[], rows: Array<Array<{ toString(): string } | undefined>>) {
|
||||
this.value += LoaderStats.toMarkdownTable(header, rows);
|
||||
this.value += this.toMarkdownTable(header, rows);
|
||||
}
|
||||
|
||||
private toMarkdownTable(header: string[], rows: Array<Array<{ toString(): string } | undefined>>): string {
|
||||
let result = '';
|
||||
|
||||
const lengths: number[] = [];
|
||||
header.forEach((cell, ci) => {
|
||||
lengths[ci] = cell.length;
|
||||
});
|
||||
rows.forEach(row => {
|
||||
row.forEach((cell, ci) => {
|
||||
if (typeof cell === 'undefined') {
|
||||
cell = row[ci] = '-';
|
||||
}
|
||||
const len = cell.toString().length;
|
||||
lengths[ci] = Math.max(len, lengths[ci]);
|
||||
});
|
||||
});
|
||||
|
||||
// header
|
||||
header.forEach((cell, ci) => { result += `| ${cell + ' '.repeat(lengths[ci] - cell.toString().length)} `; });
|
||||
result += '|\n';
|
||||
header.forEach((_cell, ci) => { result += `| ${'-'.repeat(lengths[ci])} `; });
|
||||
result += '|\n';
|
||||
|
||||
// cells
|
||||
rows.forEach(row => {
|
||||
row.forEach((cell, ci) => {
|
||||
if (typeof cell !== 'undefined') {
|
||||
result += `| ${cell + ' '.repeat(lengths[ci] - cell.toString().length)} `;
|
||||
}
|
||||
});
|
||||
result += '|\n';
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ import { IEditorService } from '../../editor/common/editorService.js';
|
|||
import { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';
|
||||
import { LRUCache } from '../../../../base/common/map.js';
|
||||
import { ILogService } from '../../../../platform/log/common/log.js';
|
||||
import { canASAR } from '../../../../base/common/amd.js';
|
||||
import { canASAR } from '../../../../amdX.js';
|
||||
import { createWebWorker } from '../../../../base/browser/defaultWorkerFactory.js';
|
||||
import { WorkerTextModelSyncClient } from '../../../../editor/common/services/textModelSync/textModelSync.impl.js';
|
||||
import { ILanguageDetectionWorker, LanguageDetectionWorkerHost } from './languageDetectionWorker.protocol.js';
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { canASAR } from '../../../../../base/common/amd.js';
|
||||
import { canASAR } from '../../../../../amdX.js';
|
||||
import { DisposableStore, IDisposable, toDisposable } from '../../../../../base/common/lifecycle.js';
|
||||
import { AppResourcePath, FileAccess, nodeModulesAsarPath, nodeModulesPath } from '../../../../../base/common/network.js';
|
||||
import { IObservable } from '../../../../../base/common/observable.js';
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { importAMDNodeModule, resolveAmdNodeModulePath } from '../../../../amdX.js';
|
||||
import { canASAR } from '../../../../base/common/amd.js';
|
||||
import { canASAR, importAMDNodeModule, resolveAmdNodeModulePath } from '../../../../amdX.js';
|
||||
import * as dom from '../../../../base/browser/dom.js';
|
||||
import { equals as equalArray } from '../../../../base/common/arrays.js';
|
||||
import { Color } from '../../../../base/common/color.js';
|
||||
|
|
Loading…
Reference in a new issue