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

Side by Side Diff: chrome/browser/prerender/prerender_link_manager.cc

Issue 98603015: Add histograms for prerender rel types. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move enumeration closer to first use Created 7 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/prerender/prerender_link_manager.h" 5 #include "chrome/browser/prerender/prerender_link_manager.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
11 11
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/metrics/field_trial.h" 13 #include "base/metrics/field_trial.h"
14 #include "base/metrics/histogram.h"
14 #include "chrome/browser/prerender/prerender_contents.h" 15 #include "chrome/browser/prerender/prerender_contents.h"
15 #include "chrome/browser/prerender/prerender_handle.h" 16 #include "chrome/browser/prerender/prerender_handle.h"
16 #include "chrome/browser/prerender/prerender_manager.h" 17 #include "chrome/browser/prerender/prerender_manager.h"
17 #include "chrome/browser/prerender/prerender_manager_factory.h" 18 #include "chrome/browser/prerender/prerender_manager_factory.h"
18 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/common/prerender_messages.h" 20 #include "chrome/common/prerender_messages.h"
20 #include "chrome/common/prerender_types.h" 21 #include "chrome/common/prerender_types.h"
21 #include "content/public/browser/render_process_host.h" 22 #include "content/public/browser/render_process_host.h"
22 #include "content/public/browser/render_view_host.h" 23 #include "content/public/browser/render_view_host.h"
23 #include "content/public/browser/session_storage_namespace.h" 24 #include "content/public/browser/session_storage_namespace.h"
(...skipping 10 matching lines...) Expand all
34 35
35 namespace { 36 namespace {
36 37
37 bool ShouldStartRelNextPrerenders() { 38 bool ShouldStartRelNextPrerenders() {
38 const std::string experiment_name = 39 const std::string experiment_name =
39 base::FieldTrialList::FindFullName("PrerenderRelNextTrial"); 40 base::FieldTrialList::FindFullName("PrerenderRelNextTrial");
40 41
41 return experiment_name.find("Yes") != std::string::npos; 42 return experiment_name.find("Yes") != std::string::npos;
42 } 43 }
43 44
44 bool ShouldStartPrerender(uint32 rel_types) { 45 bool ShouldStartPrerender(const uint32 rel_types) {
45 const bool should_start_rel_next_prerenders = 46 const bool should_start_rel_next_prerenders =
46 ShouldStartRelNextPrerenders(); 47 ShouldStartRelNextPrerenders();
47 48
48 if (rel_types & PrerenderRelTypePrerender) { 49 if (rel_types & PrerenderRelTypePrerender) {
49 return true; 50 return true;
50 } else if (should_start_rel_next_prerenders && 51 } else if (should_start_rel_next_prerenders &&
51 (rel_types & PrerenderRelTypeNext) == PrerenderRelTypeNext) { 52 (rel_types & PrerenderRelTypeNext) == PrerenderRelTypeNext) {
52 return true; 53 return true;
53 } 54 }
54 return false; 55 return false;
55 } 56 }
56 57
58 COMPILE_ASSERT(PrerenderRelTypePrerender == 0x1,
59 RelTypeHistogramEnum_must_match_PrerenderRelType);
60 COMPILE_ASSERT(PrerenderRelTypeNext == 0x2,
61 RelTypeHistogramEnum_must_match_PrerenderRelType);
62 enum RelTypeHistogramEnum {
gavinp 2013/12/20 19:56:43 Our coding standard doesn't define an order for tr
63 RelTypeHistogramEnumNone = 0,
64 RelTypeHistogramEnumPrerender = PrerenderRelTypePrerender,
65 RelTypeHistogramEnumNext = PrerenderRelTypeNext,
66 RelTypeHistogramEnumPrerenderAndNext =
67 PrerenderRelTypePrerender | PrerenderRelTypeNext,
68 RelTypeHistogramEnumMax,
69 };
70
71 void RecordLinkManagerAdded(const uint32 rel_types) {
72 const uint32 enum_value = rel_types & (RelTypeHistogramEnumMax - 1);
73 UMA_HISTOGRAM_ENUMERATION("Prerender.RelTypesLinkAdded", enum_value,
74 RelTypeHistogramEnumMax);
75 }
76
77 void RecordLinkManagerStarting(const uint32 rel_types) {
78 const uint32 enum_value = rel_types & (RelTypeHistogramEnumMax - 1);
79 UMA_HISTOGRAM_ENUMERATION("Prerender.RelTypesLinkStarted", enum_value,
80 RelTypeHistogramEnumMax);
81 }
82
57 void Send(int child_id, IPC::Message* raw_message) { 83 void Send(int child_id, IPC::Message* raw_message) {
58 using content::RenderProcessHost; 84 using content::RenderProcessHost;
59 scoped_ptr<IPC::Message> own_message(raw_message); 85 scoped_ptr<IPC::Message> own_message(raw_message);
60 86
61 RenderProcessHost* render_process_host = RenderProcessHost::FromID(child_id); 87 RenderProcessHost* render_process_host = RenderProcessHost::FromID(child_id);
62 if (!render_process_host) 88 if (!render_process_host)
63 return; 89 return;
64 render_process_host->Send(own_message.release()); 90 render_process_host->Send(own_message.release());
65 } 91 }
66 92
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 content::RenderProcessHost::FromID(launcher_child_id); 124 content::RenderProcessHost::FromID(launcher_child_id);
99 // Guests inside <webview> do not support cross-process navigation and so we 125 // Guests inside <webview> do not support cross-process navigation and so we
100 // do not allow guests to prerender content. 126 // do not allow guests to prerender content.
101 if (rph && rph->IsGuest()) 127 if (rph && rph->IsGuest())
102 return; 128 return;
103 129
104 LinkPrerender 130 LinkPrerender
105 prerender(launcher_child_id, prerender_id, url, rel_types, referrer, size, 131 prerender(launcher_child_id, prerender_id, url, rel_types, referrer, size,
106 render_view_route_id, manager_->GetCurrentTimeTicks()); 132 render_view_route_id, manager_->GetCurrentTimeTicks());
107 prerenders_.push_back(prerender); 133 prerenders_.push_back(prerender);
134 RecordLinkManagerAdded(rel_types);
108 StartPrerenders(); 135 StartPrerenders();
109 } 136 }
110 137
111 void PrerenderLinkManager::OnCancelPrerender(int child_id, int prerender_id) { 138 void PrerenderLinkManager::OnCancelPrerender(int child_id, int prerender_id) {
112 LinkPrerender* prerender = FindByLauncherChildIdAndPrerenderId(child_id, 139 LinkPrerender* prerender = FindByLauncherChildIdAndPrerenderId(child_id,
113 prerender_id); 140 prerender_id);
114 if (!prerender) 141 if (!prerender)
115 return; 142 return;
116 143
117 CancelPrerender(prerender); 144 CancelPrerender(prerender);
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 prerenders_.erase(*i); 313 prerenders_.erase(*i);
287 continue; 314 continue;
288 } 315 }
289 316
290 // We have successfully started a new prerender. 317 // We have successfully started a new prerender.
291 (*i)->handle = handle; 318 (*i)->handle = handle;
292 ++total_started_prerender_count; 319 ++total_started_prerender_count;
293 handle->SetObserver(this); 320 handle->SetObserver(this);
294 if (handle->IsPrerendering()) 321 if (handle->IsPrerendering())
295 OnPrerenderStart(handle); 322 OnPrerenderStart(handle);
323 RecordLinkManagerStarting((*i)->rel_types);
296 324
297 running_launcher_and_render_view_routes.insert( 325 running_launcher_and_render_view_routes.insert(
298 launcher_and_render_view_route); 326 launcher_and_render_view_route);
299 } 327 }
300 } 328 }
301 329
302 PrerenderLinkManager::LinkPrerender* 330 PrerenderLinkManager::LinkPrerender*
303 PrerenderLinkManager::FindByLauncherChildIdAndPrerenderId(int launcher_child_id, 331 PrerenderLinkManager::FindByLauncherChildIdAndPrerenderId(int launcher_child_id,
304 int prerender_id) { 332 int prerender_id) {
305 for (std::list<LinkPrerender>::iterator i = prerenders_.begin(); 333 for (std::list<LinkPrerender>::iterator i = prerenders_.begin();
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 DCHECK(!prerender->is_match_complete_replacement); 430 DCHECK(!prerender->is_match_complete_replacement);
403 prerender->is_match_complete_replacement = true; 431 prerender->is_match_complete_replacement = true;
404 Send(prerender->launcher_child_id, 432 Send(prerender->launcher_child_id,
405 new PrerenderMsg_OnPrerenderStop(prerender->prerender_id)); 433 new PrerenderMsg_OnPrerenderStop(prerender->prerender_id));
406 // Do not call RemovePrerender here. The replacement needs to stay connected 434 // Do not call RemovePrerender here. The replacement needs to stay connected
407 // to the HTMLLinkElement in the renderer so it notices renderer-triggered 435 // to the HTMLLinkElement in the renderer so it notices renderer-triggered
408 // cancelations. 436 // cancelations.
409 } 437 }
410 438
411 } // namespace prerender 439 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698