chromium/components/startup_metric_utils/renderer/startup_metric_utils.h

// Copyright 2023 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_STARTUP_METRIC_UTILS_RENDERER_STARTUP_METRIC_UTILS_H_
#define COMPONENTS_STARTUP_METRIC_UTILS_RENDERER_STARTUP_METRIC_UTILS_H_

#include "base/component_export.h"
#include "base/time/time.h"

// Utility functions to support metric collection for gpu startup. Timings
// should use TimeTicks whenever possible.

namespace startup_metric_utils {

class COMPONENT_EXPORT(STARTUP_METRIC_UTILS)
    RendererStartupMetricRecorder final {
 public:
  // Call this when the renderer has finished its initialization and is about to
  // call into its main-thread RunLoop. Must be called after
  // RecordStartupProcessCreationTime, because it computes time deltas based on
  // process creation time.
  void RecordRunLoopStart(base::TimeTicks ticks);

 private:
  friend COMPONENT_EXPORT(STARTUP_METRIC_UTILS)
      RendererStartupMetricRecorder& GetRenderer();

  base::TimeTicks run_loop_start_ticks_;

  void RecordRendererStartRunLoopTicks(base::TimeTicks ticks);
};

COMPONENT_EXPORT(STARTUP_METRIC_UTILS)
RendererStartupMetricRecorder& GetRenderer();

}  // namespace startup_metric_utils

#endif  // COMPONENTS_STARTUP_METRIC_UTILS_RENDERER_STARTUP_METRIC_UTILS_H_