@@ -31,20 +31,31 @@ pub enum BenchmarkSetMember {
3131 CompileBenchmark ( BenchmarkName ) ,
3232}
3333
34- /// Return the number of benchmark sets for the given target.
35- pub fn benchmark_set_count ( target : Target ) -> usize {
36- match target {
37- Target :: X86_64UnknownLinuxGnu => 1 ,
34+ #[ derive( Debug ) ]
35+ pub struct BenchmarkSet {
36+ members : Vec < BenchmarkSetMember > ,
37+ }
38+
39+ impl BenchmarkSet {
40+ pub fn members ( & self ) -> & [ BenchmarkSetMember ] {
41+ & self . members
3842 }
3943}
4044
41- /// Expand all the benchmarks that should be performed by a single collector.
42- pub fn expand_benchmark_set ( id : BenchmarkSetId ) -> Vec < BenchmarkSetMember > {
45+ pub const BENCHMARK_SET_RUNTIME_BENCHMARKS : u32 = 0 ;
46+ pub const BENCHMARK_SET_RUSTC : u32 = 0 ;
47+
48+ /// Return all benchmark sets for the given target.
49+ pub fn get_benchmark_sets_for_target ( target : Target ) -> Vec < BenchmarkSet > {
4350 use compile_benchmarks:: * ;
4451
45- match ( id. target , id. index ) {
46- ( Target :: X86_64UnknownLinuxGnu , 0 ) => {
47- vec ! [
52+ fn compile ( name : & str ) -> BenchmarkSetMember {
53+ BenchmarkSetMember :: CompileBenchmark ( BenchmarkName :: from ( name) )
54+ }
55+
56+ match target {
57+ Target :: X86_64UnknownLinuxGnu => {
58+ let all = vec ! [
4859 compile( AWAIT_CALL_TREE ) ,
4960 compile( BITMAPS_3_2_1 ) ,
5061 compile( BITMAPS_3_2_1_NEW_SOLVER ) ,
@@ -106,24 +117,21 @@ pub fn expand_benchmark_set(id: BenchmarkSetId) -> Vec<BenchmarkSetMember> {
106117 compile( UNUSED_WARNINGS ) ,
107118 compile( WF_PROJECTION_STRESS_65510 ) ,
108119 compile( WG_GRAMMAR ) ,
109- ]
110- }
111- ( Target :: X86_64UnknownLinuxGnu , 1 ..) => {
112- panic ! ( "Unknown benchmark set id {id:?}" ) ;
120+ ] ;
121+ vec ! [ BenchmarkSet { members: all } ]
113122 }
114123 }
115124}
116125
117- /// Helper function for creating compile-time benchmark member sets.
118- fn compile ( name : & str ) -> BenchmarkSetMember {
119- BenchmarkSetMember :: CompileBenchmark ( BenchmarkName :: from ( name) )
126+ /// Expand all the benchmarks that should be performed by a single collector.
127+ pub fn get_benchmark_set ( id : BenchmarkSetId ) -> BenchmarkSet {
128+ let mut sets = get_benchmark_sets_for_target ( id. target ) ;
129+ sets. remove ( id. index as usize )
120130}
121131
122132#[ cfg( test) ]
123133mod tests {
124- use crate :: benchmark_set:: {
125- benchmark_set_count, expand_benchmark_set, BenchmarkSetId , BenchmarkSetMember ,
126- } ;
134+ use crate :: benchmark_set:: { get_benchmark_sets_for_target, BenchmarkSetMember } ;
127135 use crate :: compile:: benchmark:: target:: Target ;
128136 use crate :: compile:: benchmark:: {
129137 get_compile_benchmarks, BenchmarkName , CompileBenchmarkFilter ,
@@ -135,21 +143,13 @@ mod tests {
135143 /// complete, i.e. they don't miss any benchmarks.
136144 #[ test]
137145 fn check_benchmark_set_x64 ( ) {
138- let target = Target :: X86_64UnknownLinuxGnu ;
139- let sets = ( 0 ..benchmark_set_count ( target) )
140- . map ( |index| {
141- expand_benchmark_set ( BenchmarkSetId {
142- target,
143- index : index as u32 ,
144- } )
145- } )
146- . collect :: < Vec < Vec < BenchmarkSetMember > > > ( ) ;
146+ let sets = get_benchmark_sets_for_target ( Target :: X86_64UnknownLinuxGnu ) ;
147147
148148 // Assert set is unique
149149 for set in & sets {
150- let hashset = set. iter ( ) . collect :: < HashSet < _ > > ( ) ;
150+ let hashset = set. members ( ) . iter ( ) . collect :: < HashSet < _ > > ( ) ;
151151 assert_eq ! (
152- set. len( ) ,
152+ set. members ( ) . len( ) ,
153153 hashset. len( ) ,
154154 "Benchmark set {set:?} contains duplicates"
155155 ) ;
@@ -160,8 +160,8 @@ mod tests {
160160 for j in i + 1 ..sets. len ( ) {
161161 let set_a = & sets[ i] ;
162162 let set_b = & sets[ j] ;
163- let hashset_a = set_a. iter ( ) . collect :: < HashSet < _ > > ( ) ;
164- let hashset_b = set_b. iter ( ) . collect :: < HashSet < _ > > ( ) ;
163+ let hashset_a = set_a. members ( ) . iter ( ) . collect :: < HashSet < _ > > ( ) ;
164+ let hashset_b = set_b. members ( ) . iter ( ) . collect :: < HashSet < _ > > ( ) ;
165165 assert ! (
166166 hashset_a. is_disjoint( & hashset_b) ,
167167 "Benchmark sets {set_a:?} and {set_b:?} overlap"
@@ -170,7 +170,10 @@ mod tests {
170170 }
171171
172172 // Check that the union of all sets contains all the required benchmarks
173- let all_members = sets. iter ( ) . flatten ( ) . collect :: < HashSet < _ > > ( ) ;
173+ let all_members = sets
174+ . iter ( )
175+ . flat_map ( |s| s. members ( ) )
176+ . collect :: < HashSet < _ > > ( ) ;
174177
175178 const BENCHMARK_DIR : & str = concat ! ( env!( "CARGO_MANIFEST_DIR" ) , "/compile-benchmarks" ) ;
176179 let all_compile_benchmarks =
@@ -189,7 +192,7 @@ mod tests {
189192 let BenchmarkSetMember :: CompileBenchmark ( name) = benchmark;
190193 assert ! (
191194 all_compile_benchmarks. contains( name) ,
192- "Compile-time benchmark {name} does not exist on disk or is a stable benchmark "
195+ "Compile-time benchmark {name} does not exist on disk"
193196 ) ;
194197 }
195198 assert_eq ! ( all_members. len( ) , all_compile_benchmarks. len( ) ) ;
0 commit comments