Class: Datadog::Profiling::Collectors::IdleSamplingHelper
- Inherits:
-
Object
- Object
- Datadog::Profiling::Collectors::IdleSamplingHelper
- Defined in:
- lib/datadog/profiling/collectors/idle_sampling_helper.rb,
ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c
Overview
Used by the Collectors::CpuAndWallTimeWorker to gather samples when the Ruby process is idle. Almost all of this class is implemented as native code.
Methods prefixed with native are implemented in ‘collectors_idle_sampling_helper.c`
Defined Under Namespace
Modules: Testing
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ IdleSamplingHelper
constructor
A new instance of IdleSamplingHelper.
- #start ⇒ Object
- #stop ⇒ Object
Constructor Details
#initialize ⇒ IdleSamplingHelper
Returns a new instance of IdleSamplingHelper.
17 18 19 20 |
# File 'lib/datadog/profiling/collectors/idle_sampling_helper.rb', line 17 def initialize @worker_thread = nil @start_stop_mutex = Mutex.new end |
Class Method Details
._native_idle_sampling_loop ⇒ Object
33 |
# File 'ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c', line 33
static VALUE _native_idle_sampling_loop(DDTRACE_UNUSED VALUE self, VALUE self_instance);
|
._native_reset ⇒ Object
37 |
# File 'ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c', line 37
static VALUE _native_reset(DDTRACE_UNUSED VALUE self, VALUE self_instance);
|
._native_stop ⇒ Object
34 |
# File 'ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c', line 34
static VALUE _native_stop(DDTRACE_UNUSED VALUE self, VALUE self_instance);
|
Instance Method Details
#start ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/datadog/profiling/collectors/idle_sampling_helper.rb', line 22 def start @start_stop_mutex.synchronize do return if @worker_thread&.alive? Datadog.logger.debug { "Starting thread for: #{self}" } # The same instance of the IdleSamplingHelper can be reused multiple times, and this resets it back to # a pristine state before recreating the worker thread self.class._native_reset(self) @worker_thread = Thread.new do Thread.current.name = self.class.name self.class._native_idle_sampling_loop(self) Datadog.logger.debug("IdleSamplingHelper thread stopping cleanly") rescue Exception => e # rubocop:disable Lint/RescueException @failure_exception = e Datadog.logger.warn( "IdleSamplingHelper thread error. " \ "Cause: #{e.class.name} #{e.} Location: #{Array(e.backtrace).first}" ) end @worker_thread.name = self.class.name # Repeated from above to make sure thread gets named asap @worker_thread.thread_variable_set(:fork_safe, true) end true end |
#stop ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/datadog/profiling/collectors/idle_sampling_helper.rb', line 52 def stop @start_stop_mutex.synchronize do Datadog.logger.debug("Requesting IdleSamplingHelper thread shut down") return unless @worker_thread self.class._native_stop(self) @worker_thread.join @worker_thread = nil @failure_exception = nil end end |