Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |