From b9bfcc081c117c6e1d82e2ef8b84700e7af7e95d Mon Sep 17 00:00:00 2001 From: Rachel Macfarlane Date: Mon, 29 Jan 2018 11:09:49 -0800 Subject: [PATCH] Open issue reporter on 'Report Performance Issue' as well --- .../issue/issueReporterMain.ts | 7 +- .../issue/issueReporterModel.ts | 7 +- src/vs/platform/issue/common/issue.ts | 7 ++ src/vs/workbench/electron-browser/actions.ts | 72 ++++++++++++++----- .../electron-browser/main.contribution.ts | 4 +- 5 files changed, 68 insertions(+), 29 deletions(-) diff --git a/src/vs/code/electron-browser/issue/issueReporterMain.ts b/src/vs/code/electron-browser/issue/issueReporterMain.ts index dcd203b2c51..1e16e9d3247 100644 --- a/src/vs/code/electron-browser/issue/issueReporterMain.ts +++ b/src/vs/code/electron-browser/issue/issueReporterMain.ts @@ -29,8 +29,8 @@ import { InstantiationService } from 'vs/platform/instantiation/common/instantia import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProperties'; import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc'; import { EnvironmentService } from 'vs/platform/environment/node/environmentService'; -import { IssueReporterModel, IssueType } from 'vs/code/electron-browser/issue/issueReporterModel'; -import { IssueReporterData, IssueReporterStyles } from 'vs/platform/issue/common/issue'; +import { IssueReporterModel } from 'vs/code/electron-browser/issue/issueReporterModel'; +import { IssueReporterData, IssueReporterStyles, IssueType } from 'vs/platform/issue/common/issue'; import BaseHtml from 'vs/code/electron-browser/issue/issueReporterPage'; import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; import { debounce } from 'vs/base/common/decorators'; @@ -58,7 +58,7 @@ export class IssueReporter extends Disposable { this.initServices(configuration); this.issueReporterModel = new IssueReporterModel({ - issueType: IssueType.Bug, + issueType: configuration.data.issueType || IssueType.Bug, includeSystemInfo: true, includeWorkspaceInfo: true, includeProcessInfo: true, @@ -94,6 +94,7 @@ export class IssueReporter extends Disposable { } render(): void { + (document.getElementById('issue-type')).value = this.issueReporterModel.getData().issueType.toString(); this.renderBlocks(); } diff --git a/src/vs/code/electron-browser/issue/issueReporterModel.ts b/src/vs/code/electron-browser/issue/issueReporterModel.ts index 454fa9deee7..ab180bc7522 100644 --- a/src/vs/code/electron-browser/issue/issueReporterModel.ts +++ b/src/vs/code/electron-browser/issue/issueReporterModel.ts @@ -7,12 +7,7 @@ import { assign } from 'vs/base/common/objects'; import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; - -export enum IssueType { - Bug, - PerformanceIssue, - FeatureRequest -} +import { IssueType } from 'vs/platform/issue/common/issue'; export interface IssueReporterData { issueType?: IssueType; diff --git a/src/vs/platform/issue/common/issue.ts b/src/vs/platform/issue/common/issue.ts index 1f80ba156b7..4ad6df21df9 100644 --- a/src/vs/platform/issue/common/issue.ts +++ b/src/vs/platform/issue/common/issue.ts @@ -12,6 +12,12 @@ import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensio export const ID = 'issueService'; export const IIssueService = createDecorator(ID); +export enum IssueType { + Bug, + PerformanceIssue, + FeatureRequest +} + export interface IssueReporterStyles { backgroundColor: string; color: string; @@ -30,6 +36,7 @@ export interface IssueReporterData { styles: IssueReporterStyles; zoomLevel: number; enabledExtensions: ILocalExtension[]; + issueType?: IssueType; } export interface IIssueService { diff --git a/src/vs/workbench/electron-browser/actions.ts b/src/vs/workbench/electron-browser/actions.ts index 5b89b7de0ce..25cb928119c 100644 --- a/src/vs/workbench/electron-browser/actions.ts +++ b/src/vs/workbench/electron-browser/actions.ts @@ -45,8 +45,8 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { IExtensionService, ActivationTimes } from 'vs/platform/extensions/common/extensions'; import { getEntries } from 'vs/base/common/performance'; import { IEditor } from 'vs/platform/editor/common/editor'; -import { IIssueService, IssueReporterData } from 'vs/platform/issue/common/issue'; -import { IThemeService } from 'vs/platform/theme/common/themeService'; +import { IIssueService, IssueReporterData, IssueType, IssueReporterStyles } from 'vs/platform/issue/common/issue'; +import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService'; import { textLinkForeground, inputBackground, inputBorder, inputForeground, buttonBackground, buttonHoverBackground, buttonForeground, inputValidationErrorBorder, foreground, inputActiveOptionBorder } from 'vs/platform/theme/common/colorRegistry'; import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme'; @@ -747,6 +747,22 @@ export class CloseMessagesAction extends Action { } } +export function getIssueReporterStyles(theme: ITheme): IssueReporterStyles { + return { + backgroundColor: theme.getColor(SIDE_BAR_BACKGROUND) && theme.getColor(SIDE_BAR_BACKGROUND).toString(), + color: theme.getColor(foreground).toString(), + textLinkColor: theme.getColor(textLinkForeground) && theme.getColor(textLinkForeground).toString(), + inputBackground: theme.getColor(inputBackground) && theme.getColor(inputBackground).toString(), + inputForeground: theme.getColor(inputForeground) && theme.getColor(inputForeground).toString(), + inputBorder: theme.getColor(inputBorder) && theme.getColor(inputBorder).toString(), + inputActiveBorder: theme.getColor(inputActiveOptionBorder) && theme.getColor(inputActiveOptionBorder).toString(), + inputErrorBorder: theme.getColor(inputValidationErrorBorder) && theme.getColor(inputValidationErrorBorder).toString(), + buttonBackground: theme.getColor(buttonBackground) && theme.getColor(buttonBackground).toString(), + buttonForeground: theme.getColor(buttonForeground) && theme.getColor(buttonForeground).toString(), + buttonHoverBackground: theme.getColor(buttonHoverBackground) && theme.getColor(buttonHoverBackground).toString() + }; +} + export class OpenIssueReporterAction extends Action { public static readonly ID = 'workbench.action.openIssueReporter'; public static readonly LABEL = nls.localize({ key: 'reportIssueInEnglish', comment: ['Translate this to "Report Issue in English" in all languages please!'] }, "Report Issue"); @@ -766,23 +782,8 @@ export class OpenIssueReporterAction extends Action { return this.extensionManagementService.getInstalled(LocalExtensionType.User).then(extensions => { const enabledExtensions = extensions.filter(extension => this.extensionEnablementService.isEnabled(extension.identifier)); const theme = this.themeService.getTheme(); - const styles = { - backgroundColor: theme.getColor(SIDE_BAR_BACKGROUND) && theme.getColor(SIDE_BAR_BACKGROUND).toString(), - color: theme.getColor(foreground).toString(), - textLinkColor: theme.getColor(textLinkForeground) && theme.getColor(textLinkForeground).toString(), - inputBackground: theme.getColor(inputBackground) && theme.getColor(inputBackground).toString(), - inputForeground: theme.getColor(inputForeground) && theme.getColor(inputForeground).toString(), - inputBorder: theme.getColor(inputBorder) && theme.getColor(inputBorder).toString(), - inputActiveBorder: theme.getColor(inputActiveOptionBorder) && theme.getColor(inputActiveOptionBorder).toString(), - inputErrorBorder: theme.getColor(inputValidationErrorBorder) && theme.getColor(inputValidationErrorBorder).toString(), - buttonBackground: theme.getColor(buttonBackground) && theme.getColor(buttonBackground).toString(), - buttonForeground: theme.getColor(buttonForeground) && theme.getColor(buttonForeground).toString(), - buttonHoverBackground: theme.getColor(buttonHoverBackground) && theme.getColor(buttonHoverBackground).toString(), - zoomLevel: webFrame.getZoomLevel(), - extensions - }; const issueReporterData: IssueReporterData = { - styles, + styles: getIssueReporterStyles(theme), zoomLevel: webFrame.getZoomLevel(), enabledExtensions }; @@ -794,6 +795,41 @@ export class OpenIssueReporterAction extends Action { } } +export class ReportPerformanceIssueUsingReporterAction extends Action { + public static readonly ID = 'workbench.action.reportPerformanceIssueUsingReporter'; + public static readonly LABEL = nls.localize('reportPerformanceIssue', "Report Performance Issue"); + + constructor( + id: string, + label: string, + @IIssueService private issueService: IIssueService, + @IThemeService private themeService: IThemeService, + @IExtensionManagementService private extensionManagementService: IExtensionManagementService, + @IExtensionEnablementService private extensionEnablementService: IExtensionEnablementService + ) { + super(id, label); + } + + public run(): TPromise { + return this.extensionManagementService.getInstalled(LocalExtensionType.User).then(extensions => { + const enabledExtensions = extensions.filter(extension => this.extensionEnablementService.isEnabled(extension.identifier)); + const theme = this.themeService.getTheme(); + const issueReporterData: IssueReporterData = { + styles: getIssueReporterStyles(theme), + zoomLevel: webFrame.getZoomLevel(), + enabledExtensions, + issueType: IssueType.PerformanceIssue + }; + + // TODO: Reporter should send timings table as well + return this.issueService.openReporter(issueReporterData).then(() => { + return TPromise.as(true); + }); + }); + } +} + +// NOTE: This is still used when running --prof-startup, which already opens a dialog, so the reporter is not used. export class ReportPerformanceIssueAction extends Action { public static readonly ID = 'workbench.action.reportPerformanceIssue'; diff --git a/src/vs/workbench/electron-browser/main.contribution.ts b/src/vs/workbench/electron-browser/main.contribution.ts index 39b3f42fc1b..ad0368edd13 100644 --- a/src/vs/workbench/electron-browser/main.contribution.ts +++ b/src/vs/workbench/electron-browser/main.contribution.ts @@ -14,7 +14,7 @@ import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'v import { IWorkbenchActionRegistry, Extensions } from 'vs/workbench/common/actions'; import { KeyMod, KeyChord, KeyCode } from 'vs/base/common/keyCodes'; import { isWindows, isLinux, isMacintosh } from 'vs/base/common/platform'; -import { KeybindingsReferenceAction, OpenDocumentationUrlAction, OpenIntroductoryVideosUrlAction, OpenTipsAndTricksUrlAction, OpenIssueReporterAction, ReportPerformanceIssueAction, ZoomResetAction, ZoomOutAction, ZoomInAction, ToggleFullScreenAction, ToggleMenuBarAction, CloseWorkspaceAction, CloseCurrentWindowAction, SwitchWindow, NewWindowAction, CloseMessagesAction, NavigateUpAction, NavigateDownAction, NavigateLeftAction, NavigateRightAction, IncreaseViewSizeAction, DecreaseViewSizeAction, ShowStartupPerformance, ToggleSharedProcessAction, QuickSwitchWindow, QuickOpenRecentAction, inRecentFilesPickerContextKey, ConfigureLocaleAction } from 'vs/workbench/electron-browser/actions'; +import { KeybindingsReferenceAction, OpenDocumentationUrlAction, OpenIntroductoryVideosUrlAction, OpenTipsAndTricksUrlAction, OpenIssueReporterAction, ReportPerformanceIssueUsingReporterAction, ZoomResetAction, ZoomOutAction, ZoomInAction, ToggleFullScreenAction, ToggleMenuBarAction, CloseWorkspaceAction, CloseCurrentWindowAction, SwitchWindow, NewWindowAction, CloseMessagesAction, NavigateUpAction, NavigateDownAction, NavigateLeftAction, NavigateRightAction, IncreaseViewSizeAction, DecreaseViewSizeAction, ShowStartupPerformance, ToggleSharedProcessAction, QuickSwitchWindow, QuickOpenRecentAction, inRecentFilesPickerContextKey, ConfigureLocaleAction } from 'vs/workbench/electron-browser/actions'; import { MessagesVisibleContext } from 'vs/workbench/electron-browser/workbench'; import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { registerCommands } from 'vs/workbench/electron-browser/commands'; @@ -48,7 +48,7 @@ if (isMacintosh) { workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseWorkspaceAction, CloseWorkspaceAction.ID, CloseWorkspaceAction.LABEL, { primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_F) }), 'File: Close Workspace', fileCategory); if (!!product.reportIssueUrl) { workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(OpenIssueReporterAction, OpenIssueReporterAction.ID, OpenIssueReporterAction.LABEL), 'Help: Open Issue Reporter', helpCategory); - workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ReportPerformanceIssueAction, ReportPerformanceIssueAction.ID, ReportPerformanceIssueAction.LABEL), 'Help: Report Performance Issue', helpCategory); + workbenchActionsRegistry.registerWorkbenchAction(new SyncActionDescriptor(ReportPerformanceIssueUsingReporterAction, ReportPerformanceIssueUsingReporterAction.ID, ReportPerformanceIssueUsingReporterAction.LABEL), 'Help: Report Performance Issue', helpCategory); } if (KeybindingsReferenceAction.AVAILABLE) {