mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
d74fa8e55c
I noticed that in case of cache misshit, re-calculated cc->me can be the same method entry than the pevious one. That is an okay situation but can't we partially reuse the cache, because cc->call should still be valid then? One thing that has to be special-cased is when the method entry gets amended by some refinements. That happens behind-the-scene of call cache mechanism. We have to check if cc->me->def points to the previously saved one. Calculating ------------------------------------- trunk ours vm2_poly_same_method 1.534M 2.025M i/s - 6.000M times in 3.910203s 2.962752s Comparison: vm2_poly_same_method ours: 2025143.9 i/s trunk: 1534447.2 i/s - 1.32x slower
25 lines
457 B
YAML
25 lines
457 B
YAML
prelude: |
|
|
module AR; end
|
|
class AR::Base
|
|
def create_or_update
|
|
nil
|
|
end
|
|
def save
|
|
create_or_update
|
|
end
|
|
end
|
|
class Foo < AR::Base; end
|
|
class Bar < AR::Base; end
|
|
o1 = Foo.new
|
|
o2 = Bar.new
|
|
benchmark:
|
|
vm2_poly_same_method: |
|
|
o1.save; o2.save;
|
|
o1.save; o2.save;
|
|
o1.save; o2.save;
|
|
o1.save; o2.save;
|
|
o1.save; o2.save;
|
|
o1.save; o2.save;
|
|
o1.save; o2.save;
|
|
o1.save; o2.save;
|
|
loop_count: 6000000
|