Sha256: 71a08929ef4c74da1780a3c79493f5eace8f0bfb7f90a981af010d46a98e5813

Contents?: true

Size: 878 Bytes

Versions: 3

Compression:

Stored size: 878 Bytes

Contents

# frozen_string_literal: true

module ElasticAPM
  # @api private
  module ChildDurations
    # @api private
    module Methods
      def child_durations
        @child_durations ||= Durations.new
      end

      def child_started
        child_durations.start
      end

      def child_stopped
        child_durations.stop
      end
    end

    # @api private
    class Durations
      def initialize
        @nesting_level = 0
        @start = nil
        @duration = 0
        @mutex = Mutex.new
      end

      attr_reader :duration

      def start
        @mutex.synchronize do
          @nesting_level += 1
          @start = Util.micros if @nesting_level == 1
        end
      end

      def stop
        @mutex.synchronize do
          @nesting_level -= 1
          @duration = (Util.micros - @start) if @nesting_level == 0
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
elastic-apm-3.6.0 lib/elastic_apm/child_durations.rb
elastic-apm-3.5.0 lib/elastic_apm/child_durations.rb
elastic-apm-3.4.0 lib/elastic_apm/child_durations.rb