#ifndef ABSL_PROFILING_INTERNAL_SAMPLE_RECORDER_H_
#define ABSL_PROFILING_INTERNAL_SAMPLE_RECORDER_H_
#include <atomic>
#include <cstddef>
#include <functional>
#include "absl/base/config.h"
#include "absl/base/thread_annotations.h"
#include "absl/synchronization/mutex.h"
#include "absl/time/time.h"
namespace absl {
ABSL_NAMESPACE_BEGIN
namespace profiling_internal {
template <typename T>
struct Sample { … };
template <typename T>
class SampleRecorder { … };
template <typename T>
typename SampleRecorder<T>::DisposeCallback
SampleRecorder<T>::SetDisposeCallback(DisposeCallback f) { … }
template <typename T>
SampleRecorder<T>::SampleRecorder()
: … { … }
template <typename T>
SampleRecorder<T>::~SampleRecorder() { … }
template <typename T>
void SampleRecorder<T>::PushNew(T* sample) { … }
template <typename T>
void SampleRecorder<T>::PushDead(T* sample) { … }
template <typename T>
template <typename... Targs>
T* SampleRecorder<T>::PopDead(Targs... args) { … }
template <typename T>
template <typename... Targs>
T* SampleRecorder<T>::Register(Targs&&... args) { … }
template <typename T>
void SampleRecorder<T>::Unregister(T* sample) { … }
template <typename T>
int64_t SampleRecorder<T>::Iterate(
const std::function<void(const T& stack)>& f) { … }
template <typename T>
void SampleRecorder<T>::SetMaxSamples(size_t max) { … }
template <typename T>
size_t SampleRecorder<T>::GetMaxSamples() const { … }
}
ABSL_NAMESPACE_END
}
#endif