1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef COMPONENTS_PAGE_LOAD_METRICS_RENDERER_PAGE_TIMING_METADATA_RECORDER_H_
6 #define COMPONENTS_PAGE_LOAD_METRICS_RENDERER_PAGE_TIMING_METADATA_RECORDER_H_
7 
8 #include "base/optional.h"
9 #include "base/time/time.h"
10 
11 namespace page_load_metrics {
12 
13 // Records metadata corresponding to page load metrics on sampling profiler
14 // stack samples. PageTimingMetadataRecorder is currently only intended to be
15 // used for the sampling profiler. If you have a new use case in mind, please
16 // reach out to page_load_metrics owners to discuss it.
17 class PageTimingMetadataRecorder {
18  public:
19   // Records the monotonic times that define first contentful paint.
20   struct MonotonicTiming {
21     MonotonicTiming();
22 
23     MonotonicTiming(const MonotonicTiming&);
24     MonotonicTiming& operator=(const MonotonicTiming&);
25     MonotonicTiming(MonotonicTiming&&);
26     MonotonicTiming& operator=(MonotonicTiming&&);
27 
28     base::Optional<base::TimeTicks> navigation_start;
29     base::Optional<base::TimeTicks> first_contentful_paint;
30   };
31 
32   PageTimingMetadataRecorder(const MonotonicTiming& initial_timing);
33   ~PageTimingMetadataRecorder();
34 
35   PageTimingMetadataRecorder(const PageTimingMetadataRecorder&) = delete;
36   PageTimingMetadataRecorder& operator=(const PageTimingMetadataRecorder&) =
37       delete;
38 
39   void UpdateMetadata(const MonotonicTiming& timing);
40 
41  private:
42   // Uniquely identifies an instance of the PageTimingMetadataRecorder. Used to
43   // distinguish page loads for different documents when applying sample
44   // metadata.
45   const int instance_id_;
46 
47   // Records the monotonic times that define first contentful paint.
48   MonotonicTiming timing_;
49 };
50 
51 }  // namespace page_load_metrics
52 
53 #endif  // COMPONENTS_PAGE_LOAD_METRICS_RENDERER_PAGE_TIMING_METADATA_RECORDER_H_
54