blob: 287fef5f18221b620f7e2989e061908c08d21ec3 [file] [log] [blame]
// Copyright 2024 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_DWA_DWA_ENTRY_BUILDER_H_
#define COMPONENTS_METRICS_DWA_DWA_ENTRY_BUILDER_H_
#include <string_view>
#include "components/metrics/dwa/dwa_entry_builder_base.h"
namespace dwa {
// A generic builder object for recording entries in a DwaRecorder, when the
// recording code does not statically know the names of the events/metrics.
// Metrics must still be described in dwa.xml, and this will trigger a DCHECK
// if used to record metrics not described there.
//
// Where possible, prefer using generated objects from dwa_builders.h in the
// dwa::builders namespace instead.
//
// The example usage is:
// dwa::DwaEntryBuilder builder("PageLoad");
// builder.SetContent("Content")
// builder.SetMetric("NavigationStart", navigation_start_time);
// builder.SetMetric("FirstPaint", first_paint_time);
// builder.AddToStudiesOfInterest("Study1");
// builder.Record(dwa_recorder);
class DwaEntryBuilder final : public dwa::internal::DwaEntryBuilderBase {
public:
explicit DwaEntryBuilder(std::string_view event_name);
DwaEntryBuilder(const DwaEntryBuilder&) = delete;
DwaEntryBuilder& operator=(const DwaEntryBuilder&) = delete;
~DwaEntryBuilder() override;
void SetContent(std::string_view content);
void SetMetric(std::string_view metric_name, int64_t value);
void AddToStudiesOfInterest(std::string_view study_name);
};
} // namespace dwa
#endif // COMPONENTS_METRICS_DWA_DWA_ENTRY_BUILDER_H_