Class: RubyProf::MethodInfo

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
ext/ruby_prof.c,
lib/ruby-prof/method_info.rb,
ext/ruby_prof.c

Overview

The RubyProf::MethodInfo class stores profiling data for a method. One instance of the RubyProf::MethodInfo class is created per method called per thread. Thus, if a method is called in two different thread then there will be two RubyProf::MethodInfo objects created. RubyProf::MethodInfo objects can be accessed via the RubyProf::Result object.

Instance Method Summary collapse

Instance Method Details

#<=>(other) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/ruby-prof/method_info.rb', line 5

def <=>(other)
  if self.total_time < other.total_time
    -1
  elsif self.total_time > other.total_time
    1
  elsif self.min_depth < other.min_depth
    1
  elsif self.min_depth > other.min_depth
    -1
  else
    -1 * (self.full_name <=> other.full_name)
  end
end

#aggregate_childrenObject



94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/ruby-prof/method_info.rb', line 94

def aggregate_children
  # Group call info's based on their targets
  groups = self.children.inject(Hash.new) do |hash, call_info|
    key = call_info.target
    (hash[key] ||= []) << call_info
    hash
  end

  groups.map do |key, value|
    AggregateCallInfo.new(value)
  end
end

#aggregate_parentsObject



81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/ruby-prof/method_info.rb', line 81

def aggregate_parents
  # Group call info's based on their parents
  groups = self.call_infos.inject(Hash.new) do |hash, call_info|
    key = call_info.parent ? call_info.parent.target : self
    (hash[key] ||= []) << call_info
    hash
  end

  groups.map do |key, value|
    AggregateCallInfo.new(value)
  end
end

#call_infosArray of call_info

Returns an array of call info objects that contain profiling information about the current method.

Returns:

  • (Array of call_info)


680
681
682
683
684
685
# File 'ext/ruby_prof.c', line 680

static VALUE
prof_method_call_infos(VALUE self)
{
    prof_method_t *method = get_prof_method(self);
    return prof_call_infos_wrap(method->call_infos);
}

#calledObject



19
20
21
22
23
24
25
# File 'lib/ruby-prof/method_info.rb', line 19

def called
  @called ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.called
    end
  end
end

#childrenObject



73
74
75
76
77
78
79
# File 'lib/ruby-prof/method_info.rb', line 73

def children
  @children ||= begin
    call_infos.map do |call_info|
      call_info.children
    end.flatten
  end
end

#children_timeObject



51
52
53
54
55
56
57
# File 'lib/ruby-prof/method_info.rb', line 51

def children_time
  @children_time ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.children_time
    end
  end
end

#full_nameString

Returns the full name of this method in the format Object#method.

Returns:

  • (String)


668
669
670
671
672
673
# File 'ext/ruby_prof.c', line 668

static VALUE
prof_full_name(VALUE self)
{
    prof_method_t *method = get_prof_method(self);
    return full_name(method->key->klass, method->key->mid, method->key->depth);
}

#method_classObject

Returns the Ruby klass that owns this method.



619
620
621
622
623
624
# File 'ext/ruby_prof.c', line 619

static VALUE
prof_method_klass(VALUE self)
{
    prof_method_t *result = get_prof_method(self);
    return result->key->klass;
}

#klass_nameString

Returns the name of this method’s class. Singleton classes will have the form <Object::Object>.

Returns:

  • (String)


643
644
645
646
647
648
# File 'ext/ruby_prof.c', line 643

static VALUE
prof_klass_name(VALUE self)
{
    prof_method_t *method = get_prof_method(self);
    return klass_name(method->key->klass);
}

#line_noInteger

returns the line number of the method

Returns:

  • (Integer)


590
591
592
593
594
# File 'ext/ruby_prof.c', line 590

static VALUE
prof_method_line(VALUE self)
{
    return rb_int_new(get_prof_method(self)->line);
}

#method_idObject

Returns the id of this method.



630
631
632
633
634
635
# File 'ext/ruby_prof.c', line 630

static VALUE
prof_method_id(VALUE self)
{
    prof_method_t *result = get_prof_method(self);
    return ID2SYM(result->key->mid);
}

#method_name() ⇒ Object



656
657
658
659
660
661
# File 'ext/ruby_prof.c', line 656

static VALUE
prof_method_name(VALUE self, int depth)
{
    prof_method_t *method = get_prof_method(self);
    return method_name(method->key->mid, depth);
}

#min_depthObject



59
60
61
62
63
# File 'lib/ruby-prof/method_info.rb', line 59

def min_depth
  call_infos.map do |call_info|
    call_info.depth
  end.min
end

#root?Boolean

Returns:

  • (Boolean)


65
66
67
68
69
70
71
# File 'lib/ruby-prof/method_info.rb', line 65

def root?
  @root ||= begin
    call_infos.find do |call_info|
      not call_info.root?
    end.nil?
  end
end

#self_timeObject



35
36
37
38
39
40
41
# File 'lib/ruby-prof/method_info.rb', line 35

def self_time
  @self_time ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.self_time
    end
  end
end

#source_fileString

return the source file of the method

Returns:

  • (String)


601
602
603
604
605
606
607
608
609
610
611
612
# File 'ext/ruby_prof.c', line 601

static VALUE prof_method_source_file(VALUE self)
{
    const char* sf = get_prof_method(self)->source_file;
    if(!sf)
    {
      return rb_str_new2("ruby_runtime");
    }
    else
    {
      return rb_str_new2(sf);
    }
}

#to_sObject



107
108
109
# File 'lib/ruby-prof/method_info.rb', line 107

def to_s
  full_name
end

#total_timeObject



27
28
29
30
31
32
33
# File 'lib/ruby-prof/method_info.rb', line 27

def total_time
  @total_time ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.total_time
    end
  end
end

#wait_timeObject



43
44
45
46
47
48
49
# File 'lib/ruby-prof/method_info.rb', line 43

def wait_time
  @wait_time ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.wait_time
    end
  end
end