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

Unified Diff: chrome/browser/extensions/extension_service.cc

Issue 959513002: Refactor Extension initialization logic. Add tracing and additional histogram. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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/extensions/extension_service.cc
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index ef2d572e69b1588a48ed075f8dfb4d78967b097f..fad0be1fe47b1371adc4898a9769910fcdfe689b 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -386,7 +386,7 @@ const Extension* ExtensionService::GetExtensionById(
void ExtensionService::Init() {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
TRACE_EVENT0("browser,startup", "ExtensionService::Init");
- base::Time begin_time = base::Time::Now();
+ SCOPED_UMA_HISTOGRAM_TIMER("Extensions.ExtensionServiceInitTime");
DCHECK(!is_ready()); // Can't redo init.
DCHECK_EQ(registry_->enabled_extensions().size(), 0u);
@@ -403,64 +403,73 @@ void ExtensionService::Init() {
component_loader_->LoadAll();
extensions::InstalledLoader(this).LoadAllExtensions();
- // Attempt to re-enable extensions whose only disable reason is reloading.
- std::vector<std::string> extensions_to_enable;
- const ExtensionSet& disabled_extensions = registry_->disabled_extensions();
- for (ExtensionSet::const_iterator iter = disabled_extensions.begin();
- iter != disabled_extensions.end(); ++iter) {
- const Extension* e = iter->get();
- if (extension_prefs_->GetDisableReasons(e->id()) ==
- Extension::DISABLE_RELOAD) {
- extensions_to_enable.push_back(e->id());
- }
- }
- for (std::vector<std::string>::iterator it = extensions_to_enable.begin();
- it != extensions_to_enable.end(); ++it) {
- EnableExtension(*it);
- }
-
- // Finish install (if possible) of extensions that were still delayed while
- // the browser was shut down.
- scoped_ptr<extensions::ExtensionPrefs::ExtensionsInfo> delayed_info(
- extension_prefs_->GetAllDelayedInstallInfo());
- for (size_t i = 0; i < delayed_info->size(); ++i) {
- ExtensionInfo* info = delayed_info->at(i).get();
- scoped_refptr<const Extension> extension(NULL);
- if (info->extension_manifest) {
- std::string error;
- extension = Extension::Create(
- info->extension_path,
- info->extension_location,
- *info->extension_manifest,
- extension_prefs_->GetDelayedInstallCreationFlags(
- info->extension_id),
- info->extension_id,
- &error);
- if (extension.get())
- delayed_installs_.Insert(extension);
- }
- }
- MaybeFinishDelayedInstallations();
-
- scoped_ptr<extensions::ExtensionPrefs::ExtensionsInfo> delayed_info2(
- extension_prefs_->GetAllDelayedInstallInfo());
- UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateOnLoad",
- delayed_info2->size() - delayed_info->size());
-
+ EnabledReloadableExtensions();
+ MaybeFinishShutdownDelayed();
SetReadyAndNotifyListeners();
- // TODO(erikkay) this should probably be deferred to a future point
+ // TODO:(erikkay) this should probably be deferred to a future point
Yoyo Zhou 2015/02/25 00:19:57 nit: TODO style is // TODO(erikkay): etc.
rkaplow 2015/02/25 16:37:49 Done.
// rather than running immediately at startup.
CheckForExternalUpdates();
LoadGreylistFromPrefs();
}
+}
+
+void ExtensionService::EnabledReloadableExtensions() {
+ TRACE_EVENT0("browser,startup",
+ "ExtensionService::EnabledReloadableExtensions");
- UMA_HISTOGRAM_TIMES("Extensions.ExtensionServiceInitTime",
- base::Time::Now() - begin_time);
+ std::vector<std::string> extensions_to_enable;
+ const ExtensionSet& disabled_extensions = registry_->disabled_extensions();
+ for (ExtensionSet::const_iterator iter = disabled_extensions.begin();
+ iter != disabled_extensions.end(); ++iter) {
+ const Extension* e = iter->get();
+ if (extension_prefs_->GetDisableReasons(e->id()) ==
+ Extension::DISABLE_RELOAD) {
+ extensions_to_enable.push_back(e->id());
+ }
+ }
+ for (std::vector<std::string>::iterator it = extensions_to_enable.begin();
+ it != extensions_to_enable.end(); ++it) {
Alexei Svitkine (slow) 2015/02/25 16:10:53 Nit: Since you're touching this code already, this
rkaplow 2015/02/25 16:37:49 Done.
+ EnableExtension(*it);
+ }
+}
+
+void ExtensionService::MaybeFinishShutdownDelayed() {
+ TRACE_EVENT0("browser,startup",
+ "ExtensionService::MaybeFinishShutdownDelayed");
+
+ scoped_ptr<extensions::ExtensionPrefs::ExtensionsInfo> delayed_info(
+ extension_prefs_->GetAllDelayedInstallInfo());
Alexei Svitkine (slow) 2015/02/25 16:10:53 This should be indented 1 more. You could probably
rkaplow 2015/02/25 16:37:49 Done.
+ for (size_t i = 0; i < delayed_info->size(); ++i) {
+ ExtensionInfo* info = delayed_info->at(i).get();
+ scoped_refptr<const Extension> extension(NULL);
+ if (info->extension_manifest) {
+ std::string error;
+ extension = Extension::Create(
+ info->extension_path,
+ info->extension_location,
+ *info->extension_manifest,
+ extension_prefs_->GetDelayedInstallCreationFlags(
+ info->extension_id),
+ info->extension_id,
+ &error);
+ if (extension.get())
+ delayed_installs_.Insert(extension);
+ }
+ }
+ MaybeFinishDelayedInstallations();
+ scoped_ptr<extensions::ExtensionPrefs::ExtensionsInfo> delayed_info2(
+ extension_prefs_->GetAllDelayedInstallInfo());
+ UMA_HISTOGRAM_COUNTS_100("Extensions.UpdateOnLoad",
+ delayed_info2->size() - delayed_info->size());
}
Yoyo Zhou 2015/02/25 00:19:58 nit: extraneous newline
rkaplow 2015/02/25 16:37:49 Done.
+
void ExtensionService::LoadGreylistFromPrefs() {
+ TRACE_EVENT0("browser,startup",
+ "ExtensionService::LoadGreylistFromPrefs");
+
scoped_ptr<ExtensionSet> all_extensions =
registry_->GenerateInstalledExtensionsSet();
@@ -1260,15 +1269,18 @@ void ExtensionService::CheckForUpdatesSoon() {
}
// Some extensions will autoupdate themselves externally from Chrome. These
-// are typically part of some larger client application package. To support
-// these, the extension will register its location in the the preferences file
+// are typically part of some larger client application package. To support
+// these, the extension will register its location in the preferences file
// (and also, on Windows, in the registry) and this code will periodically
// check that location for a .crx file, which it will then install locally if
// a new version is available.
-// Errors are reported through ExtensionErrorReporter. Succcess is not
+// Errors are reported through ExtensionErrorReporter. Success is not
// reported.
void ExtensionService::CheckForExternalUpdates() {
CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ TRACE_EVENT0("browser,startup",
+ "ExtensionService::CheckForExternalUpdates");
+ SCOPED_UMA_HISTOGRAM_TIMER("Extensions.CheckForExternalUpdatesTime");
// Note that this installation is intentionally silent (since it didn't
// go through the front-end). Extensions that are registered in this
@@ -1414,14 +1426,16 @@ void ExtensionService::ReloadExtensionsForTest() {
}
void ExtensionService::SetReadyAndNotifyListeners() {
- const base::TimeTicks start_time = base::TimeTicks::Now();
+ TRACE_EVENT0("browser,startup",
+ "ExtensionService::SetReadyAndNotifyListeners");
+ SCOPED_UMA_HISTOGRAM_TIMER(
+ "Extensions.ExtensionServiceNotifyReadyListenersTime");
Yoyo Zhou 2015/02/25 00:19:57 There are two metrics related to this one: Extensi
rkaplow 2015/02/25 16:37:49 Ok, switched to the cleaner SCOPED version there.
+
ready_->Signal();
content::NotificationService::current()->Notify(
extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED,
content::Source<Profile>(profile_),
content::NotificationService::NoDetails());
- UMA_HISTOGRAM_TIMES("Extensions.ExtensionServiceNotifyReadyListenersTime",
- base::TimeTicks::Now() - start_time);
}
void ExtensionService::OnLoadedInstalledExtensions() {

Powered by Google App Engine
This is Rietveld 408576698