@@ -387,10 +387,12 @@ class BenchmarkImp {
387387 void ComplexityLambda (BigOFunc* complexity);
388388 void Threads (int t);
389389 void ThreadRange (int min_threads, int max_threads);
390+ void ThreadRange2 (int min_threads, int max_threads);
390391 void ThreadPerCpu ();
391392 void SetName (const char * name);
392393
393394 static void AddRange (std::vector<int >* dst, int lo, int hi, int mult);
395+ static void AddRange2 (std::vector<int >* dst, int lo, int hi, int stride);
394396
395397 int ArgsCnt () const { return args_.empty () ? -1 : static_cast <int >(args_.front ().size ()); }
396398
@@ -642,6 +644,13 @@ void BenchmarkImp::ThreadRange(int min_threads, int max_threads) {
642644 AddRange (&thread_counts_, min_threads, max_threads, 2 );
643645}
644646
647+ void BenchmarkImp::ThreadRange2 (int min_threads, int max_threads) {
648+ CHECK_GT (min_threads, 0 );
649+ CHECK_GE (max_threads, min_threads);
650+
651+ AddRange2 (&thread_counts_, min_threads, max_threads, 1 );
652+ }
653+
645654void BenchmarkImp::ThreadPerCpu () {
646655 static int num_cpus = NumCPUs ();
647656 thread_counts_.push_back (num_cpus);
@@ -674,6 +683,17 @@ void BenchmarkImp::AddRange(std::vector<int>* dst, int lo, int hi, int mult) {
674683 }
675684}
676685
686+ void BenchmarkImp::AddRange2 (std::vector<int >* dst, int lo, int hi, int stride) {
687+ CHECK_GE (lo, 0 );
688+ CHECK_GE (hi, lo);
689+ CHECK_GE (stride, 1 );
690+
691+ for (auto i = lo; i < hi; i += stride) {
692+ dst->push_back (i);
693+ }
694+ dst->push_back (hi);
695+ }
696+
677697Benchmark::Benchmark (const char * name)
678698 : imp_(new BenchmarkImp(name))
679699{
@@ -781,6 +801,11 @@ Benchmark* Benchmark::ThreadRange(int min_threads, int max_threads) {
781801 return this ;
782802}
783803
804+ Benchmark* Benchmark::ThreadRange2 (int min_threads, int max_threads) {
805+ imp_->ThreadRange2 (min_threads, max_threads);
806+ return this ;
807+ }
808+
784809Benchmark* Benchmark::ThreadPerCpu () {
785810 imp_->ThreadPerCpu ();
786811 return this ;
0 commit comments