Profiling question


#1

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


#2

Hi,

In message “Re: profiling question”
on Thu, 8 Dec 2005 00:17:28 +0900, Stefan K. removed_email_address@domain.invalid
writes:

|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.

It’s a bug. I have checked in the fix to the CVS repository.
Thank you.

						matz.

#3

Yukihiro M. wrote:

|the defining class instead.

Wow. That was quick. Thanks very much.

– stefan kaes

http://railsexpress.de/blog