Coverage Report

Created: 2024-09-19 09:45

/proc/self/cwd/source/common/stats/null_counter.h
Line
Count
Source (jump to first uncovered line)
1
#pragma once
2
3
#include "envoy/stats/stats.h"
4
5
#include "source/common/stats/metric_impl.h"
6
7
namespace Envoy {
8
namespace Stats {
9
10
/**
11
 * Null counter implementation.
12
 * No-ops on all calls and requires no underlying metric or data.
13
 */
14
class NullCounterImpl : public MetricImpl<Counter> {
15
public:
16
  explicit NullCounterImpl(SymbolTable& symbol_table)
17
2.70M
      : MetricImpl<Counter>(symbol_table), symbol_table_(symbol_table) {}
18
2.70M
  ~NullCounterImpl() override {
19
    // MetricImpl must be explicitly cleared() before destruction, otherwise it
20
    // will not be able to access the SymbolTable& to free the symbols. An RAII
21
    // alternative would be to store the SymbolTable reference in the
22
    // MetricImpl, costing 8 bytes per stat.
23
2.70M
    MetricImpl::clear(symbol_table_);
24
2.70M
  }
25
26
0
  void add(uint64_t) override {}
27
0
  void inc() override {}
28
0
  uint64_t latch() override { return 0; }
29
0
  void reset() override {}
30
0
  uint64_t value() const override { return 0; }
31
32
  // Metric
33
0
  bool used() const override { return false; }
34
0
  bool hidden() const override { return false; }
35
0
  SymbolTable& symbolTable() override { return symbol_table_; }
36
37
  // RefcountInterface
38
2.70M
  void incRefCount() override { refcount_helper_.incRefCount(); }
39
2.70M
  bool decRefCount() override { return refcount_helper_.decRefCount(); }
40
0
  uint32_t use_count() const override { return refcount_helper_.use_count(); }
41
42
private:
43
  RefcountHelper refcount_helper_;
44
  SymbolTable& symbol_table_;
45
};
46
47
} // namespace Stats
48
} // namespace Envoy