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

Side by Side Diff: chrome/browser/chromeos/login/report_custom_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: Fix bug in about_flags.cc. Sdded comments. s/restarting/custom/ 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/login/report_custom_flags.h"
6
7 #include <algorithm>
8 #include <set>
9 #include <string>
10
11 #include "ash/ash_switches.h"
12 #include "base/logging.h"
13 #include "base/metrics/sparse_histogram.h"
14 #include "cc/base/switches.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "chromeos/chromeos_switches.h"
17 #include "components/autofill/core/common/autofill_switches.h"
18 #include "components/cloud_devices/common/cloud_devices_switches.h"
19 #include "components/data_reduction_proxy/common/data_reduction_proxy_switches.h "
20 #include "components/nacl/common/nacl_switches.h"
21 #include "components/password_manager/core/common/password_manager_switches.h"
22 #include "content/public/common/content_switches.h"
23 #include "extensions/common/switches.h"
24 #include "third_party/cros_system_api/switches/chrome_switches.h"
25 #include "ui/app_list/app_list_switches.h"
26 #include "ui/base/ui_base_switches.h"
27 #include "ui/display/display_switches.h"
28 #include "ui/events/event_switches.h"
29 #include "ui/gfx/switches.h"
30 #include "ui/keyboard/keyboard_switches.h"
31 #include "ui/native_theme/native_theme_switches.h"
32 #include "ui/views/views_switches.h"
33
34 namespace {
35
36 /* Reserved histogram values */
37 enum {
38 UNKNOWN_FLAG = 0,
39 BAD_FLAG_FORMAT = 1,
40 };
41
42 /* This table shoud consist of all possible command-line switches from
43 chrome/browser/about_flags.cc
44
45 This is a mapping between switch name and UMA id. Indexes in this table
sky 2014/06/25 16:14:36 Hm, I would expect a mapping to have two values, t
46 must never be modified. Plase add new value to the end of the table only!
47
48 If some entry should be deleted, replace it with empty string and a comment
49 describing what was deleted.
50
51 This table must be in sync with LoginCustomFlags in
52 tools/metrics/histogram.xml .
sky 2014/06/25 16:14:36 I think you mean tools/metrics/histograms/histogra
53
54 NOTE: This table is intentionally unsorted to force anyone to read this
sky 2014/06/25 16:14:36 If only it were that easy.
55 comment before modifying the table.
56 */
57
58 const char* const chrome_custom_histogram_switches[] = {
59 "" /* UNKNOWN_FLAG - reserved */,
60 "" /* BAD_FLAG_FORMAT - reserved */,
61 "" /* unused - reserved */,
62 "" /* unused - reserved */,
63 "" /* unused - reserved */,
64 switches::kOverscrollHistoryNavigation,
65 switches::kEnableServiceWorkerSync,
66 switches::kNoPings,
67 switches::kNoExperiments,
68 switches::kEnableOneCopy,
69 switches::kDisableGestureTapHighlight,
70 chromeos::switches::kFileManagerEnableNewGallery,
71 switches::kEnableQuicHttps,
72 chromeos::switches::kEnableNetworkPortalNotification,
73 switches::kEnableCompositingForFixedPosition,
74 keyboard::switches::kEnableVirtualKeyboardOverscroll,
75 switches::kAllowInsecureWebSocketFromHttpsOrigin,
76 switches::kEnableWebBasedSignin,
77 cc::switches::kShowFPSCounter,
78 switches::kEnableOfflineAutoReload,
79 chromeos::switches::kEnableFileManagerMTP,
80 switches::kEnablePanels,
81 extensions::switches::kEnableScriptsRequireAction,
82 switches::kEnableSmoothScrolling,
83 switches::kDisableDelegatedRenderer,
84 switches::kTouchEventsDisabled,
85 switches::kMalwareInterstitialVersionV2,
86 switches::kDisableTouchEditing,
87 switches::kPrefetchSearchResults,
88 switches::kDisablePasswordManagerReauthentication,
89 switches::kEnableSearchButtonInOmniboxAlways,
90 switches::kDisableWebAudio,
91 switches::kDefaultTileHeight,
92 switches::kEnableSessionCrashedBubble,
93 chromeos::switches::kDisableQuickofficeComponentApp,
94 switches::kDebugPackedApps,
95 switches::kEnableSuggestionsService,
96 switches::kTabCaptureDownscaleQuality,
97 switches::kManualEnhancedBookmarksOptout,
98 switches::kDisableAcceleratedFixedRootBackground,
99 ash::switches::kAshTouchHud,
100 switches::kDisableDeviceEnumeration,
101 cc::switches::kDisablePinchVirtualViewport,
102 switches::kEnableDeferredImageDecoding,
103 keyboard::switches::kDisableInputView,
104 switches::kDisableDeviceDiscoveryNotifications,
105 autofill::switches::kEnablePasswordGeneration,
106 switches::kManualEnhancedBookmarks,
107 extensions::switches::kExtensionContentVerification,
108 switches::kEnableEphemeralApps,
109 switches::kEnableQuic,
110 chromeos::switches::kEnableFirstRunUITransitions,
111 switches::kEnableSearchButtonInOmniboxForStr,
112 switches::kEnableDistanceFieldText,
113 switches::kDisableTextInputFocusManager,
114 switches::kTouchScrollingMode,
115 switches::kDisableOverlayScrollbar,
116 cc::switches::kMaxTilesForInterestArea,
117 switches::kForceGpuRasterization,
118 switches::kAllowNaClSocketAPI,
119 chromeos::switches::kEnableRequestTabletSite,
120 extensions::switches::kExtensionContentVerificationEnforceStrict,
121 switches::kDisableSoftwareRasterizer,
122 switches::kEnableAppsFileAssociations,
123 switches::kSSLInterstitialVersionV2Gray,
124 autofill::switches::kShowAutofillTypePredictions,
125 switches::kEnableViewportMeta,
126 switches::kSilentDebuggerExtensionAPI,
127 switches::kDisableGpuRasterization,
128 switches::kFlagSwitchesBegin,
129 switches::kDisableOfflineLoadStaleCache,
130 keyboard::switches::kEnableVirtualKeyboard,
131 switches::kDisableThreadedCompositing,
132 switches::kEnableGpuRasterization,
133 switches::kDisableSettingsWindow,
134 switches::kEnableDelegatedRenderer,
135 switches::kEnableScrollPrediction,
136 switches::kEnableAcceleratedOverflowScroll,
137 switches::kDisableCompositingForFixedPosition,
138 switches::kDisableWebRtcHWEncoding,
139 switches::kEnableSearchButtonInOmniboxForStrOrIip,
140 switches::kEnableBleedingEdgeRenderingFastPaths,
141 switches::kDisableSavePasswordBubble,
142 switches::kEnableSettingsWindow,
143 switches::kDisableDeviceDiscovery,
144 switches::kDisableZeroCopy,
145 switches::kEnableNaClDebug,
146 switches::kEnableSavePasswordBubble,
147 switches::kDisablePrefixedEncryptedMedia,
148 switches::kDefaultTileWidth,
149 switches::kDisableEmbeddedSharedWorker,
150 switches::kDisableSessionCrashedBubble,
151 switches::kEnableDeviceDiscoveryNotifications,
152 chromeos::switches::kEnableCarrierSwitching,
153 switches::kEnableOfflineLoadStaleCache,
154 switches::kEnableAnswersInSuggest,
155 switches::kEnableAppList,
156 cc::switches::kEnablePinchVirtualViewport,
157 switches::kDisableOfflineAutoReload,
158 switches::kEnableFastTextAutosizing,
159 switches::kEnablePrintPreviewRegisterPromos,
160 switches::kEnableThreadedCompositing,
161 switches::kEnablePermissionsBubbles,
162 switches::kEnableEasyUnlock,
163 chromeos::switches::kDisableSamlSignin,
164 autofill::switches::kDisableIgnoreAutocompleteOff,
165 views::switches::kDisableViewsRectBasedTargeting,
166 switches::kPerformanceMonitorGathering,
167 cc::switches::kShowCompositedLayerBorders,
168 keyboard::switches::kEnableInputView,
169 autofill::switches::kWalletServiceUseSandbox,
170 chromeos::switches::kPolicySwitchesBegin,
171 switches::kEnableOverlayScrollbar,
172 switches::kEnableAccountConsistency,
173 switches::kDisableMediaSource,
174 switches::kEnableServiceWorker,
175 switches::kEnableTouchEditing,
176 switches::kEnableTranslateNewUX,
177 switches::kForceDeviceScaleFactor,
178 ash::switches::kAshDebugShortcuts,
179 switches::kDisableAccelerated2dCanvas,
180 switches::kDisableSuggestionsService,
181 switches::kNumRasterThreads,
182 password_manager::switches::kEnableAutomaticPasswordSaving,
183 switches::kEnableAppWindowControls,
184 switches::kDisableQuic,
185 switches::kDisableOriginChip,
186 switches::kMalwareInterstitialVersionV3,
187 switches::kTouchEvents,
188 keyboard::switches::kEnableExperimentalInputViewFeatures,
189 keyboard::switches::kDisableVirtualKeyboardOverscroll,
190 switches::kEnableAsyncDns,
191 switches::kGoogleProfileInfo,
192 switches::kEnableExperimentalWebPlatformFeatures,
193 switches::kEnableSpellingAutoCorrect,
194 switches::kEnableWebMIDI,
195 switches::kEnableNaCl,
196 switches::kOutOfProcessPdf,
197 switches::kDisableTouchAdjustment,
198 switches::kEnableProminentURLAppFlow,
199 switches::kEnableHarfBuzzRenderText,
200 switches::kEnableOriginChipAlways,
201 switches::kDisableDistanceFieldText,
202 switches::kEnableTextInputFocusManager,
203 switches::kFastUserSwitching,
204 switches::kEnableEncryptedMedia,
205 switches::kDisableQuicHttps,
206 switches::kSSLInterstitialVersionV1,
207 switches::kEnableSpdy4,
208 switches::kDisablePermissionsBubbles,
209 switches::kNewAvatarMenu,
210 switches::kEnableHighDpiCompositingForFixedPosition,
211 switches::kEnableTouchDragDrop,
212 switches::kDisableLCDText,
213 switches::kEnableCompositingForTransition,
214 switches::kEnableImplSidePainting,
215 switches::kIgnoreGpuBlacklist,
216 switches::kTouchEventsEnabled,
217 switches::kEnableDownloadResumption,
218 switches::kJavaScriptFlags,
219 switches::kDisableCompositingForTransition,
220 switches::kTouchScrollingModeSyncTouchmove,
221 extensions::switches::kEnableExperimentalExtensionApis,
222 switches::kEnableGestureTapHighlight,
223 switches::kNaClDebugMask,
224 switches::kEnhancedBookmarksExperiment,
225 switches::kEnableFastUnload,
226 chromeos::switches::kDisableBootAnimation,
227 switches::kDisableNTPOtherSessionsMenu,
228 switches::kEnableOriginChipOnSrp,
229 switches::kDisableAccountConsistency,
230 switches::kScrollEndEffect,
231 switches::kTouchScrollingModeTouchcancel,
232 switches::kDisablePnacl,
233 switches::kSSLInterstitialVersionV2Colorful,
234 switches::kEnableNewProfileManagement,
235 switches::kEnableAppsShowOnFirstPaint,
236 switches::kEnablePinch,
237 switches::kResetAppListInstallState,
238 switches::kDisableImplSidePainting,
239 autofill::switches::kDisablePasswordGeneration,
240 switches::kEnableExperimentalCanvasFeatures,
241 switches::kEnableOfflineAutoReloadVisibleOnly,
242 switches::kEnableStreamlinedHostedApps,
243 switches::kTouchScrollingModeAsyncTouchmove,
244 switches::kDisableTouchDragDrop,
245 data_reduction_proxy::switches::kEnableDataReductionProxyDev,
246 switches::kEnableSpellingFeedbackFieldTrial,
247 switches::kTabCaptureUpscaleQuality,
248 switches::kEnableLCDText,
249 keyboard::switches::kEnableSwipeSelection,
250 switches::kEnableWebGLDraftExtensions,
251 switches::kEnableSyncSyncedNotifications,
252 switches::kEnableCloudDevices,
253 extensions::switches::kExtensionContentVerificationBootstrap,
254 switches::kFlagSwitchesEnd,
255 switches::kDisableSearchButtonInOmnibox,
256 switches::kDisableOfflineAutoReloadVisibleOnly,
257 chromeos::switches::kPolicySwitchesEnd,
258 switches::kDisableExperimentalWebGL,
259 extensions::switches::kExtensionContentVerificationEnforce,
260 switches::kDisableLayerSquashing,
261 extensions::switches::kExtensionsOnChromeURLs,
262 chromeos::switches::kDisableNetworkPortalNotification,
263 ash::switches::kAshEnableTouchViewTesting,
264 chromeos::switches::kEnableTouchpadThreeFingerClick,
265 chromeos::switches::kFileManagerEnableNewAudioPlayer,
266 switches::kDisableFastTextAutosizing,
267 switches::kDisableMinimizeOnSecondLauncherItemClick,
268 switches::kDisableWebRtcHWDecoding,
269 switches::kDisableAcceleratedVideoDecode,
270 switches::kSavePageAsMHTML,
271 switches::kDisableNewProfileManagement,
272 switches::kEnableZeroCopy,
273 switches::kEnableLinkableEphemeralApps,
274 switches::kUseSimpleCacheBackend,
275 switches::kEnableDevToolsExperiments,
276 switches::kDisableSyncSyncedNotifications,
277 cc::switches::kDisableCompositorTouchHitTesting,
278 switches::kEnableAcceleratedFixedRootBackground,
279 switches::kEnableTcpFastOpen,
280 switches::kDisableAsyncDns,
281 switches::kSyncfsEnableDirectoryOperation,
282 data_reduction_proxy::switches::kDisableDataReductionProxyDev,
283 ui::switches::kDisableDisplayColorCalibration,
284 switches::kDisableAcceleratedOverflowScroll,
285
286 /* Insert new entries here. Never modify existing entries! */
287 };
288
289 } // namespace
290
291 namespace chromeos {
292
293 void ReportCustomFlags(const std::set<std::string>& command_line_difference) {
294 for (std::set<std::string>::const_iterator i =
295 command_line_difference.begin();
296 i != command_line_difference.end();
297 ++i) {
298 int uma_id = UNKNOWN_FLAG;
299 if (i->size() > 2) {
300 // skip '--' before switch name
301 const char* switch_name = &((*i)[2]);
302 const char* const* end = chrome_custom_histogram_switches +
303 arraysize(chrome_custom_histogram_switches);
304 const char* const* histflag = std::find_if(
305 chrome_custom_histogram_switches,
306 end,
307 std::not1(std::bind1st(std::ptr_fun(strcmp), switch_name)));
308 uma_id = histflag - chrome_custom_histogram_switches;
309 if (histflag == end) {
310 uma_id = UNKNOWN_FLAG;
311 LOG(ERROR) << "ReportCustomFlags(): flag '" << *i << "' ('"
312 << switch_name << "') is unknown.";
313 }
314 } else {
315 uma_id = BAD_FLAG_FORMAT;
316 LOG(ERROR) << "ReportCustomFlags(): flag '" << *i
317 << "' has incorrect format.";
318 }
319 DCHECK_LT(uma_id,
320 static_cast<int>(arraysize(chrome_custom_histogram_switches)));
321 VLOG(1) << "ReportCustomFlags(): '" << *i << "', uma_id=" << uma_id << " ('"
322 << chrome_custom_histogram_switches[uma_id] << "')";
323 UMA_HISTOGRAM_SPARSE_SLOWLY("Login.CustomFlags", uma_id);
324 }
325 }
326
327 const char* const* GetChromeCustomHistogramSwitchesForTesting(
328 size_t* out_size) {
329 *out_size = arraysize(chrome_custom_histogram_switches);
330 return chrome_custom_histogram_switches;
331 }
332
333 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698