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

Unified Diff: chrome/browser/sessions/tab_loader.cc

Issue 1136523004: [Sessions] Add detailed logging of SessionRestore events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sessions/tab_loader.cc
diff --git a/chrome/browser/sessions/tab_loader.cc b/chrome/browser/sessions/tab_loader.cc
index df77a8c906ede3d188c1aad804953c1fb78ba162..ce0c0a4b466b5addb46e071bcd966d8b23c9a146 100644
--- a/chrome/browser/sessions/tab_loader.cc
+++ b/chrome/browser/sessions/tab_loader.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include <string>
+#include "base/metrics/field_trial.h"
#include "base/metrics/histogram.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/ui/browser.h"
@@ -17,6 +18,7 @@
#include "content/public/browser/notification_types.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
+#include "content/public/browser/session_restore_uma.h"
#include "content/public/browser/web_contents.h"
using content::NavigationController;
@@ -117,6 +119,17 @@ void TabLoader::LoadNextTab() {
DCHECK(controller);
tabs_loading_.insert(controller);
tabs_to_load_.pop_front();
+
+ // Keep track of tabs that have been automatically loaded by session
+ // restore. This is the complement to SessionRestore.DeferredTabLoadedByUser
+ // recorded in NavigationControllerImpl::SetActive.
+ if (controller->NeedsReload()) {
+ UMA_HISTOGRAM_ENUMERATION(
+ content::kSessionRestoreTabActions,
+ content::kSessionRestoreTabActionsUma_BackgroundTabLoaded,
+ content::kSessionRestoreTabActionsUma_Max);
+ }
+
controller->LoadIfNecessary();
content::WebContents* contents = controller->GetWebContents();
if (contents) {
@@ -183,6 +196,21 @@ void TabLoader::HandleTabClosedOrLoaded(NavigationController* controller) {
void TabLoader::OnMemoryPressure(
base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) {
+ // On Windows and Mac this mechanism is only experimentally enabled.
+#if defined(OS_WIN) or (defined(OS_MACOSX) and !defined(OS_IOS))
+ // If memory pressure isn't explicitly turned on then ignore these calls.
+ std::string react_to_memory_pressure = variations::GetVariationParamValue(
+ kSessionRestoreBackgroundLoading, "ReactToMemoryPressure"));
+ if (react_to_memory_pressure != "1")
+ return;
+#endif
+
+ // Note that the session restore was interrupted by memory pressure.
+ UMA_HISTOGRAM_ENUMERATION(
+ content::kSessionRestoreActions,
+ content::kSessionRestoreActionsUma_InterruptedByMemoryPressure,
+ content::kSessionRestoreActionsUma_Max);
+
// When receiving a resource pressure level warning, we stop pre-loading more
// tabs since we are running in danger of loading more tabs by throwing out
// old ones.
@@ -191,6 +219,12 @@ void TabLoader::OnMemoryPressure(
// Stop the timer and suppress any tab loads while we clean the list.
SetTabLoadingEnabled(false);
while (!tabs_to_load_.empty()) {
+ // Count the number of tabs that have had their loading deferred.
+ UMA_HISTOGRAM_ENUMERATION(
+ content::kSessionRestoreTabActions,
+ content::kSessionRestoreTabActionsUma_TabLoadingDeferred,
+ content::kSessionRestoreTabActionsUma_Max);
+
NavigationController* controller = tabs_to_load_.front();
tabs_to_load_.pop_front();
RemoveTab(controller);

Powered by Google App Engine
This is Rietveld 408576698