diff options
-rw-r--r-- | chrome/browser/prerender/prerender_manager.cc | 13 | ||||
-rw-r--r-- | tools/metrics/histograms/histograms.xml | 21 |
2 files changed, 31 insertions, 3 deletions
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc index 954edb5..14f93c2 100644 --- a/chrome/browser/prerender/prerender_manager.cc +++ b/chrome/browser/prerender/prerender_manager.cc @@ -160,7 +160,8 @@ class PrerenderManager::OnCloseWebContentsDeleter OnCloseWebContentsDeleter(PrerenderManager* manager, WebContents* tab) : manager_(manager), - tab_(tab) { + tab_(tab), + suppressed_dialog_(false) { tab_->SetDelegate(this); base::MessageLoop::current()->PostDelayedTask(FROM_HERE, base::Bind(&OnCloseWebContentsDeleter::ScheduleWebContentsForDeletion, @@ -179,6 +180,9 @@ class PrerenderManager::OnCloseWebContentsDeleter } virtual bool ShouldSuppressDialogs() OVERRIDE { + // Use this as a proxy for getting statistics on how often we fail to honor + // the beforeunload event. + suppressed_dialog_ = true; return true; } @@ -186,13 +190,17 @@ class PrerenderManager::OnCloseWebContentsDeleter static const int kDeleteWithExtremePrejudiceSeconds = 3; void ScheduleWebContentsForDeletion(bool timeout) { + UMA_HISTOGRAM_BOOLEAN("Prerender.TabContentsDeleterTimeout", timeout); + UMA_HISTOGRAM_BOOLEAN("Prerender.TabContentsDeleterSuppressedDialog", + suppressed_dialog_); tab_->SetDelegate(NULL); manager_->ScheduleDeleteOldWebContents(tab_.release(), this); - UMA_HISTOGRAM_BOOLEAN("Prerender.TabContentsDeleterTimeout", timeout); + // |this| is deleted at this point. } PrerenderManager* manager_; scoped_ptr<WebContents> tab_; + bool suppressed_dialog_; DISALLOW_COPY_AND_ASSIGN(OnCloseWebContentsDeleter); }; @@ -584,6 +592,7 @@ bool PrerenderManager::MaybeUsePrerenderedPage(const GURL& url, if (old_web_contents->NeedToFireBeforeUnload()) { // Schedule the delete to occur after the tab has run its unload handlers. + // TODO(davidben): Honor the beforeunload event. http://crbug.com/304932 on_close_web_contents_deleters_.push_back( new OnCloseWebContentsDeleter(this, old_web_contents)); old_web_contents->GetRenderViewHost()-> diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index a41e4c6..2b8e076 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml @@ -13880,7 +13880,16 @@ other types of suffix sets. </summary> </histogram> -<histogram name="Prerender.TabContentsDeleterTimeout"> +<histogram name="Prerender.TabContentsDeleterSuppressedDialog" + enum="BooleanSuppressed"> + <summary> + A boolean that indicates how often we suppress a dialog from a tab when + swapping it with a prerender. + </summary> +</histogram> + +<histogram name="Prerender.TabContentsDeleterTimeout" + enum="BooleanCloseTimeout"> <summary> A boolean that indicates how often we fail to delete an old prerendered tab before the timeout. @@ -20378,6 +20387,11 @@ other types of suffix sets. <int value="1" label="Attempted"/> </enum> +<enum name="BooleanCloseTimeout" type="int"> + <int value="0" label="Closed normally"/> + <int value="1" label="Timed out"/> +</enum> + <enum name="BooleanCommonNameMatch" type="int"> <int value="0" label="subjectAltName used"/> <int value="1" label="Common Name used"/> @@ -20473,6 +20487,11 @@ other types of suffix sets. <int value="1" label="Success"/> </enum> +<enum name="BooleanSuppressed" type="int"> + <int value="0" label="No suppressions"/> + <int value="1" label="Suppressed"/> +</enum> + <enum name="BooleanTabDiscard" type="int"> <int value="0" label="Memory OK, no discards"/> <int value="1" label="Memory low, tabs discarded"/> |