From 6a041bd9b07e6599252595d43ba2d81c80f8b40b Mon Sep 17 00:00:00 2001 From: kieferrm Date: Wed, 19 Oct 2016 10:40:10 -0700 Subject: [PATCH] limit experiments to first time users; fixes #14009 --- src/vs/platform/telemetry/common/telemetry.ts | 30 +++++++++++++++++-- .../workbench/electron-browser/workbench.ts | 6 ++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/vs/platform/telemetry/common/telemetry.ts b/src/vs/platform/telemetry/common/telemetry.ts index 02e9e86b2b8..568a6e7d050 100644 --- a/src/vs/platform/telemetry/common/telemetry.ts +++ b/src/vs/platform/telemetry/common/telemetry.ts @@ -18,7 +18,9 @@ export interface ITelemetryInfo { } export interface ITelemetryExperiments { + showDefaultViewlet: boolean; showCommandsWatermark: boolean; + openUntitledFile: boolean; } export interface ITelemetryService { @@ -39,7 +41,9 @@ export interface ITelemetryService { } export const defaultExperiments: ITelemetryExperiments = { + showDefaultViewlet: false, showCommandsWatermark: false, + openUntitledFile: true }; export const NullTelemetryService = { @@ -62,15 +66,31 @@ export const NullTelemetryService = { }; export function loadExperiments(storageService: IStorageService, configurationService: IConfigurationService): ITelemetryExperiments { + const key = 'experiments.randomness'; let valueString = storageService.get(key); if (!valueString) { valueString = Math.random().toString(); storageService.store(key, valueString); } - const value = parseFloat(valueString); + + const random0 = parseFloat(valueString); + let [random1, showDefaultViewlet] = splitRandom(random0); + const [random2, showCommandsWatermark] = splitRandom(random1); + let [, openUntitledFile] = splitRandom(random2); + + // is the user a first time user? + let isNewSession = storageService.get('telemetry.lastSessionDate') ? false : true; + if (!isNewSession) { + // for returning users we fall back to the default configuration for the sidebar and the initially opened, empty editor + showDefaultViewlet = defaultExperiments.showDefaultViewlet; + openUntitledFile = defaultExperiments.openUntitledFile; + } + return applyOverrides(configurationService, { - showCommandsWatermark: value < 0.5 + showDefaultViewlet, + showCommandsWatermark, + openUntitledFile }); } @@ -85,6 +105,12 @@ export function applyOverrides(configurationService: IConfigurationService, expe return experiments; } +function splitRandom(random: number): [number, boolean] { + const scaled = random * 2; + const i = Math.floor(scaled); + return [scaled - i, i === 1]; +} + export interface ITelemetryAppender { log(eventName: string, data: any): void; } diff --git a/src/vs/workbench/electron-browser/workbench.ts b/src/vs/workbench/electron-browser/workbench.ts index 9c314525c0b..463512d5b1b 100644 --- a/src/vs/workbench/electron-browser/workbench.ts +++ b/src/vs/workbench/electron-browser/workbench.ts @@ -326,7 +326,8 @@ export class Workbench implements IPartService { } // Empty workbench - else if (!this.workbenchParams.workspace) { + else if (!this.workbenchParams.workspace && this.telemetryService.getExperiments().openUntitledFile) { + // some first time users will not have an untiled file; returning users will always have one return TPromise.as([{ input: this.untitledEditorService.createOrGet() }]); } @@ -428,7 +429,8 @@ export class Workbench implements IPartService { // Sidebar visibility this.sideBarHidden = this.storageService.getBoolean(Workbench.sidebarHiddenSettingKey, StorageScope.WORKSPACE, false); if (!this.contextService.getWorkspace()) { - this.sideBarHidden = true; // we hide sidebar in single-file-mode + // some first time users will see a sidebar; returning users will not see the sidebar + this.sideBarHidden = !this.telemetryService.getExperiments().showDefaultViewlet; } const viewletRegistry = Registry.as(ViewletExtensions.Viewlets); -- GitLab