blob: 141bfc6902b9ef70456f4b4d37bd08e04de7807d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_HISTOGRAMS_H_
#define CHROME_BROWSER_PRERENDER_PRERENDER_HISTOGRAMS_H_
#pragma once
#include <string>
#include "base/time.h"
#include "chrome/browser/prerender/prerender_final_status.h"
#include "chrome/browser/prerender/prerender_origin.h"
#include "googleurl/src/gurl.h"
namespace prerender {
// PrerenderHistograms is responsible for recording all prerender specific
// histograms for PrerenderManager. It keeps track of the type of prerender
// currently underway (based on the PrerenderOrigin of the most recent
// prerenders, and any experiments detected).
// PrerenderHistograms does not necessarily record all histograms related to
// prerendering, only the ones in the context of PrerenderManager.
class PrerenderHistograms {
public:
// Owned by a PrerenderManager object for the lifetime of the
// PrerenderManager.
PrerenderHistograms();
// Records the perceived page load time for a page - effectively the time from
// when the user navigates to a page to when it finishes loading. The actual
// load may have started prior to navigation due to prerender hints.
void RecordPerceivedPageLoadTime(base::TimeDelta perceived_page_load_time,
bool was_prerender) const;
// Records the time from when a page starts prerendering to when the user
// navigates to it. This must be called on the UI thread.
void RecordTimeUntilUsed(base::TimeDelta time_until_used,
base::TimeDelta max_age) const;
// Record a PerSessionCount data point.
void RecordPerSessionCount(int count) const;
// Record time between two prerender requests.
void RecordTimeBetweenPrerenderRequests(base::TimeDelta time) const;
// Record a final status of a prerendered page in a histogram.
void RecordFinalStatus(Origin origin,
uint8 experiment_id,
FinalStatus final_status) const;
// To be called when a new prerender is added.
void RecordPrerender(Origin origin, const GURL& url);
private:
base::TimeTicks GetCurrentTimeTicks() const;
// Returns whether the PrerenderManager is currently within the prerender
// window - effectively, up to 30 seconds after a prerender tag has been
// observed.
bool WithinWindow() const;
// Returns the histogram name for the current window.
std::string GetDefaultHistogramName(const std::string& name) const;
// Returns the current experiment.
uint8 GetCurrentExperimentId() const;
// Returns the current origin.
Origin GetCurrentOrigin() const;
// Returns whether or not there is currently an origin/experiment wash.
bool IsOriginExperimentWash() const;
// An integer indicating a Prerendering Experiment being currently conducted.
// (The last experiment ID seen).
uint8 last_experiment_id_;
// Origin of the last prerender seen.
Origin last_origin_;
// A boolean indicating that we have recently encountered a combination of
// different experiments and origins, making an attribution of PPLT's to
// experiments / origins impossible.
bool origin_experiment_wash_;
// The time when we last saw a prerender request coming from a renderer.
// This is used to record perceived PLT's for a certain amount of time
// from the point that we last saw a <link rel=prerender> tag.
base::TimeTicks last_prerender_seen_time_;
DISALLOW_COPY_AND_ASSIGN(PrerenderHistograms);
};
} // namespace prerender
#endif // CHROME_BROWSER_PRERENDER_PRERENDER_HISTOGRAMS_H_
|