blob: 67afb0fadf6840cb3066d51ebc38b1ee405ec437 [file] [log] [blame]
// Copyright 2025 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_METRICS_PRIVATE_METRICS_DKM_ENTRY_BUILDER_H_
#define COMPONENTS_METRICS_PRIVATE_METRICS_DKM_ENTRY_BUILDER_H_
#include <string_view>
#include "components/metrics/private_metrics/dkm_entry_builder_base.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
namespace metrics::private_metrics {
// A generic builder object for recording entries in a DkmRecorder, when the
// recording code does not statically know the names of the events/metrics.
// Metrics must still be described in dkm.xml, and this will trigger a DCHECK
// if used to record metrics not described there.
//
// Where possible, prefer using generated objects from dkm_builders.h in the
// dkm::builders namespace instead.
//
// The example usage is:
// metrics::private_metrics::DkmEntryBuilder builder(source_id, "PageLoad");
// builder.SetMetric("NavigationStart", navigation_start_time);
// builder.SetMetric("FirstPaint", first_paint_time);
// builder.AddToStudiesOfInterest("Study1");
// builder.Record(dkm_recorder);
class DkmEntryBuilder final : public internal::DkmEntryBuilderBase {
public:
DkmEntryBuilder(ukm::SourceIdObj source_id, std::string_view event_name);
DkmEntryBuilder(const DkmEntryBuilder&) = delete;
DkmEntryBuilder& operator=(const DkmEntryBuilder&) = delete;
~DkmEntryBuilder() override;
// Adds metric to the current entry. A metric contains a metric name and
// value.
void SetMetric(std::string_view metric_name, int64_t value);
// Adds study name to the set of studies of interest.
void AddToStudiesOfInterest(std::string_view study_name);
};
} // namespace metrics::private_metrics
#endif // COMPONENTS_METRICS_PRIVATE_METRICS_DKM_ENTRY_BUILDER_H_