Skip to content

Commit b457d0c

Browse files
authored
Merge f9e71dd into 61f570e
2 parents 61f570e + f9e71dd commit b457d0c

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

include/benchmark/benchmark_api.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,8 @@ class Benchmark {
600600
// Foo in 16 threads
601601
Benchmark* ThreadRange(int min_threads, int max_threads);
602602

603+
Benchmark* ThreadRange2(int min_threads, int max_threads);
604+
603605
// Equivalent to ThreadRange(NumCPUs(), NumCPUs())
604606
Benchmark* ThreadPerCpu();
605607

src/benchmark.cc

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
645654
void 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+
677697
Benchmark::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+
784809
Benchmark* Benchmark::ThreadPerCpu() {
785810
imp_->ThreadPerCpu();
786811
return this;

0 commit comments

Comments
 (0)