5#ifndef V8_LIBSAMPLER_SAMPLER_H_
6#define V8_LIBSAMPLER_SAMPLER_H_
10#include <unordered_map>
16#if V8_OS_POSIX && !V8_OS_CYGWIN && !V8_OS_FUCHSIA
36 static const int kMaxFramesCountLog2 = 8;
37 static const unsigned kMaxFramesCount = (1u << kMaxFramesCountLog2) - 1;
60 return record_sample_.exchange(
false, std::memory_order_relaxed);
70 external_sample_count_ = 0;
71 is_counting_samples_ =
true;
79 bool is_counting_samples_ =
false;
80 unsigned js_sample_count_ = 0;
81 unsigned external_sample_count_ = 0;
84 active_.store(value, std::memory_order_relaxed);
88 record_sample_.store(
true, std::memory_order_relaxed);
93 std::atomic_bool record_sample_{
false};
94 std::unique_ptr<PlatformData>
data_;
100using AtomicMutex = std::atomic_bool;
110 explicit AtomicGuard(AtomicMutex* atomic,
bool is_blocking =
true);
117 bool is_success()
const;
120 AtomicMutex*
const atomic_;
128 using SamplerList = std::vector<Sampler*>;
130 SamplerManager(
const SamplerManager&) =
delete;
131 SamplerManager& operator=(
const SamplerManager&) =
delete;
134 void AddSampler(Sampler* sampler);
138 void RemoveSampler(Sampler* sampler);
146 static SamplerManager* instance();
149 SamplerManager() =
default;
154 std::unordered_map<int, SamplerList> sampler_map_;
155 AtomicMutex samplers_access_counter_{
false};
uint8_t data_[MAX_STACK_LENGTH]
unsigned js_sample_count() const
Isolate * isolate() const
void SetShouldRecordSample()
DISALLOW_IMPLICIT_CONSTRUCTORS(Sampler)
void SetActive(bool value)
virtual void SampleStack(const v8::RegisterState ®s)=0
bool ShouldRecordSample()
std::unique_ptr< PlatformData > data_
PlatformData * platform_data() const
unsigned external_sample_count() const
void StartCountingSamples()
base::PointerWithPayload< void, RegisterStateFlags, 2 > RegisterState
#define V8_EXPORT_PRIVATE