Skip to content

Commit bf042be

Browse files
feat!(google_benchmark): improve location of valgrind trapdoors
1 parent a1db652 commit bf042be

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

google_benchmark/include/benchmark/benchmark.h

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,9 @@ class BENCHMARK_EXPORT BENCHMARK_INTERNAL_CACHELINE_ALIGNED State {
945945

946946
public:
947947
const IterationCount max_iterations;
948+
#ifdef CODSPEED_INSTRUMENTATION
949+
codspeed::CodSpeed *codspeed_;
950+
#endif
948951

949952
private:
950953
bool started_;
@@ -965,7 +968,12 @@ class BENCHMARK_EXPORT BENCHMARK_INTERNAL_CACHELINE_ALIGNED State {
965968
const std::vector<int64_t>& ranges, int thread_i, int n_threads,
966969
internal::ThreadTimer* timer, internal::ThreadManager* manager,
967970
internal::PerfCountersMeasurement* perf_counters_measurement,
968-
ProfilerManager* profiler_manager);
971+
ProfilerManager* profiler_manager
972+
#ifdef CODSPEED_INSTRUMENTATION
973+
,
974+
codspeed::CodSpeed *codspeed = NULL
975+
#endif
976+
);
969977

970978
void StartKeepRunning();
971979
// Implementation of KeepRunning() and KeepRunningBatch().
@@ -1055,6 +1063,11 @@ struct State::StateIterator {
10551063
BENCHMARK_ALWAYS_INLINE
10561064
bool operator!=(StateIterator const&) const {
10571065
if (BENCHMARK_BUILTIN_EXPECT(cached_ != 0, true)) return true;
1066+
#ifdef CODSPEED_INSTRUMENTATION
1067+
if (parent_->codspeed_ != NULL) {
1068+
parent_->codspeed_->end_benchmark();
1069+
}
1070+
#endif
10581071
parent_->FinishKeepRunning();
10591072
return false;
10601073
}
@@ -1065,15 +1078,15 @@ struct State::StateIterator {
10651078
};
10661079

10671080
inline BENCHMARK_ALWAYS_INLINE State::StateIterator State::begin() {
1068-
#ifdef CODSPEED_INSTRUMENTATION
1069-
codspeed::CodSpeed::getInstance()->start_benchmark(name());
1070-
#endif
10711081
return StateIterator(this);
10721082
}
10731083
inline BENCHMARK_ALWAYS_INLINE State::StateIterator State::end() {
10741084
StartKeepRunning();
10751085
#ifdef CODSPEED_INSTRUMENTATION
1076-
codspeed::CodSpeed::getInstance()->end_benchmark();
1086+
if (this->codspeed_ != NULL) {
1087+
auto name = this->name();
1088+
this->codspeed_->start_benchmark(name);
1089+
}
10771090
#endif
10781091
return StateIterator();
10791092
}

google_benchmark/src/benchmark.cc

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,18 @@ State::State(std::string name, IterationCount max_iters,
174174
const std::vector<int64_t>& ranges, int thread_i, int n_threads,
175175
internal::ThreadTimer* timer, internal::ThreadManager* manager,
176176
internal::PerfCountersMeasurement* perf_counters_measurement,
177-
ProfilerManager* profiler_manager)
177+
ProfilerManager* profiler_manager
178+
#ifdef CODSPEED_INSTRUMENTATION
179+
,
180+
codspeed::CodSpeed* codspeed
181+
#endif
182+
)
178183
: total_iterations_(0),
179184
batch_leftover_(0),
180185
max_iterations(max_iters),
186+
#ifdef CODSPEED_INSTRUMENTATION
187+
codspeed_(codspeed),
188+
#endif
181189
started_(false),
182190
finished_(false),
183191
skipped_(internal::NotSkipped),

google_benchmark/src/benchmark_api_internal.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,13 @@ State BenchmarkInstance::RunInstrumented(
102102

103103
internal::ThreadTimer warmup_timer = internal::ThreadTimer::Create();
104104
State warmup_state(name_.function_name, 1, args_, 0, 1, &warmup_timer,
105-
manager, perf_counters_measurement, profiler_manager);
105+
manager, perf_counters_measurement, profiler_manager,
106+
NULL);
106107
benchmark_.Run(warmup_state);
107108

108109
State st(name().str(), 1, args_, 0, 1, timer, manager,
109-
perf_counters_measurement, profiler_manager);
110+
perf_counters_measurement, profiler_manager, codspeed);
111+
;
110112
benchmark_.Run(st);
111113
return st;
112114
}

0 commit comments

Comments
 (0)