Skip to content

Commit f1c59d8

Browse files
committed
Add --excludes to run_benchmarks.rb to easily exclude benchmarks
1 parent 28aca5b commit f1c59d8

File tree

6 files changed

+38
-15
lines changed

6 files changed

+38
-15
lines changed

lib/argument_parser.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class ArgumentParser
1111
:yjit_opts,
1212
:categories,
1313
:name_filters,
14+
:excludes,
1415
:rss,
1516
:graph,
1617
:no_pinning,
@@ -82,6 +83,10 @@ def parse(argv)
8283
args.name_filters = list
8384
end
8485

86+
opts.on("--excludes=x,y,z", Array, "excludes the listed benchmarks") do |list|
87+
args.excludes = list
88+
end
89+
8590
opts.on("--skip-yjit", "Don't run with yjit after interpreter") do
8691
args.skip_yjit = true
8792
end
@@ -174,6 +179,7 @@ def default_args
174179
yjit_opts: "",
175180
categories: [],
176181
name_filters: [],
182+
excludes: [],
177183
rss: false,
178184
graph: false,
179185
no_pinning: false,

lib/benchmark_filter.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@
22

33
# Filters benchmarks based on categories and name patterns
44
class BenchmarkFilter
5-
def initialize(categories:, name_filters:, metadata:)
5+
def initialize(categories:, name_filters:, excludes:, metadata:)
66
@categories = categories
77
@name_filters = process_name_filters(name_filters)
8+
@excludes = excludes
89
@metadata = metadata
910
@category_cache = {}
1011
end
1112

1213
def match?(entry)
1314
name = entry.sub(/\.rb\z/, '')
14-
matches_category?(name) && matches_name_filter?(name)
15+
matches_category?(name) && matches_name_filter?(name) && !matches_excludes?(name)
1516
end
1617

1718
private
@@ -29,6 +30,10 @@ def matches_name_filter?(name)
2930
@name_filters.any? { |filter| filter === name }
3031
end
3132

33+
def matches_excludes?(name)
34+
@excludes.include?(name)
35+
end
36+
3237
def get_benchmark_categories(name)
3338
@category_cache[name] ||= begin
3439
benchmark_metadata = @metadata[name] || {}

lib/benchmark_runner/cli.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def run
4040
ruby_description: ruby_descriptions[name],
4141
categories: args.categories,
4242
name_filters: args.name_filters,
43+
excludes: args.excludes,
4344
out_path: args.out_path,
4445
harness: args.harness,
4546
pre_init: args.with_pre_init,

lib/benchmark_suite.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@ class BenchmarkSuite
1818
RACTOR_CATEGORY = ["ractor"].freeze
1919
RACTOR_HARNESS = "harness-ractor"
2020

21-
attr_reader :ruby, :ruby_description, :categories, :name_filters, :out_path, :harness, :pre_init, :no_pinning, :bench_dir, :ractor_bench_dir
21+
attr_reader :ruby, :ruby_description, :categories, :name_filters, :excludes, :out_path, :harness, :pre_init, :no_pinning, :bench_dir, :ractor_bench_dir
2222

23-
def initialize(ruby:, ruby_description:, categories:, name_filters:, out_path:, harness:, pre_init: nil, no_pinning: false)
23+
def initialize(ruby:, ruby_description:, categories:, name_filters:, excludes: [], out_path:, harness:, pre_init: nil, no_pinning: false)
2424
@ruby = ruby
2525
@ruby_description = ruby_description
2626
@categories = categories
2727
@name_filters = name_filters
28+
@excludes = excludes
2829
@out_path = out_path
2930
@harness = harness
3031
@pre_init = pre_init ? expand_pre_init(pre_init) : nil
@@ -148,6 +149,7 @@ def main_benchmark_filter
148149
@main_benchmark_filter ||= BenchmarkFilter.new(
149150
categories: categories,
150151
name_filters: name_filters,
152+
excludes: excludes,
151153
metadata: benchmarks_metadata
152154
)
153155
end
@@ -156,6 +158,7 @@ def ractor_benchmark_filter
156158
@ractor_benchmark_filter ||= BenchmarkFilter.new(
157159
categories: [],
158160
name_filters: name_filters,
161+
excludes: excludes,
159162
metadata: benchmarks_metadata
160163
)
161164
end

test/benchmark_filter_test.rb

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,73 +14,80 @@
1414

1515
describe '#match?' do
1616
it 'matches when no filters provided' do
17-
filter = BenchmarkFilter.new(categories: [], name_filters: [], metadata: @metadata)
17+
filter = BenchmarkFilter.new(categories: [], name_filters: [], excludes: [], metadata: @metadata)
1818

1919
assert_equal true, filter.match?('fib.rb')
2020
end
2121

2222
it 'matches by category' do
23-
filter = BenchmarkFilter.new(categories: ['micro'], name_filters: [], metadata: @metadata)
23+
filter = BenchmarkFilter.new(categories: ['micro'], name_filters: [], excludes: [], metadata: @metadata)
2424

2525
assert_equal true, filter.match?('fib.rb')
2626
assert_equal false, filter.match?('railsbench.rb')
2727
end
2828

2929
it 'matches by name filter' do
30-
filter = BenchmarkFilter.new(categories: [], name_filters: ['fib'], metadata: @metadata)
30+
filter = BenchmarkFilter.new(categories: [], name_filters: ['fib'], excludes: [], metadata: @metadata)
3131

3232
assert_equal true, filter.match?('fib.rb')
3333
assert_equal false, filter.match?('railsbench.rb')
3434
end
3535

36+
it 'applies excludes' do
37+
filter = BenchmarkFilter.new(categories: ['headline'], name_filters: [], excludes: ['railsbench'], metadata: @metadata)
38+
39+
assert_equal true, filter.match?('optcarrot.rb')
40+
assert_equal false, filter.match?('railsbench.rb')
41+
end
42+
3643
it 'matches ractor category' do
37-
filter = BenchmarkFilter.new(categories: ['ractor'], name_filters: [], metadata: @metadata)
44+
filter = BenchmarkFilter.new(categories: ['ractor'], name_filters: [], excludes: [], metadata: @metadata)
3845

3946
assert_equal true, filter.match?('ractor_bench.rb')
4047
end
4148

4249
it 'strips .rb extension from entry name' do
43-
filter = BenchmarkFilter.new(categories: [], name_filters: ['fib'], metadata: @metadata)
50+
filter = BenchmarkFilter.new(categories: [], name_filters: ['fib'], excludes: [], metadata: @metadata)
4451

4552
assert_equal true, filter.match?('fib.rb')
4653
end
4754

4855
it 'handles regex filters' do
49-
filter = BenchmarkFilter.new(categories: [], name_filters: ['/rails/'], metadata: @metadata)
56+
filter = BenchmarkFilter.new(categories: [], name_filters: ['/rails/'], excludes: [], metadata: @metadata)
5057

5158
assert_equal true, filter.match?('railsbench.rb')
5259
assert_equal false, filter.match?('fib.rb')
5360
end
5461

5562
it 'handles case-insensitive regex filters' do
56-
filter = BenchmarkFilter.new(categories: [], name_filters: ['/RAILS/i'], metadata: @metadata)
63+
filter = BenchmarkFilter.new(categories: [], name_filters: ['/RAILS/i'], excludes: [], metadata: @metadata)
5764

5865
assert_equal true, filter.match?('railsbench.rb')
5966
end
6067

6168
it 'handles multiple categories' do
62-
filter = BenchmarkFilter.new(categories: ['micro', 'headline'], name_filters: [], metadata: @metadata)
69+
filter = BenchmarkFilter.new(categories: ['micro', 'headline'], name_filters: [], excludes: [], metadata: @metadata)
6370

6471
assert_equal true, filter.match?('fib.rb')
6572
assert_equal true, filter.match?('railsbench.rb')
6673
end
6774

6875
it 'requires both category and name filter to match when both provided' do
69-
filter = BenchmarkFilter.new(categories: ['micro'], name_filters: ['rails'], metadata: @metadata)
76+
filter = BenchmarkFilter.new(categories: ['micro'], name_filters: ['rails'], excludes: [], metadata: @metadata)
7077

7178
assert_equal false, filter.match?('fib.rb') # matches category but not name
7279
assert_equal false, filter.match?('railsbench.rb') # matches name but not category
7380
end
7481

7582
it 'handles complex regex patterns' do
76-
filter = BenchmarkFilter.new(categories: [], name_filters: ['/opt.*rot/'], metadata: @metadata)
83+
filter = BenchmarkFilter.new(categories: [], name_filters: ['/opt.*rot/'], excludes: [], metadata: @metadata)
7784

7885
assert_equal true, filter.match?('optcarrot.rb')
7986
assert_equal false, filter.match?('fib.rb')
8087
end
8188

8289
it 'handles mixed string and regex filters' do
83-
filter = BenchmarkFilter.new(categories: [], name_filters: ['fib', '/rails/'], metadata: @metadata)
90+
filter = BenchmarkFilter.new(categories: [], name_filters: ['fib', '/rails/'], excludes: [], metadata: @metadata)
8491

8592
assert_equal true, filter.match?('fib.rb')
8693
assert_equal true, filter.match?('railsbench.rb')

test/benchmark_runner_cli_test.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def create_args(overrides = {})
4141
yjit_opts: '',
4242
categories: [],
4343
name_filters: [],
44+
excludes: [],
4445
rss: false,
4546
graph: false,
4647
no_pinning: true,

0 commit comments

Comments
 (0)