Project

General

Profile

« Previous | Next » 

Revision 6fcb76ed

Added by watson1978 (Shizuo Fujita) almost 7 years ago

Improve performance of some Time methods

internal.h : add rb_numeric_quo() as internal API.
rational.c : rename numeric_quo() to rb_numeric_quo() as internal API.
time.c (quov): optimize by invoking rb_numeric_quo() to retrieve a value of
Numeric#quo instead of method dispatching via rb_funcall().

Time#subsec ->  7 % up
Time#-      -> 26 % up
Time#to_f   -> 30 % up
Time#to_r   ->  7 % up

[ruby-core:80915] [Bug #13519] [Fix GH-1601]

Before

     Time#subsec      2.024M (± 8.7%) i/s -     10.062M in   5.009762s
          Time#-      5.049M (± 4.7%) i/s -     25.186M in   5.002379s
       Time#to_f      5.625M (± 4.2%) i/s -     28.066M in   5.000749s
       Time#to_r      1.880M (± 9.7%) i/s -      9.361M in   5.027527s

After

     Time#subsec      2.155M (± 9.7%) i/s -     10.724M in   5.022579s
          Time#-      6.362M (± 2.0%) i/s -     31.824M in   5.004625s
       Time#to_f      7.287M (± 4.8%) i/s -     36.402M in   5.010983s
       Time#to_r      2.020M (± 9.4%) i/s -     10.059M in   5.021852s

Test code

require 'benchmark/ips'

Benchmark.ips do |x|
x.report "Time#subsec" do |t|
time = Time.now
t.times { time.subsec }
end

x.report "Time#-" do |t|
time1 = Time.now
time2 = Time.now
t.times { time1 - time2 }
end

x.report "Time#to_f" do |t|
time = Time.now
t.times { time.to_f }
end

x.report "Time#to_r" do |t|
time = Time.now
t.times { time.to_r }
end
end

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58921 b2dd03c8-39d4-4d8f-98ff-823fe69b080e