summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-03 19:11:55 +0000
committertburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-03 19:11:55 +0000
commiteeb85af78952e2c0c70310f5733d2eceb455c482 (patch)
tree7c8db87c1f7fa58fbf9e2b62bf09d65d2ac83c0d
parent58030de8cc8541936a5d223115d523f1776f7579 (diff)
downloadchromium_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.cc7
-rw-r--r--chrome/browser/prerender/prerender_histograms.h3
-rw-r--r--chrome/browser/prerender/prerender_manager.cc77
-rw-r--r--chrome/browser/prerender/prerender_manager.h2
-rw-r--r--tools/metrics/histograms/histograms.xml1
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"/>