1*da0073e9SAndroid Build Coastguard Worker #pragma once 2*da0073e9SAndroid Build Coastguard Worker 3*da0073e9SAndroid Build Coastguard Worker #include <memory> 4*da0073e9SAndroid Build Coastguard Worker #include <string_view> 5*da0073e9SAndroid Build Coastguard Worker 6*da0073e9SAndroid Build Coastguard Worker #include <c10/macros/Macros.h> 7*da0073e9SAndroid Build Coastguard Worker #include <c10/util/SmallVector.h> 8*da0073e9SAndroid Build Coastguard Worker 9*da0073e9SAndroid Build Coastguard Worker namespace c10::monitor { 10*da0073e9SAndroid Build Coastguard Worker namespace detail { 11*da0073e9SAndroid Build Coastguard Worker 12*da0073e9SAndroid Build Coastguard Worker class GaugeImpl; 13*da0073e9SAndroid Build Coastguard Worker 14*da0073e9SAndroid Build Coastguard Worker class GaugeBackendIf { 15*da0073e9SAndroid Build Coastguard Worker public: 16*da0073e9SAndroid Build Coastguard Worker virtual ~GaugeBackendIf() = default; 17*da0073e9SAndroid Build Coastguard Worker virtual void record(int64_t value) noexcept = 0; 18*da0073e9SAndroid Build Coastguard Worker }; 19*da0073e9SAndroid Build Coastguard Worker 20*da0073e9SAndroid Build Coastguard Worker class GaugeBackendFactoryIf { 21*da0073e9SAndroid Build Coastguard Worker public: 22*da0073e9SAndroid Build Coastguard Worker virtual ~GaugeBackendFactoryIf() = default; 23*da0073e9SAndroid Build Coastguard Worker 24*da0073e9SAndroid Build Coastguard Worker // May return nullptr if the gauge will be ignored by the given backend. 25*da0073e9SAndroid Build Coastguard Worker virtual std::unique_ptr<GaugeBackendIf> create( 26*da0073e9SAndroid Build Coastguard Worker std::string_view key) noexcept = 0; 27*da0073e9SAndroid Build Coastguard Worker }; 28*da0073e9SAndroid Build Coastguard Worker 29*da0073e9SAndroid Build Coastguard Worker void C10_API registerGaugeBackend(std::unique_ptr<GaugeBackendFactoryIf>); 30*da0073e9SAndroid Build Coastguard Worker } // namespace detail 31*da0073e9SAndroid Build Coastguard Worker 32*da0073e9SAndroid Build Coastguard Worker // A handle to a Gauge. 33*da0073e9SAndroid Build Coastguard Worker class C10_API GaugeHandle { 34*da0073e9SAndroid Build Coastguard Worker public: 35*da0073e9SAndroid Build Coastguard Worker explicit GaugeHandle(std::string_view key); 36*da0073e9SAndroid Build Coastguard Worker void record(int64_t value); 37*da0073e9SAndroid Build Coastguard Worker 38*da0073e9SAndroid Build Coastguard Worker private: 39*da0073e9SAndroid Build Coastguard Worker detail::GaugeImpl& impl_; 40*da0073e9SAndroid Build Coastguard Worker }; 41*da0073e9SAndroid Build Coastguard Worker 42*da0073e9SAndroid Build Coastguard Worker } // namespace c10::monitor 43*da0073e9SAndroid Build Coastguard Worker 44*da0073e9SAndroid Build Coastguard Worker #define STATIC_GAUGE(_key) \ 45*da0073e9SAndroid Build Coastguard Worker []() -> ::c10::monitor::GaugeHandle& { \ 46*da0073e9SAndroid Build Coastguard Worker static ::c10::monitor::GaugeHandle handle(#_key); \ 47*da0073e9SAndroid Build Coastguard Worker return handle; \ 48*da0073e9SAndroid Build Coastguard Worker }() 49