diff options
author | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-03 19:11:55 +0000 |
---|---|---|
committer | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-03 19:11:55 +0000 |
commit | eeb85af78952e2c0c70310f5733d2eceb455c482 (patch) | |
tree | 7c8db87c1f7fa58fbf9e2b62bf09d65d2ac83c0d | |
parent | 58030de8cc8541936a5d223115d523f1776f7579 (diff) | |
download | chromium_src-eeb85af78952e2c0c70310f5733d2eceb455c482.zip chromium_src-eeb85af78952e2c0c70310f5733d2eceb455c482.tar.gz chromium_src-eeb85af78952e2c0c70310f5733d2eceb455c482.tar.bz2 |
Create prerender event histograms by origin & experiment.
R=asvitkine@chromium.org, davidben@chromium.org
Review URL: https://codereview.chromium.org/100133002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@238440 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/prerender/prerender_histograms.cc | 7 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_histograms.h | 3 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_manager.cc | 77 | ||||
-rw-r--r-- | chrome/browser/prerender/prerender_manager.h | 2 | ||||
-rw-r--r-- | tools/metrics/histograms/histograms.xml | 1 |
5 files changed, 59 insertions, 31 deletions
diff --git a/chrome/browser/prerender/prerender_histograms.cc b/chrome/browser/prerender/prerender_histograms.cc index a3c90e1..e835093 100644 --- a/chrome/browser/prerender/prerender_histograms.cc +++ b/chrome/browser/prerender/prerender_histograms.cc @@ -387,9 +387,12 @@ void PrerenderHistograms::RecordFinalStatus( } } -void PrerenderHistograms::RecordEvent(PrerenderEvent event) const { +void PrerenderHistograms::RecordEvent(Origin origin, uint8 experiment_id, + PrerenderEvent event) const { DCHECK_LT(event, PRERENDER_EVENT_MAX); - UMA_HISTOGRAM_ENUMERATION("Prerender.Event", event, PRERENDER_EVENT_MAX); + PREFIXED_HISTOGRAM_ORIGIN_EXPERIMENT( + "Event", origin, experiment_id, + UMA_HISTOGRAM_ENUMERATION(name, event, PRERENDER_EVENT_MAX)); } uint8 PrerenderHistograms::GetCurrentExperimentId() const { diff --git a/chrome/browser/prerender/prerender_histograms.h b/chrome/browser/prerender/prerender_histograms.h index d1b3be2..7622b80 100644 --- a/chrome/browser/prerender/prerender_histograms.h +++ b/chrome/browser/prerender/prerender_histograms.h @@ -89,7 +89,8 @@ class PrerenderHistograms { void RecordFractionPixelsFinalAtSwapin(Origin origin, double fraction) const; // Records a prerender event. - void RecordEvent(PrerenderEvent event) const; + void RecordEvent(Origin origin, uint8 experiment_id, PrerenderEvent event) + const; private: base::TimeTicks GetCurrentTimeTicks() const; diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc index aae9d23..ec44cfd 100644 --- a/chrome/browser/prerender/prerender_manager.cc +++ b/chrome/browser/prerender/prerender_manager.cc @@ -443,13 +443,16 @@ void PrerenderManager::ProcessMergeResult( // No pending_swap should never happen. If it does anyways (in a retail // build), log this and bail. if (!pending_swap) { - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_NO_PENDING_SWAPIN); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_NO_PENDING_SWAPIN); return; } if (timed_out) { - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_TIMEOUT_CB); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_TIMEOUT_CB); } else { - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_RESULT_CB); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_RESULT_CB); UMA_HISTOGRAM_TIMES("Prerender.SessionStorageNamespaceMergeTime", pending_swap->GetElapsedTime()); } @@ -459,35 +462,44 @@ void PrerenderManager::ProcessMergeResult( // in. In that case, SwapInternal will take care of deleting // |prerender_data| and sending the appropriate notifications to the tracker. if (timed_out) { - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_TIMED_OUT); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_TIMED_OUT); prerender_data->ClearPendingSwap(); return; } - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_MERGE_DONE); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_MERGE_DONE); // Log the exact merge result in a histogram. switch (result) { case content::SessionStorageNamespace::MERGE_RESULT_NAMESPACE_NOT_FOUND: - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_RESULT_NAMESPACE_NOT_FOUND); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_RESULT_NAMESPACE_NOT_FOUND); break; case content::SessionStorageNamespace::MERGE_RESULT_NAMESPACE_NOT_ALIAS: - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_RESULT_NAMESPACE_NOT_ALIAS); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_RESULT_NAMESPACE_NOT_ALIAS); break; case content::SessionStorageNamespace::MERGE_RESULT_NOT_LOGGING: - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_RESULT_NOT_LOGGING); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_RESULT_NOT_LOGGING); break; case content::SessionStorageNamespace::MERGE_RESULT_NO_TRANSACTIONS: - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_RESULT_NO_TRANSACTIONS); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_RESULT_NO_TRANSACTIONS); break; case content::SessionStorageNamespace::MERGE_RESULT_TOO_MANY_TRANSACTIONS: - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_RESULT_TOO_MANY_TRANSACTIONS); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_RESULT_TOO_MANY_TRANSACTIONS); break; case content::SessionStorageNamespace::MERGE_RESULT_NOT_MERGEABLE: - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_RESULT_NOT_MERGEABLE); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_RESULT_NOT_MERGEABLE); break; case content::SessionStorageNamespace::MERGE_RESULT_MERGEABLE: - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_RESULT_MERGEABLE); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_RESULT_MERGEABLE); break; default: NOTREACHED(); @@ -496,12 +508,14 @@ void PrerenderManager::ProcessMergeResult( if (result != content::SessionStorageNamespace::MERGE_RESULT_MERGEABLE && result != content::SessionStorageNamespace::MERGE_RESULT_NO_TRANSACTIONS) { - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_MERGE_FAILED); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_MERGE_FAILED); prerender_data->ClearPendingSwap(); return; } - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_SWAPPING_IN); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_SWAPPING_IN); // Notice that SwapInInternal, on success, will delete |prerender_data| // and |pending_swap|. Therefore, we have to pass a new GURL object rather // than a reference to the one in |pending_swap|. @@ -509,10 +523,9 @@ void PrerenderManager::ProcessMergeResult( SwapInternal(GURL(pending_swap->url()), pending_swap->target_contents(), prerender_data); - if (new_web_contents) { - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_SWAPIN_SUCCESSFUL); - } else { - RecordEvent(PRERENDER_EVENT_MERGE_RESULT_SWAPIN_FAILED); + if (!new_web_contents) { + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_RESULT_SWAPIN_FAILED); prerender_data->ClearPendingSwap(); } } @@ -553,7 +566,7 @@ content::WebContents* PrerenderManager::SwapInternal( // We check this by examining whether its CoreTabHelper has a delegate. CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents); if (!core_tab_helper || !core_tab_helper->delegate()) { - RecordEvent(PRERENDER_EVENT_SWAPIN_NO_DELEGATE); + RecordEvent(NULL, PRERENDER_EVENT_SWAPIN_NO_DELEGATE); return NULL; } @@ -569,12 +582,13 @@ content::WebContents* PrerenderManager::SwapInternal( if (!prerender_data) { prerender_data = FindPrerenderData(url, NULL); } else { - RecordEvent(PRERENDER_EVENT_SWAPIN_CANDIDATE_NAMESPACE_MATCHES); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_SWAPIN_CANDIDATE_NAMESPACE_MATCHES); } if (!prerender_data) return NULL; - RecordEvent(PRERENDER_EVENT_SWAPIN_CANDIDATE); + RecordEvent(prerender_data->contents(), PRERENDER_EVENT_SWAPIN_CANDIDATE); DCHECK(prerender_data->contents()); // If there is currently a merge pending for this prerender data, @@ -584,7 +598,8 @@ content::WebContents* PrerenderManager::SwapInternal( return NULL; } - RecordEvent(PRERENDER_EVENT_SWAPIN_NO_MERGE_PENDING); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_SWAPIN_NO_MERGE_PENDING); SessionStorageNamespace* target_namespace = web_contents->GetController().GetDefaultSessionStorageNamespace(); SessionStorageNamespace* prerender_namespace = @@ -594,10 +609,12 @@ content::WebContents* PrerenderManager::SwapInternal( if (prerender_namespace && prerender_namespace != target_namespace && !prerender_namespace->IsAliasOf(target_namespace)) { if (!ShouldMergeSessionStorageNamespaces()) { - RecordEvent(PRERENDER_EVENT_SWAPIN_MERGING_DISABLED); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_SWAPIN_MERGING_DISABLED); return NULL; } - RecordEvent(PRERENDER_EVENT_SWAPIN_ISSUING_MERGE); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_SWAPIN_ISSUING_MERGE); // There should never be a |pending_swap| if we get to here: // Per check above, |pending_swap| may only be != NULL when // processing a successful merge, as indicated by |swap_candidate| @@ -605,7 +622,8 @@ content::WebContents* PrerenderManager::SwapInternal( DCHECK(!prerender_data->pending_swap()); if (prerender_data->pending_swap()) { // In retail builds, log this error and bail. - RecordEvent(PRERENDER_EVENT_MERGE_FOR_SWAPIN_CANDIDATE); + RecordEvent(prerender_data->contents(), + PRERENDER_EVENT_MERGE_FOR_SWAPIN_CANDIDATE); return NULL; } PendingSwap* pending_swap = new PendingSwap( @@ -1923,8 +1941,13 @@ void PrerenderManager::LoggedInPredictorDataReceived( logged_in_state_.swap(new_map); } -void PrerenderManager::RecordEvent(PrerenderEvent event) const { - histograms_->RecordEvent(event); +void PrerenderManager::RecordEvent(PrerenderContents* contents, + PrerenderEvent event) const { + if (!contents) + histograms_->RecordEvent(ORIGIN_NONE, kNoExperiment, event); + else + histograms_->RecordEvent(contents->origin(), contents->experiment_id(), + event); } } // namespace prerender diff --git a/chrome/browser/prerender/prerender_manager.h b/chrome/browser/prerender/prerender_manager.h index d766f5d..ba26731 100644 --- a/chrome/browser/prerender/prerender_manager.h +++ b/chrome/browser/prerender/prerender_manager.h @@ -660,7 +660,7 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, bool timed_out, content::SessionStorageNamespace::MergeResult result); - void RecordEvent(PrerenderEvent event) const; + void RecordEvent(PrerenderContents* contents, PrerenderEvent event) const; // Swaps a prerender for |url| into the tab, replacing |web_contents|. // Returns the new WebContents that was swapped in, or NULL if a swap-in diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 852889c..b2d2875 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml @@ -32055,6 +32055,7 @@ other types of suffix sets. <group name="web" label="Link triggered prerender."/> <group name="webcross" label="Link triggered prerender, cross domain."/> <group name="websame" label="Link triggered prerender, same domain."/> + <affected-histogram name="Prerender.Event"/> <affected-histogram name="Prerender.FinalStatus"/> <affected-histogram name="Prerender.FinalStatus_Prerender5minTTL"/> <affected-histogram name="Prerender.FinalStatus_PrerenderControl"/> |