#pragma once #include "memory_track.h" #include #include #include #include namespace NActors { namespace NMemory { namespace NPrivate { class TMemoryTracker { public: static TMemoryTracker* Instance(); void Initialize(); const std::map& GetMetricIndices() const; const std::unordered_set& GetSensors() const; TString GetName(size_t index) const; size_t GetCount() const; void GatherMetrics(std::vector& metrics) const; private: size_t RegisterStaticMemoryLabel(const char* name, bool hasSensor); void OnCreateThread(TThreadLocalInfo* info); void OnDestroyThread(TThreadLocalInfo* info); private: std::map Indices; std::vector Names; std::vector GlobalMetrics; std::unordered_set Sensors; std::unordered_set ThreadInfo; TRWMutex LockThreadInfo; friend class TThreadLocalInfo; friend class TBaseLabel; }; } } }