mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-14 12:11:43 +01:00
This commit is contained in:
committed by
Ramya Rao
parent
e34fe5aae0
commit
f2bf5fc8de
@@ -54,6 +54,8 @@ export class IssueReporter extends Disposable {
|
||||
private telemetryService: ITelemetryService;
|
||||
private issueReporterModel: IssueReporterModel;
|
||||
private shouldQueueSearch = true;
|
||||
private receivedSystemInfo = false;
|
||||
private receivedPerformanceInfo = false;
|
||||
|
||||
constructor(configuration: IssueReporterConfiguration) {
|
||||
super();
|
||||
@@ -74,17 +76,26 @@ export class IssueReporter extends Disposable {
|
||||
reprosWithoutExtensions: false
|
||||
});
|
||||
|
||||
ipcRenderer.on('issueInfoResponse', (event, info) => {
|
||||
ipcRenderer.on('issuePerformanceInfoResponse', (event, info) => {
|
||||
this.issueReporterModel.update(info);
|
||||
this.receivedPerformanceInfo = true;
|
||||
|
||||
this.updateAllBlocks(this.issueReporterModel.getData());
|
||||
|
||||
const submitButton = <HTMLButtonElement>document.getElementById('github-submit-btn');
|
||||
submitButton.disabled = false;
|
||||
submitButton.textContent = localize('previewOnGitHub', "Preview on GitHub");
|
||||
const state = this.issueReporterModel.getData();
|
||||
this.updateProcessInfo(state);
|
||||
this.updateWorkspaceInfo(state);
|
||||
this.updatePreviewButtonState();
|
||||
});
|
||||
|
||||
ipcRenderer.send('issueInfoRequest');
|
||||
ipcRenderer.on('issueSystemInfoResponse', (event, info) => {
|
||||
this.issueReporterModel.update({ systemInfo: info });
|
||||
this.receivedSystemInfo = true;
|
||||
|
||||
this.updateSystemInfo(this.issueReporterModel.getData());
|
||||
this.updatePreviewButtonState();
|
||||
});
|
||||
|
||||
ipcRenderer.send('issueSystemInfoRequest');
|
||||
ipcRenderer.send('issuePerformanceInfoRequest');
|
||||
|
||||
if (window.document.documentElement.lang !== 'en') {
|
||||
show(document.getElementById('english'));
|
||||
@@ -211,6 +222,7 @@ export class IssueReporter extends Disposable {
|
||||
private setEventHandlers(): void {
|
||||
document.getElementById('issue-type').addEventListener('change', (event: Event) => {
|
||||
this.issueReporterModel.update({ issueType: parseInt((<HTMLInputElement>event.target).value) });
|
||||
this.updatePreviewButtonState();
|
||||
this.render();
|
||||
});
|
||||
|
||||
@@ -269,6 +281,34 @@ export class IssueReporter extends Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
private updatePreviewButtonState() {
|
||||
const submitButton = <HTMLButtonElement>document.getElementById('github-submit-btn');
|
||||
if (this.isPreviewEnabled()) {
|
||||
submitButton.disabled = false;
|
||||
submitButton.textContent = localize('previewOnGitHub', "Preview on GitHub");
|
||||
} else {
|
||||
submitButton.disabled = true;
|
||||
submitButton.textContent = localize('loadingData', "Loading data...");
|
||||
}
|
||||
}
|
||||
|
||||
private isPreviewEnabled() {
|
||||
const issueType = this.issueReporterModel.getData().issueType;
|
||||
if (issueType === IssueType.Bug && this.receivedSystemInfo) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (issueType === IssueType.PerformanceIssue && this.receivedSystemInfo && this.receivedPerformanceInfo) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (issueType === IssueType.FeatureRequest) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@debounce(300)
|
||||
private searchGitHub(event: Event): void {
|
||||
const title = (<HTMLInputElement>event.target).value;
|
||||
@@ -449,16 +489,6 @@ export class IssueReporter extends Disposable {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update blocks
|
||||
*/
|
||||
|
||||
private updateAllBlocks(state) {
|
||||
this.updateSystemInfo(state);
|
||||
this.updateProcessInfo(state);
|
||||
this.updateWorkspaceInfo(state);
|
||||
}
|
||||
|
||||
private updateSystemInfo = (state) => {
|
||||
const target = document.querySelector('.block-system .block-info');
|
||||
let tableHtml = '';
|
||||
|
||||
@@ -38,13 +38,12 @@ export interface ProcessInfo {
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface DiagnosticInfo {
|
||||
systemInfo?: SystemInfo;
|
||||
export interface PerformanceInfo {
|
||||
processInfo?: ProcessInfo[];
|
||||
workspaceInfo?: string;
|
||||
}
|
||||
|
||||
export function buildDiagnostics(info: IMainProcessInfo): Promise<DiagnosticInfo> {
|
||||
export function getPerformanceInfo(info: IMainProcessInfo): Promise<PerformanceInfo> {
|
||||
return listProcesses(info.mainPID).then(rootProcess => {
|
||||
const workspaceInfoMessages = [];
|
||||
|
||||
@@ -79,13 +78,36 @@ export function buildDiagnostics(info: IMainProcessInfo): Promise<DiagnosticInfo
|
||||
}
|
||||
|
||||
return {
|
||||
systemInfo: getSystemInfo(info),
|
||||
processInfo: getProcessList(info, rootProcess),
|
||||
workspaceInfo: workspaceInfoMessages.join('\n')
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
export function getSystemInfo(info: IMainProcessInfo): SystemInfo {
|
||||
const MB = 1024 * 1024;
|
||||
const GB = 1024 * MB;
|
||||
|
||||
const systemInfo: SystemInfo = {
|
||||
'Memory (System)': `${(os.totalmem() / GB).toFixed(2)}GB (${(os.freemem() / GB).toFixed(2)}GB free)`,
|
||||
VM: `${Math.round((virtualMachineHint.value() * 100))}%`,
|
||||
'Screen Reader': `${app.isAccessibilitySupportEnabled() ? 'yes' : 'no'}`,
|
||||
'Process Argv': `${info.mainArguments.join(' ')}`
|
||||
};
|
||||
|
||||
const cpus = os.cpus();
|
||||
if (cpus && cpus.length > 0) {
|
||||
systemInfo.CPUs = `${cpus[0].model} (${cpus.length} x ${cpus[0].speed})`;
|
||||
}
|
||||
|
||||
if (!isWindows) {
|
||||
systemInfo['Load (avg)'] = `${os.loadavg().map(l => Math.round(l)).join(', ')}`;
|
||||
}
|
||||
|
||||
|
||||
return systemInfo;
|
||||
}
|
||||
|
||||
export function printDiagnostics(info: IMainProcessInfo): Promise<any> {
|
||||
return listProcesses(info.mainPID).then(rootProcess => {
|
||||
|
||||
@@ -186,30 +208,6 @@ function formatLaunchConfigs(configs: WorkspaceStatItem[]): string {
|
||||
return output.join('\n');
|
||||
}
|
||||
|
||||
function getSystemInfo(info: IMainProcessInfo): SystemInfo {
|
||||
const MB = 1024 * 1024;
|
||||
const GB = 1024 * MB;
|
||||
|
||||
const systemInfo: SystemInfo = {
|
||||
'Memory (System)': `${(os.totalmem() / GB).toFixed(2)}GB (${(os.freemem() / GB).toFixed(2)}GB free)`,
|
||||
VM: `${Math.round((virtualMachineHint.value() * 100))}%`,
|
||||
'Screen Reader': `${app.isAccessibilitySupportEnabled() ? 'yes' : 'no'}`,
|
||||
'Process Argv': `${info.mainArguments.join(' ')}`
|
||||
};
|
||||
|
||||
const cpus = os.cpus();
|
||||
if (cpus && cpus.length > 0) {
|
||||
systemInfo.CPUs = `${cpus[0].model} (${cpus.length} x ${cpus[0].speed})`;
|
||||
}
|
||||
|
||||
if (!isWindows) {
|
||||
systemInfo['Load (avg)'] = `${os.loadavg().map(l => Math.round(l)).join(', ')}`;
|
||||
}
|
||||
|
||||
|
||||
return systemInfo;
|
||||
}
|
||||
|
||||
function getProcessList(info: IMainProcessInfo, rootProcess: ProcessItem): ProcessInfo[] {
|
||||
const mapPidToWindowTitle = new Map<number, string>();
|
||||
info.windows.forEach(window => mapPidToWindowTitle.set(window.pid, window.title));
|
||||
|
||||
@@ -12,7 +12,7 @@ import { parseArgs } from 'vs/platform/environment/node/argv';
|
||||
import { IIssueService, IssueReporterData } from 'vs/platform/issue/common/issue';
|
||||
import { BrowserWindow, ipcMain, screen } from 'electron';
|
||||
import { ILaunchService } from 'vs/code/electron-main/launch';
|
||||
import { buildDiagnostics, DiagnosticInfo } from 'vs/code/electron-main/diagnostics';
|
||||
import { getPerformanceInfo, PerformanceInfo, getSystemInfo, SystemInfo } from 'vs/code/electron-main/diagnostics';
|
||||
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
|
||||
import { isMacintosh } from 'vs/base/common/platform';
|
||||
|
||||
@@ -30,9 +30,15 @@ export class IssueService implements IIssueService {
|
||||
) { }
|
||||
|
||||
openReporter(data: IssueReporterData): TPromise<void> {
|
||||
ipcMain.on('issueInfoRequest', event => {
|
||||
this.getStatusInfo().then(msg => {
|
||||
event.sender.send('issueInfoResponse', msg);
|
||||
ipcMain.on('issueSystemInfoRequest', event => {
|
||||
this.getSystemInformation().then(msg => {
|
||||
event.sender.send('issueSystemInfoResponse', msg);
|
||||
});
|
||||
});
|
||||
|
||||
ipcMain.on('issuePerformanceInfoRequest', event => {
|
||||
this.getPerformanceInfo().then(msg => {
|
||||
event.sender.send('issuePerformanceInfoResponse', msg);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -100,10 +106,18 @@ export class IssueService implements IIssueService {
|
||||
return state;
|
||||
}
|
||||
|
||||
private getStatusInfo(): TPromise<DiagnosticInfo> {
|
||||
private getSystemInformation(): TPromise<SystemInfo> {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.launchService.getMainProcessInfo().then(info => {
|
||||
buildDiagnostics(info)
|
||||
resolve(getSystemInfo(info));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
private getPerformanceInfo(): TPromise<PerformanceInfo> {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.launchService.getMainProcessInfo().then(info => {
|
||||
getPerformanceInfo(info)
|
||||
.then(diagnosticInfo => {
|
||||
resolve(diagnosticInfo);
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user