Module: Corkscrews::Native

Defined in:
lib/corkscrews/native.rb

Class Method Summary collapse

Class Method Details

.available?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/corkscrews/native.rb', line 19

def available?
  defined?(Corkscrews::NativeExtension::AVAILABLE) && Corkscrews::NativeExtension::AVAILABLE
end

.clear_experimentObject



98
99
100
# File 'lib/corkscrews/native.rb', line 98

def clear_experiment
  Corkscrews::Delay.clear_experiment if defined?(Corkscrews::Delay)
end

.clear_monitor_threadObject



71
72
73
# File 'lib/corkscrews/native.rb', line 71

def clear_monitor_thread
  Corkscrews::Monitor.clear_current_thread! if defined?(Corkscrews::Monitor) && Corkscrews::Monitor.respond_to?(:clear_current_thread!)
end

.install_hooks!Object



49
50
51
# File 'lib/corkscrews/native.rb', line 49

def install_hooks!
  Corkscrews::Hooks.install! if defined?(Corkscrews::Hooks)
end

.monitor_available?Boolean

Returns:

  • (Boolean)


61
62
63
64
65
# File 'lib/corkscrews/native.rb', line 61

def monitor_available?
  defined?(Corkscrews::Monitor) &&
    Corkscrews::Monitor.respond_to?(:available?) &&
    Corkscrews::Monitor.available?
end

.native_eventsObject



81
82
83
84
85
# File 'lib/corkscrews/native.rb', line 81

def native_events
  return [] unless defined?(Corkscrews::Record) && Corkscrews::Record.respond_to?(:events)

  Corkscrews::Record.events
end

.native_snapshotObject



75
76
77
78
79
# File 'lib/corkscrews/native.rb', line 75

def native_snapshot
  return {} unless defined?(Corkscrews::Record)

  Corkscrews::Record.snapshot
end

.register_monitor_threadObject



67
68
69
# File 'lib/corkscrews/native.rb', line 67

def register_monitor_thread
  Corkscrews::Monitor.register_current_thread! if defined?(Corkscrews::Monitor) && Corkscrews::Monitor.respond_to?(:register_current_thread!)
end

.set_experiment(kind:, iseq: 0, line: 0, speedup_pct: 0) ⇒ Object



87
88
89
90
91
92
# File 'lib/corkscrews/native.rb', line 87

def set_experiment(kind:, iseq: 0, line: 0, speedup_pct: 0)
  return unless defined?(Corkscrews::Delay)

  kind_id = { none: 0, line: 1, wait: 2 }.fetch(kind.to_sym, 0)
  Corkscrews::Delay.set_experiment(kind_id, iseq.to_i, line.to_i, speedup_pct.to_i)
end

.set_sample_period(ns) ⇒ Object



94
95
96
# File 'lib/corkscrews/native.rb', line 94

def set_sample_period(ns)
  Corkscrews::Delay.set_sample_period(ns.to_i) if defined?(Corkscrews::Delay)
end

.settle_currentObject



102
103
104
105
106
# File 'lib/corkscrews/native.rb', line 102

def settle_current
  return Corkscrews::Delay.settle_current if defined?(Corkscrews::Delay)

  0
end

.settled_nowObject



23
24
25
26
27
# File 'lib/corkscrews/native.rb', line 23

def settled_now
  return Corkscrews::Delay.settled_now if defined?(Corkscrews::Delay)

  Thread.current[:corkscrews_settled_stamp_ns] ||= 0
end

.stamp_inherit(object) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/corkscrews/native.rb', line 38

def stamp_inherit(object)
  if defined?(Corkscrews::Delay)
    Corkscrews::Delay.stamp_inherit(object)
    return nil
  end

  stamp = @stamps[object].to_i
  current = settled_now
  Thread.current[:corkscrews_settled_stamp_ns] = [current, stamp].max
end

.stamp_write(object) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/corkscrews/native.rb', line 29

def stamp_write(object)
  if defined?(Corkscrews::Delay)
    Corkscrews::Delay.stamp_write(object)
    return nil
  end

  @stamps[object] = settled_now
end

.start_monitorObject



53
54
55
# File 'lib/corkscrews/native.rb', line 53

def start_monitor
  Corkscrews::Monitor.start! if defined?(Corkscrews::Monitor)
end

.stop_monitorObject



57
58
59
# File 'lib/corkscrews/native.rb', line 57

def stop_monitor
  Corkscrews::Monitor.stop! if defined?(Corkscrews::Monitor)
end