| Index: chrome/browser/prerender/prerender_manager.cc
|
| ===================================================================
|
| --- chrome/browser/prerender/prerender_manager.cc (revision 238147)
|
| +++ chrome/browser/prerender/prerender_manager.cc (working copy)
|
| @@ -443,13 +443,16 @@
|
| // 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 @@
|
| // 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 @@
|
| 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 @@
|
| 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 @@
|
| // 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 @@
|
| 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 @@
|
| 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 @@
|
| 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 @@
|
| 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 @@
|
| 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
|
|
|