| // 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_ |