summaryrefslogtreecommitdiff
path: root/chromium/fuchsia/base/legacymetrics_client.h
blob: 1d0dc3322cde2ed4173e3182befe85a6d0562658 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FUCHSIA_BASE_LEGACYMETRICS_CLIENT_H_
#define FUCHSIA_BASE_LEGACYMETRICS_CLIENT_H_

#include <fuchsia/legacymetrics/cpp/fidl.h>

#include <memory>
#include <vector>

#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
#include "base/timer/timer.h"
#include "fuchsia/base/legacymetrics_user_event_recorder.h"

namespace cr_fuchsia {

// Used to report events & histogram data to the
// fuchsia.legacymetrics.MetricsRecorder service.
// LegacyMetricsClient must be Start()ed on an IO-capable sequence.
// Cannot be used in conjunction with other metrics reporting services.
// Must be constructed, used, and destroyed on the same sequence.
class LegacyMetricsClient {
 public:
  using ReportAdditionalMetricsCallback = base::RepeatingCallback<void(
      std::vector<fuchsia::legacymetrics::Event>*)>;

  LegacyMetricsClient();

  ~LegacyMetricsClient();

  explicit LegacyMetricsClient(const LegacyMetricsClient&) = delete;
  LegacyMetricsClient& operator=(const LegacyMetricsClient&) = delete;

  // Starts buffering data and schedules metric reporting after every
  // |report_interval|.
  void Start(base::TimeDelta report_interval);

  // Sets a |callback| to be invoked just prior to reporting, allowing users to
  // report additional custom metrics.
  // Must be called before Start().
  void SetReportAdditionalMetricsCallback(
      ReportAdditionalMetricsCallback callback);

 private:
  void ScheduleNextReport();
  void Report();
  void OnMetricsRecorderDisconnected(zx_status_t status);

  base::TimeDelta report_interval_;
  ReportAdditionalMetricsCallback report_additional_callback_;
  std::unique_ptr<LegacyMetricsUserActionRecorder> user_events_recorder_;

  fuchsia::legacymetrics::MetricsRecorderPtr metrics_recorder_;
  base::RetainingOneShotTimer timer_;
  SEQUENCE_CHECKER(sequence_checker_);
};

}  // namespace cr_fuchsia

#endif  // FUCHSIA_BASE_LEGACYMETRICS_CLIENT_H_