mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-14 18:46:34 -05:00
Merge from vscode bead496a613e475819f89f08e9e882b841bc1fe8 (#14883)
* Merge from vscode bead496a613e475819f89f08e9e882b841bc1fe8 * Bump distro * Upgrade GCC to 4.9 due to yarn install errors * Update build image * Fix bootstrap base url * Bump distro * Fix build errors * Update source map file * Disable checkbox for blocking migration issues (#15131) * disable checkbox for blocking issues * wip * disable checkbox fixes * fix strings * Remove duplicate tsec command * Default to off for tab color if settings not present * re-skip failing tests * Fix mocha error * Bump sqlite version & fix notebooks search view * Turn off esbuild warnings * Update esbuild log level * Fix overflowactionbar tests * Fix ts-ignore in dropdown tests * cleanup/fixes * Fix hygiene * Bundle in entire zone.js module * Remove extra constructor param * bump distro for web compile break * bump distro for web compile break v2 * Undo log level change * New distro * Fix integration test scripts * remove the "no yarn.lock changes" workflow * fix scripts v2 * Update unit test scripts * Ensure ads-kerberos2 updates in .vscodeignore * Try fix unit tests * Upload crash reports * remove nogpu * always upload crashes * Use bash script * Consolidate data/ext dir names * Create in tmp directory Co-authored-by: chlafreniere <hichise@gmail.com> Co-authored-by: Christopher Suh <chsuh@microsoft.com> Co-authored-by: chgagnon <chgagnon@microsoft.com>
This commit is contained in:
@@ -45,6 +45,8 @@ import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { IOutputChannelRegistry, Extensions } from 'vs/workbench/services/output/common/output';
|
||||
import { isUUID } from 'vs/base/common/uuid';
|
||||
import { join } from 'vs/base/common/path';
|
||||
import { Readable, Writable } from 'stream';
|
||||
import { StringDecoder } from 'string_decoder';
|
||||
|
||||
export interface ILocalProcessExtensionHostInitData {
|
||||
readonly autoStart: boolean;
|
||||
@@ -55,6 +57,11 @@ export interface ILocalProcessExtensionHostDataProvider {
|
||||
getInitData(): Promise<ILocalProcessExtensionHostInitData>;
|
||||
}
|
||||
|
||||
const enum NativeLogMarkers {
|
||||
Start = 'START_NATIVE_LOG',
|
||||
End = 'END_NATIVE_LOG',
|
||||
}
|
||||
|
||||
export class LocalProcessExtensionHost implements IExtensionHost {
|
||||
|
||||
public readonly kind = ExtensionHostKind.LocalProcess;
|
||||
@@ -151,13 +158,12 @@ export class LocalProcessExtensionHost implements IExtensionHost {
|
||||
this._messageProtocol = Promise.all([
|
||||
this._tryListenOnPipe(),
|
||||
this._tryFindDebugPort()
|
||||
]).then(data => {
|
||||
const pipeName = data[0];
|
||||
const portNumber = data[1];
|
||||
]).then(([pipeName, portNumber]) => {
|
||||
const env = objects.mixin(objects.deepClone(process.env), {
|
||||
AMD_ENTRYPOINT: 'vs/workbench/services/extensions/node/extensionHostProcess',
|
||||
PIPE_LOGGING: 'true',
|
||||
VERBOSE_LOGGING: true,
|
||||
VSCODE_AMD_ENTRYPOINT: 'vs/workbench/services/extensions/node/extensionHostProcess',
|
||||
VSCODE_PIPE_LOGGING: 'true',
|
||||
VSCODE_VERBOSE_LOGGING: true,
|
||||
VSCODE_LOG_NATIVE: this._isExtensionDevHost,
|
||||
VSCODE_IPC_HOOK_EXTHOST: pipeName,
|
||||
VSCODE_HANDLES_UNCAUGHT_ERRORS: true,
|
||||
VSCODE_LOG_STACK: !this._isExtensionDevTestFromCli && (this._isExtensionDevHost || !this._environmentService.isBuilt || this._productService.quality !== 'stable' || this._environmentService.verbose),
|
||||
@@ -196,6 +202,10 @@ export class LocalProcessExtensionHost implements IExtensionHost {
|
||||
opts.execArgv = ['--inspect-port=0'];
|
||||
}
|
||||
|
||||
if (this._environmentService.args['prof-v8-extensions']) {
|
||||
opts.execArgv.unshift('--prof');
|
||||
}
|
||||
|
||||
// On linux crash reporter needs to be started on child node processes explicitly
|
||||
if (platform.isLinux) {
|
||||
const crashReporterStartOptions: CrashReporterStartOptions = {
|
||||
@@ -217,7 +227,7 @@ export class LocalProcessExtensionHost implements IExtensionHost {
|
||||
// For https://github.com/microsoft/vscode/issues/105743
|
||||
const extHostCrashDirectory = this._environmentService.crashReporterDirectory || this._environmentService.userDataPath;
|
||||
opts.env.BREAKPAD_DUMP_LOCATION = join(extHostCrashDirectory, `${ExtensionHostLogFileName} Crash Reports`);
|
||||
opts.env.CRASH_REPORTER_START_OPTIONS = JSON.stringify(crashReporterStartOptions);
|
||||
opts.env.VSCODE_CRASH_REPORTER_START_OPTIONS = JSON.stringify(crashReporterStartOptions);
|
||||
}
|
||||
|
||||
// Run Extension Host as fork of current process
|
||||
@@ -225,13 +235,11 @@ export class LocalProcessExtensionHost implements IExtensionHost {
|
||||
|
||||
// Catch all output coming from the extension host process
|
||||
type Output = { data: string, format: string[] };
|
||||
this._extensionHostProcess.stdout!.setEncoding('utf8');
|
||||
this._extensionHostProcess.stderr!.setEncoding('utf8');
|
||||
const onStdout = Event.fromNodeEventEmitter<string>(this._extensionHostProcess.stdout!, 'data');
|
||||
const onStderr = Event.fromNodeEventEmitter<string>(this._extensionHostProcess.stderr!, 'data');
|
||||
const onStdout = this._handleProcessOutputStream(this._extensionHostProcess.stdout!);
|
||||
const onStderr = this._handleProcessOutputStream(this._extensionHostProcess.stderr!);
|
||||
const onOutput = Event.any(
|
||||
Event.map(onStdout, o => ({ data: `%c${o}`, format: [''] })),
|
||||
Event.map(onStderr, o => ({ data: `%c${o}`, format: ['color: red'] }))
|
||||
Event.map(onStdout.event, o => ({ data: `%c${o}`, format: [''] })),
|
||||
Event.map(onStderr.event, o => ({ data: `%c${o}`, format: ['color: red'] }))
|
||||
);
|
||||
|
||||
// Debounce all output, so we can render it in the Chrome console as a group
|
||||
@@ -498,11 +506,6 @@ export class LocalProcessExtensionHost implements IExtensionHost {
|
||||
|
||||
// Send to local console
|
||||
log(entry, 'Extension Host');
|
||||
|
||||
// Broadcast to other windows if we are in development mode
|
||||
if (this._environmentService.debugExtensionHost.debugId && (!this._environmentService.isBuilt || this._isExtensionDevHost)) {
|
||||
this._extensionHostDebugService.logToSession(this._environmentService.debugExtensionHost.debugId, entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -526,6 +529,44 @@ export class LocalProcessExtensionHost implements IExtensionHost {
|
||||
this._onExit.fire([code, signal]);
|
||||
}
|
||||
|
||||
private _handleProcessOutputStream(stream: Readable) {
|
||||
let last = '';
|
||||
let isOmitting = false;
|
||||
const event = new Emitter<string>();
|
||||
const decoder = new StringDecoder('utf-8');
|
||||
stream.pipe(new Writable({
|
||||
write(chunk, _encoding, callback) {
|
||||
// not a fancy approach, but this is the same approach used by the split2
|
||||
// module which is well-optimized (https://github.com/mcollina/split2)
|
||||
last += typeof chunk === 'string' ? chunk : decoder.write(chunk);
|
||||
let lines = last.split(/\r?\n/g);
|
||||
last = lines.pop()!;
|
||||
|
||||
// protected against an extension spamming and leaking memory if no new line is written.
|
||||
if (last.length > 10_000) {
|
||||
lines.push(last);
|
||||
last = '';
|
||||
}
|
||||
|
||||
for (const line of lines) {
|
||||
if (isOmitting) {
|
||||
if (line === NativeLogMarkers.End) {
|
||||
isOmitting = false;
|
||||
}
|
||||
} else if (line === NativeLogMarkers.Start) {
|
||||
isOmitting = true;
|
||||
} else if (line.length) {
|
||||
event.fire(line + '\n');
|
||||
}
|
||||
}
|
||||
|
||||
callback();
|
||||
}
|
||||
}));
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
public async enableInspectPort(): Promise<boolean> {
|
||||
if (typeof this._inspectPort === 'number') {
|
||||
return true;
|
||||
@@ -615,7 +656,7 @@ export class LocalProcessExtensionHost implements IExtensionHost {
|
||||
// to communicate this back to the main side to terminate the debug session
|
||||
if (this._isExtensionDevHost && !this._isExtensionDevTestFromCli && !this._isExtensionDevDebug && this._environmentService.debugExtensionHost.debugId) {
|
||||
this._extensionHostDebugService.terminateSession(this._environmentService.debugExtensionHost.debugId);
|
||||
event.join(timeout(100 /* wait a bit for IPC to get delivered */));
|
||||
event.join(timeout(100 /* wait a bit for IPC to get delivered */), 'join.extensionDevelopment');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user