// Copyright 2016 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_LIBSAMPLER_SAMPLER_H_ #define V8_LIBSAMPLER_SAMPLER_H_ #include <atomic> #include <memory> #include <unordered_map> #include <vector> #include "src/base/lazy-instance.h" #include "src/base/macros.h" #if V8_OS_POSIX && !V8_OS_CYGWIN && !V8_OS_FUCHSIA #define USE_SIGNALS #endif namespace v8 { class Isolate; struct RegisterState; namespace sampler { // ---------------------------------------------------------------------------- // Sampler // // A sampler periodically samples the state of the VM and optionally // (if used for profiling) the program counter and stack pointer for // the thread that created it. class V8_EXPORT_PRIVATE Sampler { … }; #ifdef USE_SIGNALS AtomicMutex; // A helper that uses an std::atomic_bool to create a lock that is obtained on // construction and released on destruction. class V8_EXPORT_PRIVATE V8_NODISCARD AtomicGuard { … }; // SamplerManager keeps a list of Samplers per thread, and allows the caller to // take a sample for every Sampler on the current thread. class V8_EXPORT_PRIVATE SamplerManager { … }; #endif // USE_SIGNALS } // namespace sampler } // namespace v8 #endif // V8_LIBSAMPLER_SAMPLER_H_