File: ScalarInfo.h

package info (click to toggle)
firefox-esr 128.13.0esr-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,230,012 kB
  • sloc: cpp: 7,103,971; javascript: 6,088,450; ansic: 3,653,980; python: 1,212,330; xml: 594,604; asm: 420,652; java: 182,969; sh: 71,124; makefile: 20,747; perl: 13,449; objc: 12,399; yacc: 4,583; cs: 3,846; pascal: 2,973; lex: 1,720; ruby: 1,194; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (94 lines) | stat: -rw-r--r-- 3,434 bytes parent folder | download | duplicates (20)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef TelemetryScalarInfo_h__
#define TelemetryScalarInfo_h__

#include "TelemetryCommon.h"

// This module is internal to Telemetry. It defines a structure that holds the
// scalar info. It should only be used by TelemetryScalarData.h automatically
// generated file and TelemetryScalar.cpp. This should not be used anywhere
// else. For the public interface to Telemetry functionality, see Telemetry.h.

namespace {

/**
 * Base scalar information, common to both "static" and dynamic scalars.
 */
struct BaseScalarInfo {
  uint32_t kind;
  uint32_t dataset;
  mozilla::Telemetry::Common::RecordedProcessType record_in_processes;
  bool keyed;
  uint32_t key_count;
  uint32_t key_offset;
  mozilla::Telemetry::Common::SupportedProduct products;
  bool builtin;

  constexpr BaseScalarInfo(
      uint32_t aKind, uint32_t aDataset,
      mozilla::Telemetry::Common::RecordedProcessType aRecordInProcess,
      bool aKeyed, uint32_t aKeyCount, uint32_t aKeyOffset,
      mozilla::Telemetry::Common::SupportedProduct aProducts,
      bool aBuiltin = true)
      : kind(aKind),
        dataset(aDataset),
        record_in_processes(aRecordInProcess),
        keyed(aKeyed),
        key_count(aKeyCount),
        key_offset(aKeyOffset),
        products(aProducts),
        builtin(aBuiltin) {}
  virtual ~BaseScalarInfo() = default;

  virtual const char* name() const = 0;
  virtual const char* expiration() const = 0;

  virtual uint32_t storeOffset() const = 0;
  virtual uint32_t storeCount() const = 0;
};

/**
 * "Static" scalar definition: these are the ones riding
 * the trains.
 */
struct ScalarInfo : BaseScalarInfo {
  uint32_t name_offset;
  uint32_t expiration_offset;
  uint32_t store_count;
  uint16_t store_offset;

  // In order to cleanly support dynamic scalars in TelemetryScalar.cpp, we need
  // to use virtual functions for |name| and |expiration|, as they won't be
  // looked up in the static tables in that case. However, using virtual
  // functions makes |ScalarInfo| non-aggregate and prevents from using
  // aggregate initialization (curly brackets) in the generated
  // TelemetryScalarData.h. To work around this problem we define a constructor
  // that takes the exact number of parameters we need.
  constexpr ScalarInfo(
      uint32_t aKind, uint32_t aNameOffset, uint32_t aExpirationOffset,
      uint32_t aDataset,
      mozilla::Telemetry::Common::RecordedProcessType aRecordInProcess,
      bool aKeyed, uint32_t aKeyCount, uint32_t aKeyOffset,
      mozilla::Telemetry::Common::SupportedProduct aProducts,
      uint32_t aStoreCount, uint32_t aStoreOffset)
      : BaseScalarInfo(aKind, aDataset, aRecordInProcess, aKeyed, aKeyCount,
                       aKeyOffset, aProducts),
        name_offset(aNameOffset),
        expiration_offset(aExpirationOffset),
        store_count(aStoreCount),
        store_offset(aStoreOffset) {}

  const char* name() const override;
  const char* expiration() const override;

  uint32_t storeOffset() const override { return store_offset; };
  uint32_t storeCount() const override { return store_count; };
};

}  // namespace

#endif  // TelemetryScalarInfo_h__