diff --git a/benchmarks.yml b/benchmarks.yml index a8e980e6..7c0297d6 100644 --- a/benchmarks.yml +++ b/benchmarks.yml @@ -170,6 +170,11 @@ getivar: category: micro single_file: true ractor: true +getivar-module: + desc: getivar tests the performance of getting instance variable values from modules. + category: micro + single_file: true + ractor: true structaref: desc: structaref tests the performance of getting Struct members category: micro diff --git a/benchmarks/getivar-module.rb b/benchmarks/getivar-module.rb new file mode 100644 index 00000000..e99930a2 --- /dev/null +++ b/benchmarks/getivar-module.rb @@ -0,0 +1,66 @@ +require_relative '../harness/loader' + +class TheClass + @v0 = 1 + @v1 = 2 + @v2 = 3 + @levar = 1 + + def self.get_value_loop + sum = 0 + + # 1M + i = 0 + while i < 1000000 + # 10 times to de-emphasize loop overhead + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + i += 1 + end + + return sum + end +end + +module TheModule + @v0 = 1 + @v1 = 2 + @v2 = 3 + @levar = 1 + + def self.get_value_loop + sum = 0 + + # 1M + i = 0 + while i < 1000000 + # 10 times to de-emphasize loop overhead + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + sum += @levar + i += 1 + end + + return sum + end +end + +run_benchmark(850) do + TheClass.get_value_loop + TheModule.get_value_loop +end