blob: ac819bf38cd97d9f62ba6cb35dee9001547a9db5 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_NO_STATE_PREFETCH_BROWSER_NO_STATE_PREFETCH_HISTOGRAMS_H_
#define COMPONENTS_NO_STATE_PREFETCH_BROWSER_NO_STATE_PREFETCH_HISTOGRAMS_H_
#include <string>
#include "base/threading/thread_checker.h"
#include "base/time/time.h"
#include "components/no_state_prefetch/common/no_state_prefetch_final_status.h"
#include "components/no_state_prefetch/common/no_state_prefetch_origin.h"
namespace prerender {
// Records histograms for NoStatePrefetchManager.
//
// A few histograms are dynamically constructed to avoid binary size bloat from
// histogram_macros.h. Such histograms require careful handling:
// 1. slow - make sure only rare events are recorded this way, a handful of such
// events per page load should be OK
// 2. may lead to small sporadic memory leaks in Histogram::Factory::Build() -
// ensuring that they are recorded from the same thread is sufficient
//
// Besides thread checking this class is stateless, all public methods are
// const.
class NoStatePrefetchHistograms {
public:
// Owned by a NoStatePrefetchManager object for the lifetime of the
// NoStatePrefetchManager.
NoStatePrefetchHistograms() = default;
NoStatePrefetchHistograms(const NoStatePrefetchHistograms&) = delete;
NoStatePrefetchHistograms& operator=(const NoStatePrefetchHistograms&) =
delete;
// Return the string to use as a prefix for histograms depending on the origin
// of the prefetch.
static std::string GetHistogramPrefix(Origin origin);
// Record a final status of a prefetched page in a histogram.
void RecordFinalStatus(Origin origin, FinalStatus final_status) const;
private:
THREAD_CHECKER(thread_checker_);
};
} // namespace prerender
#endif // COMPONENTS_NO_STATE_PREFETCH_BROWSER_NO_STATE_PREFETCH_HISTOGRAMS_H_