babeltrace 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,90 @@
1
+ module Babeltrace
2
+ module CTF
3
+ class Trace
4
+ def iter_create(begin_pos: nil, end_pos: nil)
5
+ CTF.bt_ctf_iter_create(@context, begin_pos, end_pos)
6
+ end
7
+
8
+ def iter_create_intersect
9
+ begin_pos_ptr = FFI::MemoryPointer::new(:pointer)
10
+ end_pos_ptr = FFI::MemoryPointer::new(:pointer)
11
+ iter = CTF.bt_ctf_iter_create_intersect(@context, begin_pos_ptr, end_pos_ptr)
12
+ begin_pos = IterPosManaged::new(begin_pos_ptr.read_pointer)
13
+ end_pos = IterPosManaged::new(end_pos_ptr.read_pointer)
14
+ [iter, begin_pos, end_pos]
15
+ end
16
+ end
17
+
18
+ class Iter
19
+ def self.release(ptr)
20
+ CTF.bt_ctf_iter_destroy(ptr)
21
+ end
22
+
23
+ def get_iter
24
+ return @iter if @iter
25
+ @iter = CTF.bt_ctf_get_iter(self)
26
+ @iter.child = self
27
+ @iter
28
+ end
29
+
30
+ def read_event
31
+ CTF.bt_ctf_iter_read_event(self)
32
+ end
33
+
34
+ def read_event_flag
35
+ ptr = FFI::MemoryPointer::new(:int)
36
+ event = CTF.bt_ctf_iter_read_event_flags(self, ptr)
37
+ flags = ptr.read(:int)
38
+ [event, flags]
39
+ end
40
+
41
+ def get_lost_events_count
42
+ CTF.bt_ctf_get_lost_events_count(self)
43
+ end
44
+
45
+ def next
46
+ get_iter.next
47
+ end
48
+
49
+ def get_pos
50
+ get_iter.get_pos
51
+ end
52
+
53
+ def set_pos(pos)
54
+ get_iter.set_pos(pos)
55
+ end
56
+
57
+ def rewind
58
+ get_iter.rewind
59
+ end
60
+
61
+ def create_time_pos(timestamp)
62
+ get_iter.create_time_pos(timestamp)
63
+ end
64
+
65
+ def each
66
+ rewind
67
+ if block_given?
68
+ loop do
69
+ e = self.read_event
70
+ break if e.pointer.null?
71
+ yield e
72
+ r = self.next
73
+ break if r != 0
74
+ end
75
+ else
76
+ return to_enum(:each)
77
+ end
78
+ end
79
+
80
+ end
81
+
82
+ attach_function :bt_ctf_iter_create, [Context, :pointer, :pointer], Iter.by_ref #pointers to IterPos or IterPosManaged
83
+ attach_function :bt_ctf_iter_create_intersect, [Context, :pointer, :pointer], Iter.by_ref
84
+ attach_function :bt_ctf_get_iter, [Iter], Babeltrace::Iter.by_ref
85
+ attach_function :bt_ctf_iter_destroy, [Iter], :void
86
+ attach_function :bt_ctf_iter_read_event, [Iter], Event.by_ref
87
+ attach_function :bt_ctf_iter_read_event_flags, [Iter, :pointer], Event.by_ref
88
+ attach_function :bt_ctf_get_lost_events_count, [Iter], :uint64
89
+ end
90
+ end
@@ -0,0 +1,54 @@
1
+ module Babeltrace
2
+ class Context < FFI::ManagedStruct
3
+ layout :dummy, :pointer
4
+ end
5
+
6
+ class StreamPos < FFI::Struct
7
+ layout :dummy, :pointer
8
+ end
9
+
10
+ class MmapStream < FFI::Struct
11
+ layout :fd, :int,
12
+ :list, ListHead,
13
+ :priv, :pointer
14
+ end
15
+
16
+ class MmapStreamList < FFI::Struct
17
+ layout :head, ListHead
18
+ end
19
+
20
+ class TraceDescriptor < FFI::Struct
21
+ layout :dummy, :pointer
22
+ end
23
+
24
+ class TraceHandle < FFI::Struct
25
+ layout :dummy, :pointer
26
+ end
27
+
28
+ callback :packet_seek_callback, [StreamPos, :size_t, :int], :void
29
+ callback :open_trace_callback, [:string, :int, :packet_seek_callback, :pointer], TraceDescriptor.by_ref
30
+ callback :open_mmap_trace_callback, [MmapStreamList, :packet_seek_callback, :pointer], TraceDescriptor.by_ref
31
+ callback :close_trace_callback, [TraceDescriptor], :int
32
+ callback :set_context_callback, [TraceDescriptor, Context], :void
33
+ callback :set_handle_callback, [TraceDescriptor, TraceHandle], :void
34
+ callback :timestamp_begin_callback, [TraceDescriptor, TraceHandle, ClockType], :uint64
35
+ callback :timestamp_end_callback, [TraceDescriptor, TraceHandle, ClockType], :uint64
36
+ callback :convert_index_timestamp_callback, [TraceDescriptor], :int
37
+
38
+ class Format < FFI::Struct
39
+ layout :name, :intern_str,
40
+ :open_trace, :open_trace_callback,
41
+ :open_mmap_trace, :open_mmap_trace_callback,
42
+ :close_trace, :close_trace_callback,
43
+ :set_context, :set_context_callback,
44
+ :set_handle, :set_handle_callback,
45
+ :timestamp_begin, :timestamp_begin_callback,
46
+ :timestamp_end, :timestamp_end_callback,
47
+ :convert_index_timestamp, :convert_index_timestamp_callback
48
+ end
49
+
50
+ attach_function :bt_lookup_format, [:intern_str], Format
51
+ attach_function :bt_fprintf_format_list, [:pointer], :int
52
+ attach_function :bt_register_format, [Format], :int
53
+ attach_function :bt_unregister_format, [Format], :void
54
+ end
@@ -0,0 +1,62 @@
1
+ module Babeltrace
2
+ IterPosType = enum :SEEK_TIME, :SEEK_RESTORE, :SEEK_CUR, :SEEK_BEGIN, :SEEK_LAST
3
+
4
+ class SavedPos < FFI::Struct
5
+ layout :dummy, :pointer
6
+ end
7
+
8
+ class IterPos < FFI::Struct
9
+ class SeekUnion < FFI::Union
10
+ layout :seek_time, :uint64,
11
+ :restore, SavedPos.ptr
12
+ end
13
+ layout :type, IterPosType,
14
+ :u, SeekUnion
15
+ end
16
+
17
+ class IterPosManaged < FFI::ManagedStruct
18
+ class SeekUnion < FFI::Union
19
+ layout :seek_time, :uint64,
20
+ :restore, SavedPos.ptr
21
+ end
22
+ layout :type, IterPosType,
23
+ :u, SeekUnion
24
+
25
+ def self.release(ptr)
26
+ Babeltrace.bt_iter_free_pos(ptr)
27
+ end
28
+ end
29
+
30
+ class Iter < FFI::Struct
31
+ layout :dummy, :pointer
32
+ attr_accessor :child
33
+
34
+ def next
35
+ Babeltrace.bt_iter_next(self)
36
+ end
37
+
38
+ def get_pos
39
+ Babeltrace.bt_iter_get_pos(self)
40
+ end
41
+
42
+ def set_pos(pos)
43
+ Babeltrace.bt_iter_set_pos(self, pos)
44
+ end
45
+
46
+ def rewind
47
+ pos = IterPos::new
48
+ pos[:type] = :SEEK_BEGIN
49
+ set_pos(pos)
50
+ end
51
+
52
+ def create_time_pos(timestamp)
53
+ Babeltrace.bt_iter_create_time_pos(self, timestamp)
54
+ end
55
+ end
56
+
57
+ attach_function :bt_iter_next, [Iter], :int
58
+ attach_function :bt_iter_get_pos, [Iter], IterPosManaged.by_ref
59
+ attach_function :bt_iter_free_pos, [IterPosManaged], :void
60
+ attach_function :bt_iter_set_pos, [Iter, :pointer], :int #pointer to IterPos or IterPosManaged
61
+ attach_function :bt_iter_create_time_pos, [Iter, :uint64], IterPosManaged.by_ref
62
+ end
@@ -0,0 +1,72 @@
1
+ module Babeltrace
2
+
3
+ class ListHead < FFI::Struct
4
+ layout :next, ListHead.ptr,
5
+ :prev, ListHead.ptr
6
+
7
+ def init
8
+ self[:next] = self[:prev] = self
9
+ self
10
+ end
11
+
12
+ def add(head)
13
+ head[:next][:prev] = self
14
+ self[:next] = head[:next]
15
+ self[:prev] = head
16
+ head[:next] = self
17
+ self
18
+ end
19
+
20
+ def add_tail(head)
21
+ head[:prev][:next] = self
22
+ self[:next] = head
23
+ self[:prev] = head[:prev]
24
+ head[:prev] = self
25
+ self
26
+ end
27
+
28
+ def self.del(p, n)
29
+ n[:prev] = p
30
+ n[:next] = n
31
+ end
32
+
33
+ def del
34
+ ListHead.del(self[:prev], self[:next])
35
+ self
36
+ end
37
+
38
+ def move(list)
39
+ ListHead.del(self[:prev], self[:next])
40
+ self.add(list)
41
+ self
42
+ end
43
+
44
+ def replace(n)
45
+ n[:next] = self[:next]
46
+ n[:prev] = self[:prev]
47
+ n[:prev][:next] = n
48
+ n[:next][:prev] = n
49
+ self
50
+ end
51
+
52
+ def splice(head)
53
+ if(!empty?)
54
+ self[:next][:prev] = head
55
+ self[:prev][:next] = head[:next]
56
+ head[:next][:prev] = self[:prev]
57
+ head[:next] = self[:next]
58
+ end
59
+ end
60
+
61
+ def empty?
62
+ self.to_ptr == self[:next].to_ptr
63
+ end
64
+
65
+ def replace_init(n)
66
+ head = self[:next]
67
+ self.del
68
+ n.add_tail(head)
69
+ self.init
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,28 @@
1
+ module Babeltrace
2
+ class Trace
3
+ attr_reader :context
4
+ attr_reader :handle_id
5
+ def initialize(context, handle_id)
6
+ @context = context
7
+ @handle_id = handle_id
8
+ end
9
+
10
+ def get_path
11
+ Babeltrace.bt_trace_handle_get_path(@context, @handle_id)
12
+ end
13
+
14
+ def get_timestamp_begin(clock_type = :REAL)
15
+ t = Babeltrace.bt_trace_handle_get_timestamp_begin(@context, @handle_id, clock_type)
16
+ t = Time.at(0, t, :nsec) if clock_type == :REAL
17
+ end
18
+
19
+ def get_timestamp_end(clock_type = :REAL)
20
+ t = Babeltrace.bt_trace_handle_get_timestamp_end(@context, @handle_id, clock_type)
21
+ t = Time.at(0, t, :nsec) if clock_type == :REAL
22
+ end
23
+ end
24
+
25
+ attach_function :bt_trace_handle_get_path, [Context, :int], :string
26
+ attach_function :bt_trace_handle_get_timestamp_begin, [Context, :int, ClockType], :uint64
27
+ attach_function :bt_trace_handle_get_timestamp_end, [Context, :int, ClockType], :uint64
28
+ end
@@ -0,0 +1,8 @@
1
+ module Babeltrace
2
+
3
+ TYPES = [[:int, :intern_str]]
4
+ TYPES.each { |orig, add|
5
+ typedef orig, add
6
+ }
7
+
8
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: babeltrace
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Brice Videau
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.9.3
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.9'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.9.3
33
+ description: Ruby libbabeltrace ffi bindings
34
+ email: bvideau@anl.gov
35
+ executables: []
36
+ extensions:
37
+ - ext/babeltrace_c/extconf.rb
38
+ extra_rdoc_files: []
39
+ files:
40
+ - LICENSE
41
+ - babeltrace.gemspec
42
+ - ext/babeltrace_c/babeltrace.c
43
+ - ext/babeltrace_c/babeltrace/align.h
44
+ - ext/babeltrace_c/babeltrace/compiler.h
45
+ - ext/babeltrace_c/babeltrace/types.h
46
+ - ext/babeltrace_c/extconf.rb
47
+ - lib/babeltrace.rb
48
+ - lib/babeltrace/clock_type.rb
49
+ - lib/babeltrace/context.rb
50
+ - lib/babeltrace/ctf.rb
51
+ - lib/babeltrace/ctf/callbacks.rb
52
+ - lib/babeltrace/ctf/events.rb
53
+ - lib/babeltrace/ctf/iterator.rb
54
+ - lib/babeltrace/format.rb
55
+ - lib/babeltrace/iterator.rb
56
+ - lib/babeltrace/list.rb
57
+ - lib/babeltrace/trace_handle.rb
58
+ - lib/babeltrace/types.rb
59
+ homepage: https://github.com/alcf-perfengr/babeltrace-ruby
60
+ licenses:
61
+ - MIT
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: 2.3.0
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 2.7.6.2
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Ruby libbabeltrace bindings
83
+ test_files: []