S
Stefan Kaes
During profiling some code using ruby 1.8.2 and standard profiler, I
have discovered that class method execution time doesn't get attributed
to the class where the method is defined. Instead it gets attributed to
the class of the object issuing the call. This differs from the way
instance methods are attributed. I'd expect that time gets attributed to
the defining class instead.
I wonder whether this is by design and expected behavior, or a bug.
To verify this, you can run the following code through the profiler and
run grep -e 'foo|bar' on the result.
==========================================================================================
class Base
def self.foo
100.times {|n| n-1}
end
def bar
100.times {|n| n/1}
end
end
class A < Base
end
class B < Base
end
class C < Base
def self.foo
100.times {|n| n+1}
end
def bar
100.times {|n| n*1}
end
end
a = A.new
b = B.new
c = C.new
a.class.foo
b.class.foo
c.class.foo
a.bar
b.bar
c.bar
==========================================================================================
-- stefan
have discovered that class method execution time doesn't get attributed
to the class where the method is defined. Instead it gets attributed to
the class of the object issuing the call. This differs from the way
instance methods are attributed. I'd expect that time gets attributed to
the defining class instead.
I wonder whether this is by design and expected behavior, or a bug.
To verify this, you can run the following code through the profiler and
run grep -e 'foo|bar' on the result.
==========================================================================================
class Base
def self.foo
100.times {|n| n-1}
end
def bar
100.times {|n| n/1}
end
end
class A < Base
end
class B < Base
end
class C < Base
def self.foo
100.times {|n| n+1}
end
def bar
100.times {|n| n*1}
end
end
a = A.new
b = B.new
c = C.new
a.class.foo
b.class.foo
c.class.foo
a.bar
b.bar
c.bar
==========================================================================================
-- stefan