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

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: rebase to trunk Created 6 years, 10 months 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
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 <functional> 7 #include <functional>
8 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
11 #include <utility> 11 #include <utility>
12 12
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/metrics/field_trial.h" 14 #include "base/metrics/field_trial.h"
15 #include "base/metrics/histogram.h"
15 #include "chrome/browser/prerender/prerender_contents.h" 16 #include "chrome/browser/prerender/prerender_contents.h"
16 #include "chrome/browser/prerender/prerender_handle.h" 17 #include "chrome/browser/prerender/prerender_handle.h"
17 #include "chrome/browser/prerender/prerender_manager.h" 18 #include "chrome/browser/prerender/prerender_manager.h"
18 #include "chrome/browser/prerender/prerender_manager_factory.h" 19 #include "chrome/browser/prerender/prerender_manager_factory.h"
19 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/common/prerender_messages.h" 21 #include "chrome/common/prerender_messages.h"
21 #include "chrome/common/prerender_types.h" 22 #include "chrome/common/prerender_types.h"
22 #include "content/public/browser/render_process_host.h" 23 #include "content/public/browser/render_process_host.h"
23 #include "content/public/browser/render_view_host.h" 24 #include "content/public/browser/render_view_host.h"
24 #include "content/public/browser/session_storage_namespace.h" 25 #include "content/public/browser/session_storage_namespace.h"
(...skipping 10 matching lines...) Expand all
35 36
36 namespace { 37 namespace {
37 38
38 bool ShouldStartRelNextPrerenders() { 39 bool ShouldStartRelNextPrerenders() {
39 const std::string experiment_name = 40 const std::string experiment_name =
40 base::FieldTrialList::FindFullName("PrerenderRelNextTrial"); 41 base::FieldTrialList::FindFullName("PrerenderRelNextTrial");
41 42
42 return experiment_name.find("Yes") != std::string::npos; 43 return experiment_name.find("Yes") != std::string::npos;
43 } 44 }
44 45
45 bool ShouldStartPrerender(uint32 rel_types) { 46 bool ShouldStartPrerender(const uint32 rel_types) {
46 const bool should_start_rel_next_prerenders = 47 const bool should_start_rel_next_prerenders =
47 ShouldStartRelNextPrerenders(); 48 ShouldStartRelNextPrerenders();
48 49
49 if (rel_types & PrerenderRelTypePrerender) { 50 if (rel_types & PrerenderRelTypePrerender) {
50 return true; 51 return true;
51 } else if (should_start_rel_next_prerenders && 52 } else if (should_start_rel_next_prerenders &&
52 (rel_types & PrerenderRelTypeNext) == PrerenderRelTypeNext) { 53 (rel_types & PrerenderRelTypeNext) == PrerenderRelTypeNext) {
53 return true; 54 return true;
54 } 55 }
55 return false; 56 return false;
56 } 57 }
57 58
59 COMPILE_ASSERT(PrerenderRelTypePrerender == 0x1,
60 RelTypeHistogramEnum_must_match_PrerenderRelType);
61 COMPILE_ASSERT(PrerenderRelTypeNext == 0x2,
62 RelTypeHistogramEnum_must_match_PrerenderRelType);
63 enum RelTypeHistogramEnum {
64 RelTypeHistogramEnumNone = 0,
65 RelTypeHistogramEnumPrerender = PrerenderRelTypePrerender,
66 RelTypeHistogramEnumNext = PrerenderRelTypeNext,
67 RelTypeHistogramEnumPrerenderAndNext =
68 PrerenderRelTypePrerender | PrerenderRelTypeNext,
69 RelTypeHistogramEnumMax,
70 };
71
72 void RecordLinkManagerAdded(const uint32 rel_types) {
73 const uint32 enum_value = rel_types & (RelTypeHistogramEnumMax - 1);
74 UMA_HISTOGRAM_ENUMERATION("Prerender.RelTypesLinkAdded", enum_value,
75 RelTypeHistogramEnumMax);
76 }
77
78 void RecordLinkManagerStarting(const uint32 rel_types) {
79 const uint32 enum_value = rel_types & (RelTypeHistogramEnumMax - 1);
80 UMA_HISTOGRAM_ENUMERATION("Prerender.RelTypesLinkStarted", enum_value,
81 RelTypeHistogramEnumMax);
82 }
83
58 void Send(int child_id, IPC::Message* raw_message) { 84 void Send(int child_id, IPC::Message* raw_message) {
59 using content::RenderProcessHost; 85 using content::RenderProcessHost;
60 scoped_ptr<IPC::Message> own_message(raw_message); 86 scoped_ptr<IPC::Message> own_message(raw_message);
61 87
62 RenderProcessHost* render_process_host = RenderProcessHost::FromID(child_id); 88 RenderProcessHost* render_process_host = RenderProcessHost::FromID(child_id);
63 if (!render_process_host) 89 if (!render_process_host)
64 return; 90 return;
65 render_process_host->Send(own_message.release()); 91 render_process_host->Send(own_message.release());
66 } 92 }
67 93
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 // its AddLinkRelPrerender message raced with shutdown. Ignore it. 182 // its AddLinkRelPrerender message raced with shutdown. Ignore it.
157 DCHECK_NE(FINAL_STATUS_USED, prerender_contents->final_status()); 183 DCHECK_NE(FINAL_STATUS_USED, prerender_contents->final_status());
158 return; 184 return;
159 } 185 }
160 186
161 LinkPrerender 187 LinkPrerender
162 prerender(launcher_child_id, prerender_id, url, rel_types, referrer, size, 188 prerender(launcher_child_id, prerender_id, url, rel_types, referrer, size,
163 render_view_route_id, manager_->GetCurrentTimeTicks(), 189 render_view_route_id, manager_->GetCurrentTimeTicks(),
164 prerender_contents); 190 prerender_contents);
165 prerenders_.push_back(prerender); 191 prerenders_.push_back(prerender);
192 RecordLinkManagerAdded(rel_types);
166 if (prerender_contents) 193 if (prerender_contents)
167 pending_prerender_manager_->ObserveLauncher(prerender_contents); 194 pending_prerender_manager_->ObserveLauncher(prerender_contents);
168 else 195 else
169 StartPrerenders(); 196 StartPrerenders();
170 } 197 }
171 198
172 void PrerenderLinkManager::OnCancelPrerender(int child_id, int prerender_id) { 199 void PrerenderLinkManager::OnCancelPrerender(int child_id, int prerender_id) {
173 LinkPrerender* prerender = FindByLauncherChildIdAndPrerenderId(child_id, 200 LinkPrerender* prerender = FindByLauncherChildIdAndPrerenderId(child_id,
174 prerender_id); 201 prerender_id);
175 if (!prerender) 202 if (!prerender)
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 prerenders_.erase(*i); 380 prerenders_.erase(*i);
354 continue; 381 continue;
355 } 382 }
356 383
357 // We have successfully started a new prerender. 384 // We have successfully started a new prerender.
358 (*i)->handle = handle; 385 (*i)->handle = handle;
359 ++total_started_prerender_count; 386 ++total_started_prerender_count;
360 handle->SetObserver(this); 387 handle->SetObserver(this);
361 if (handle->IsPrerendering()) 388 if (handle->IsPrerendering())
362 OnPrerenderStart(handle); 389 OnPrerenderStart(handle);
390 RecordLinkManagerStarting((*i)->rel_types);
363 391
364 running_launcher_and_render_view_routes.insert( 392 running_launcher_and_render_view_routes.insert(
365 launcher_and_render_view_route); 393 launcher_and_render_view_route);
366 } 394 }
367 } 395 }
368 396
369 PrerenderLinkManager::LinkPrerender* 397 PrerenderLinkManager::LinkPrerender*
370 PrerenderLinkManager::FindByLauncherChildIdAndPrerenderId(int launcher_child_id, 398 PrerenderLinkManager::FindByLauncherChildIdAndPrerenderId(int launcher_child_id,
371 int prerender_id) { 399 int prerender_id) {
372 for (std::list<LinkPrerender>::iterator i = prerenders_.begin(); 400 for (std::list<LinkPrerender>::iterator i = prerenders_.begin();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 DCHECK(!prerender->is_match_complete_replacement); 523 DCHECK(!prerender->is_match_complete_replacement);
496 prerender->is_match_complete_replacement = true; 524 prerender->is_match_complete_replacement = true;
497 Send(prerender->launcher_child_id, 525 Send(prerender->launcher_child_id,
498 new PrerenderMsg_OnPrerenderStop(prerender->prerender_id)); 526 new PrerenderMsg_OnPrerenderStop(prerender->prerender_id));
499 // Do not call RemovePrerender here. The replacement needs to stay connected 527 // Do not call RemovePrerender here. The replacement needs to stay connected
500 // to the HTMLLinkElement in the renderer so it notices renderer-triggered 528 // to the HTMLLinkElement in the renderer so it notices renderer-triggered
501 // cancelations. 529 // cancelations.
502 } 530 }
503 531
504 } // namespace prerender 532 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | tools/metrics/histograms/histograms.xml » ('J')

Powered by Google App Engine
This is Rietveld 408576698