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