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

Side by Side Diff: chrome/browser/chrome_browser_main.cc

Issue 1945803002: SyzyASAN: Export experiment state to finch synthetic field trials. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Now even compiles under SYZYASAN defined. Created 4 years, 7 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
« no previous file with comments | « no previous file | chrome/browser/metrics/chrome_metrics_service_accessor.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chrome_browser_main.h" 5 #include "chrome/browser/chrome_browser_main.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <set> 10 #include <set>
(...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after
1217 #endif // BUILDFLAG(ANDROID_JAVA_UI) 1217 #endif // BUILDFLAG(ANDROID_JAVA_UI)
1218 1218
1219 LaunchDevToolsHandlerIfNeeded(parsed_command_line()); 1219 LaunchDevToolsHandlerIfNeeded(parsed_command_line());
1220 if (parsed_command_line().HasSwitch(::switches::kAutoOpenDevToolsForTabs)) 1220 if (parsed_command_line().HasSwitch(::switches::kAutoOpenDevToolsForTabs))
1221 g_browser_process->CreateDevToolsAutoOpener(); 1221 g_browser_process->CreateDevToolsAutoOpener();
1222 1222
1223 for (size_t i = 0; i < chrome_extra_parts_.size(); ++i) 1223 for (size_t i = 0; i < chrome_extra_parts_.size(); ++i)
1224 chrome_extra_parts_[i]->PostProfileInit(); 1224 chrome_extra_parts_[i]->PostProfileInit();
1225 } 1225 }
1226 1226
1227 #if defined(SYZYASAN)
1228
1229 // This function must be in the global namespace as it needs to be friended
1230 // by ChromeMEtricsServiceAccessor.
Alexei Svitkine (slow) 2016/05/04 16:25:38 Nit: ME -> Me
1231 void SyzyASANRegisterExperiment(const char* name, const char* group) {
1232 ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(name, group);
1233 }
1234
1235 namespace {
1236
1237 void WINAPI SyzyASANExperimentCallback(const char* name, const char* group) {
1238 // Indirect through the function above, so that the friend declaration doesn't
1239 // need the ugly calling convention.
1240 SyzyASANRegisterExperiment(name, group);
1241 }
1242
1243 void SetupSyzyASAN() {
1244 typedef VOID(WINAPI* SyzyASANExperimentCallbackFn)(const char* name,
1245 const char* group);
1246 typedef VOID(WINAPI* SyzyASANEnumFeaturesFn)(SyzyASANExperimentCallbackFn);
1247 HMODULE syzyasan_handle = ::GetModuleHandle(L"syzyasan_rtl.dll");
1248 if (!syzyasan_handle)
1249 return;
1250
1251 // Export the SyzyASAN experiments as synthetic field trials.
1252 SyzyASANEnumFeaturesFn syzyasan_enum_features =
1253 reinterpret_cast<SyzyASANEnumFeaturesFn>(
1254 ::GetProcAddress(syzyasan_handle, "asan_EnumFeatures"));
1255 if (syzyasan_enum_features) {
1256 syzyasan_enum_features(&SyzyASANExperimentCallback);
1257 }
1258
1259 // Enable the deferred free mechanism in the syzyasan module, which helps the
1260 // performance by deferring some work on the critical path to a background
1261 // thread.
1262 if (base::FeatureList::IsEnabled(features::kSyzyasanDeferredFree)) {
1263 typedef VOID(WINAPI * SyzyasanEnableDeferredFreeThreadFunc)(VOID);
1264 bool success = false;
1265 SyzyasanEnableDeferredFreeThreadFunc syzyasan_enable_deferred_free =
1266 reinterpret_cast<SyzyasanEnableDeferredFreeThreadFunc>(
1267 ::GetProcAddress(syzyasan_handle,
1268 "asan_EnableDeferredFreeThread"));
1269 if (syzyasan_enable_deferred_free) {
1270 syzyasan_enable_deferred_free();
1271 success = true;
1272 }
1273 UMA_HISTOGRAM_BOOLEAN("Syzyasan.DeferredFreeWasEnabled", success);
1274 }
1275 }
1276
1277 } // namespace
1278
1279 #endif // SYZYASAN
1280
1281
1227 void ChromeBrowserMainParts::PreBrowserStart() { 1282 void ChromeBrowserMainParts::PreBrowserStart() {
1228 TRACE_EVENT0("startup", "ChromeBrowserMainParts::PreBrowserStart"); 1283 TRACE_EVENT0("startup", "ChromeBrowserMainParts::PreBrowserStart");
1229 for (size_t i = 0; i < chrome_extra_parts_.size(); ++i) 1284 for (size_t i = 0; i < chrome_extra_parts_.size(); ++i)
1230 chrome_extra_parts_[i]->PreBrowserStart(); 1285 chrome_extra_parts_[i]->PreBrowserStart();
1231 1286
1232 three_d_observer_.reset(new ThreeDAPIObserver()); 1287 three_d_observer_.reset(new ThreeDAPIObserver());
1233 1288
1234 #if defined(SYZYASAN) 1289 #if defined(SYZYASAN)
1235 // Enable the deferred free mechanism in the syzyasan module, which helps the 1290 SetupSyzyASAN();
1236 // performance by deferring some work on the critical path to a background
1237 // thread.
1238 if (base::FeatureList::IsEnabled(features::kSyzyasanDeferredFree)) {
1239 typedef VOID(WINAPI * SyzyasanEnableDeferredFreeThreadFunc)(VOID);
1240 HMODULE syzyasan_handle = ::GetModuleHandle(L"syzyasan_rtl.dll");
1241 bool success = false;
1242 if (syzyasan_handle) {
1243 SyzyasanEnableDeferredFreeThreadFunc syzyasan_enable_deferred_free =
1244 reinterpret_cast<SyzyasanEnableDeferredFreeThreadFunc>(
1245 ::GetProcAddress(syzyasan_handle,
1246 "asan_EnableDeferredFreeThread"));
1247 if (syzyasan_enable_deferred_free) {
1248 syzyasan_enable_deferred_free();
1249 success = true;
1250 }
1251 }
1252 UMA_HISTOGRAM_BOOLEAN("Syzyasan.DeferredFreeWasEnabled", success);
1253 }
1254 #endif 1291 #endif
1255 1292
1256 // Start the tab manager here so that we give the most amount of time for the 1293 // Start the tab manager here so that we give the most amount of time for the
1257 // other services to start up before we start adjusting the oom priority. 1294 // other services to start up before we start adjusting the oom priority.
1258 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) 1295 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
1259 g_browser_process->GetTabManager()->Start(); 1296 g_browser_process->GetTabManager()->Start();
1260 #endif 1297 #endif
1261 } 1298 }
1262 1299
1263 void ChromeBrowserMainParts::PostBrowserStart() { 1300 void ChromeBrowserMainParts::PostBrowserStart() {
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after
1952 chromeos::CrosSettings::Shutdown(); 1989 chromeos::CrosSettings::Shutdown();
1953 #endif // defined(OS_CHROMEOS) 1990 #endif // defined(OS_CHROMEOS)
1954 #endif // defined(OS_ANDROID) 1991 #endif // defined(OS_ANDROID)
1955 } 1992 }
1956 1993
1957 // Public members: 1994 // Public members:
1958 1995
1959 void ChromeBrowserMainParts::AddParts(ChromeBrowserMainExtraParts* parts) { 1996 void ChromeBrowserMainParts::AddParts(ChromeBrowserMainExtraParts* parts) {
1960 chrome_extra_parts_.push_back(parts); 1997 chrome_extra_parts_.push_back(parts);
1961 } 1998 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/metrics/chrome_metrics_service_accessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698