Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5509)

Unified Diff: chrome/browser/chromeos/login/report_restarting_flags.cc

Issue 344883002: Collect UMA statistics on which chrome://flags lead to chrome restart on ChromeOS. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/report_restarting_flags.cc
diff --git a/chrome/browser/chromeos/login/report_restarting_flags.cc b/chrome/browser/chromeos/login/report_restarting_flags.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f3010b9bb1bae1cfebbf781f436b43f2a92e952c
--- /dev/null
+++ b/chrome/browser/chromeos/login/report_restarting_flags.cc
@@ -0,0 +1,339 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/login/report_restarting_flags.h"
+
+#include <algorithm>
+#include <set>
+#include <string>
+
+#include "ash/ash_switches.h"
+#include "base/logging.h"
+#include "base/metrics/sparse_histogram.h"
+#include "cc/base/switches.h"
+#include "chrome/common/chrome_switches.h"
+#include "chromeos/chromeos_switches.h"
+#include "components/autofill/core/common/autofill_switches.h"
+#include "components/cloud_devices/common/cloud_devices_switches.h"
+#include "components/data_reduction_proxy/common/data_reduction_proxy_switches.h"
+#include "components/nacl/common/nacl_switches.h"
+#include "components/password_manager/core/common/password_manager_switches.h"
+#include "content/public/common/content_switches.h"
+#include "extensions/common/switches.h"
+#include "third_party/cros_system_api/switches/chrome_switches.h"
+#include "ui/app_list/app_list_switches.h"
+#include "ui/base/ui_base_switches.h"
+#include "ui/display/display_switches.h"
+#include "ui/events/event_switches.h"
+#include "ui/gfx/switches.h"
+#include "ui/keyboard/keyboard_switches.h"
+#include "ui/native_theme/native_theme_switches.h"
+#include "ui/views/views_switches.h"
+
+namespace {
+
+/* Reserved histogram values */
+enum {
+ UNKNOWN_FLAG = 0,
+ BAD_FLAG_FORMAT = 1,
+};
+
+/* This table shoud consist of all possible command-line switches from
+ chrome/browser/about_flags.cc
+
+ This is a mapping between switch name and UMA id. Indexes in this table
+ must never be modified. Plase add new value to the end of the table only!
+
+ If some entry should be deleted, replace it with empty string and a comment
+ describing what was deleted.
+
+ This table must be in sync with LoginRestartingFlags in
+ tools/metrics/histogram.xml .
+
+ NOTE: This table is intentionally unsorted to force anyone to read this
+ comment before modifying the table.
+*/
+
+const char* const chrome_restart_histogram_switches[] = {
+ "" /* UNKNOWN_FLAG - reserved */,
+ "" /* BAD_FLAG_FORMAT - reserved */,
+ "" /* unused - reserved */,
+ "" /* unused - reserved */,
+ "" /* unused - reserved */,
+ switches::kOverscrollHistoryNavigation,
+ switches::kEnableServiceWorkerSync,
+ switches::kNoPings,
+ switches::kNoExperiments,
+ switches::kEnableOneCopy,
+ switches::kDisableGestureTapHighlight,
+ chromeos::switches::kFileManagerEnableNewGallery,
+ switches::kEnableQuicHttps,
+ chromeos::switches::kEnableNetworkPortalNotification,
+ switches::kEnableCompositingForFixedPosition,
+ keyboard::switches::kEnableVirtualKeyboardOverscroll,
+ switches::kAllowInsecureWebSocketFromHttpsOrigin,
+ switches::kEnableWebBasedSignin,
+ cc::switches::kShowFPSCounter,
+ switches::kEnableOfflineAutoReload,
+ chromeos::switches::kEnableFileManagerMTP,
+ switches::kEnablePanels,
+ extensions::switches::kEnableScriptsRequireAction,
+ switches::kEnableSmoothScrolling,
+ switches::kDisableDelegatedRenderer,
+ switches::kTouchEventsDisabled,
+ switches::kMalwareInterstitialVersionV2,
+ switches::kDisableTouchEditing,
+ switches::kPrefetchSearchResults,
+ switches::kDisablePasswordManagerReauthentication,
+ switches::kEnableSearchButtonInOmniboxAlways,
+ switches::kDisableWebAudio,
+ switches::kDefaultTileHeight,
+ switches::kEnableSessionCrashedBubble,
+ chromeos::switches::kDisableQuickofficeComponentApp,
+ switches::kDebugPackedApps,
+ switches::kEnableSuggestionsService,
+ switches::kTabCaptureDownscaleQuality,
+ switches::kManualEnhancedBookmarksOptout,
+ switches::kDisableAcceleratedFixedRootBackground,
+ ash::switches::kAshTouchHud,
+ switches::kDisableDeviceEnumeration,
+ cc::switches::kDisablePinchVirtualViewport,
+ switches::kEnableDeferredImageDecoding,
+ keyboard::switches::kDisableInputView,
+ switches::kDisableDeviceDiscoveryNotifications,
+ autofill::switches::kEnablePasswordGeneration,
+ switches::kManualEnhancedBookmarks,
+ extensions::switches::kExtensionContentVerification,
+ switches::kEnableEphemeralApps,
+ switches::kEnableQuic,
+ chromeos::switches::kEnableFirstRunUITransitions,
+ switches::kEnableSearchButtonInOmniboxForStr,
+ switches::kEnableDistanceFieldText,
+ switches::kDisableTextInputFocusManager,
+ switches::kTouchScrollingMode,
+ switches::kDisableOverlayScrollbar,
+ cc::switches::kMaxTilesForInterestArea,
+ switches::kForceGpuRasterization,
+ switches::kAllowNaClSocketAPI,
+ chromeos::switches::kEnableRequestTabletSite,
+ extensions::switches::kExtensionContentVerificationEnforceStrict,
+ switches::kDisableSoftwareRasterizer,
+ switches::kEnableAppsFileAssociations,
+ switches::kSSLInterstitialVersionV2Gray,
+ autofill::switches::kShowAutofillTypePredictions,
+ switches::kEnableViewportMeta,
+ switches::kSilentDebuggerExtensionAPI,
+ switches::kDisableGpuRasterization,
+ switches::kFlagSwitchesBegin,
+ switches::kDisableOfflineLoadStaleCache,
+ keyboard::switches::kEnableVirtualKeyboard,
+ switches::kDisableThreadedCompositing,
+ switches::kEnableGpuRasterization,
+ switches::kDisableSettingsWindow,
+ switches::kEnableDelegatedRenderer,
+ switches::kEnableScrollPrediction,
+ switches::kEnableAcceleratedOverflowScroll,
+ switches::kDisableCompositingForFixedPosition,
+ switches::kDisableWebRtcHWEncoding,
+ switches::kEnableSearchButtonInOmniboxForStrOrIip,
+ switches::kEnableBleedingEdgeRenderingFastPaths,
+ switches::kDisableSavePasswordBubble,
+ switches::kEnableSettingsWindow,
+ switches::kDisableDeviceDiscovery,
+ switches::kDisableZeroCopy,
+ switches::kEnableNaClDebug,
+ switches::kEnableSavePasswordBubble,
+ switches::kDisablePrefixedEncryptedMedia,
+ switches::kDefaultTileWidth,
+ switches::kDisableEmbeddedSharedWorker,
+ switches::kDisableSessionCrashedBubble,
+ switches::kEnableDeviceDiscoveryNotifications,
+ chromeos::switches::kEnableCarrierSwitching,
+ switches::kEnableOfflineLoadStaleCache,
+ switches::kEnableAnswersInSuggest,
+ switches::kEnableAppList,
+ cc::switches::kEnablePinchVirtualViewport,
+ switches::kDisableOfflineAutoReload,
+ switches::kEnableFastTextAutosizing,
+ switches::kEnablePrintPreviewRegisterPromos,
+ switches::kEnableThreadedCompositing,
+ switches::kEnablePermissionsBubbles,
+ switches::kEnableEasyUnlock,
+ chromeos::switches::kDisableSamlSignin,
+ autofill::switches::kDisableIgnoreAutocompleteOff,
+ views::switches::kDisableViewsRectBasedTargeting,
+ switches::kPerformanceMonitorGathering,
+ cc::switches::kShowCompositedLayerBorders,
+ keyboard::switches::kEnableInputView,
+ autofill::switches::kWalletServiceUseSandbox,
+ chromeos::switches::kPolicySwitchesBegin,
+ switches::kEnableOverlayScrollbar,
+ switches::kEnableAccountConsistency,
+ switches::kDisableMediaSource,
+ switches::kEnableServiceWorker,
+ switches::kEnableTouchEditing,
+ switches::kEnableTranslateNewUX,
+ switches::kForceDeviceScaleFactor,
+ ash::switches::kAshDebugShortcuts,
+ switches::kDisableAccelerated2dCanvas,
+ switches::kDisableSuggestionsService,
+ switches::kNumRasterThreads,
+ password_manager::switches::kEnableAutomaticPasswordSaving,
+ switches::kEnableAppWindowControls,
+ switches::kDisableQuic,
+ switches::kDisableOriginChip,
+ switches::kMalwareInterstitialVersionV3,
+ switches::kTouchEvents,
+ keyboard::switches::kEnableExperimentalInputViewFeatures,
+ keyboard::switches::kDisableVirtualKeyboardOverscroll,
+ switches::kEnableAsyncDns,
+ switches::kGoogleProfileInfo,
+ switches::kEnableExperimentalWebPlatformFeatures,
+ switches::kEnableSpellingAutoCorrect,
+ switches::kEnableWebMIDI,
+ switches::kEnableNaCl,
+ switches::kOutOfProcessPdf,
+ switches::kDisableTouchAdjustment,
+ switches::kEnableProminentURLAppFlow,
+ switches::kEnableHarfBuzzRenderText,
+ switches::kEnableOriginChipAlways,
+ switches::kDisableDistanceFieldText,
+ switches::kEnableTextInputFocusManager,
+ switches::kFastUserSwitching,
+ switches::kEnableEncryptedMedia,
+ switches::kDisableQuicHttps,
+ switches::kSSLInterstitialVersionV1,
+ switches::kEnableSpdy4,
+ switches::kDisablePermissionsBubbles,
+ switches::kNewAvatarMenu,
+ switches::kEnableHighDpiCompositingForFixedPosition,
+ switches::kEnableTouchDragDrop,
+ switches::kDisableLCDText,
+ switches::kEnableCompositingForTransition,
+ switches::kEnableImplSidePainting,
+ switches::kIgnoreGpuBlacklist,
+ switches::kTouchEventsEnabled,
+ switches::kEnableDownloadResumption,
+ switches::kJavaScriptFlags,
+ switches::kDisableCompositingForTransition,
+ switches::kTouchScrollingModeSyncTouchmove,
+ extensions::switches::kEnableExperimentalExtensionApis,
+ switches::kEnableGestureTapHighlight,
+ switches::kNaClDebugMask,
+ switches::kEnhancedBookmarksExperiment,
+ switches::kEnableFastUnload,
+ chromeos::switches::kDisableBootAnimation,
+ switches::kDisableNTPOtherSessionsMenu,
+ switches::kEnableOriginChipOnSrp,
+ switches::kDisableAccountConsistency,
+ switches::kScrollEndEffect,
+ switches::kTouchScrollingModeTouchcancel,
+ switches::kDisablePnacl,
+ switches::kSSLInterstitialVersionV2Colorful,
+ switches::kEnableNewProfileManagement,
+ switches::kEnableAppsShowOnFirstPaint,
+ switches::kEnablePinch,
+ switches::kResetAppListInstallState,
+ switches::kDisableImplSidePainting,
+ autofill::switches::kDisablePasswordGeneration,
+ switches::kEnableExperimentalCanvasFeatures,
+ switches::kEnableOfflineAutoReloadVisibleOnly,
+ switches::kEnableStreamlinedHostedApps,
+ switches::kTouchScrollingModeAsyncTouchmove,
+ switches::kDisableTouchDragDrop,
+ data_reduction_proxy::switches::kEnableDataReductionProxyDev,
+ switches::kEnableSpellingFeedbackFieldTrial,
+ switches::kTabCaptureUpscaleQuality,
+ switches::kEnableLCDText,
+ keyboard::switches::kEnableSwipeSelection,
+ switches::kEnableWebGLDraftExtensions,
+ switches::kEnableSyncSyncedNotifications,
+ switches::kEnableCloudDevices,
+ extensions::switches::kExtensionContentVerificationBootstrap,
+ switches::kFlagSwitchesEnd,
+ switches::kDisableSearchButtonInOmnibox,
+ switches::kDisableOfflineAutoReloadVisibleOnly,
+ chromeos::switches::kPolicySwitchesEnd,
+ switches::kDisableExperimentalWebGL,
+ extensions::switches::kExtensionContentVerificationEnforce,
+ switches::kDisableLayerSquashing,
+ extensions::switches::kExtensionsOnChromeURLs,
+ chromeos::switches::kDisableNetworkPortalNotification,
+ ash::switches::kAshEnableTouchViewTesting,
+ chromeos::switches::kEnableTouchpadThreeFingerClick,
+ chromeos::switches::kFileManagerEnableNewAudioPlayer,
+ switches::kDisableFastTextAutosizing,
+ switches::kDisableMinimizeOnSecondLauncherItemClick,
+ switches::kDisableWebRtcHWDecoding,
+ switches::kDisableAcceleratedVideoDecode,
+ switches::kSavePageAsMHTML,
+ switches::kDisableNewProfileManagement,
+ switches::kEnableZeroCopy,
+ switches::kEnableLinkableEphemeralApps,
+ switches::kUseSimpleCacheBackend,
+ switches::kEnableDevToolsExperiments,
+ switches::kDisableSyncSyncedNotifications,
+ cc::switches::kDisableCompositorTouchHitTesting,
+ switches::kEnableAcceleratedFixedRootBackground,
+ switches::kEnableTcpFastOpen,
+ switches::kDisableAsyncDns,
+ switches::kSyncfsEnableDirectoryOperation,
+ data_reduction_proxy::switches::kDisableDataReductionProxyDev,
+ ui::switches::kDisableDisplayColorCalibration,
+ switches::kDisableAcceleratedOverflowScroll,
+
+ /* Insert new entries here. Never modify existing entries! */
+};
+
+} // namespace
+
+namespace chromeos {
+
+void ReportRestartingFlags(
+ const std::set<std::string>& command_line_difference) {
+ for (size_t i = 0; i < arraysize(chrome_restart_histogram_switches); ++i) {
+ LOG(ERROR) << "ReportRestartingFlags(): i=" << i << " \""
Nikita (slow) 2014/06/19 17:26:44 Debug output?
Alexander Alekseev 2014/06/19 18:17:47 Done.
+ << chrome_restart_histogram_switches[i] << "\"";
+ }
+
+ for (std::set<std::string>::const_iterator i =
+ command_line_difference.begin();
+ i != command_line_difference.end();
+ ++i) {
+ int uma_id = UNKNOWN_FLAG;
+ if (i->size() > 2) {
+ // skip '--' before switch name
+ const char* switch_name = &((*i)[2]);
+ const char* const* end = chrome_restart_histogram_switches +
+ arraysize(chrome_restart_histogram_switches);
+ const char* const* histflag = std::find_if(
+ chrome_restart_histogram_switches,
+ end,
+ std::not1(std::bind1st(std::ptr_fun(strcmp), switch_name)));
+ uma_id = histflag - chrome_restart_histogram_switches;
+ if (histflag == end) {
+ uma_id = UNKNOWN_FLAG;
+ LOG(ERROR) << "ReportRestartingFlags(): flag '" << *i << "' ('"
+ << switch_name << "') is unknown.";
+ }
+ } else {
+ uma_id = BAD_FLAG_FORMAT;
+ LOG(ERROR) << "ReportRestartingFlags(): flag '" << *i
+ << "' has incorrect format.";
+ }
+ DCHECK_LT(uma_id,
+ static_cast<int>(arraysize(chrome_restart_histogram_switches)));
+ VLOG(1) << "ReportRestartingFlags(): '" << *i << "', uma_id=" << uma_id
+ << " ('" << chrome_restart_histogram_switches[uma_id] << "')";
+ UMA_HISTOGRAM_SPARSE_SLOWLY("Login.RestartingFlags", uma_id);
Nikita (slow) 2014/06/19 17:26:44 Maybe UMA_HISTOGRAM_ENUMERATION is better suited h
Alexander Alekseev 2014/06/24 21:51:52 As jar@ has suggested, we'd better use SPARSE here
+ }
+}
+
+const char* const* GetChromeRestartHistogramSwitchesForTesting(
+ size_t* out_size) {
+ *out_size = arraysize(chrome_restart_histogram_switches);
+ return chrome_restart_histogram_switches;
+}
+
+} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698