#ifndef FOLLY_BENCHMARK_H_
#define FOLLY_BENCHMARK_H_
+#include <folly/ScopeGuard.h>
#include <folly/Portability.h>
#include <folly/Preprocessor.h> // for FB_ANONYMOUS_VARIABLE
#include <cassert>
#include <glog/logging.h>
#include <gflags/gflags.h>
#include <limits>
+#include <type_traits>
DECLARE_bool(benchmark);
CHECK_EQ(0, clock_gettime(detail::DEFAULT_CLOCK_ID, &start));
}
+ template <class F>
+ auto dismissing(F f) -> typename std::result_of<F()>::type {
+ SCOPE_EXIT { rehire(); };
+ dismiss();
+ return f();
+ }
+
/**
* This is for use inside of if-conditions, used in BENCHMARK macros.
* If-conditions bypass the explicit on operator bool.
#pragma optimize("", on)
+#elif defined(__clang__)
+
+template <class T>
+__attribute__((__optnone__)) void doNotOptimizeAway(T&& datum) {
+}
+
#else
+
template <class T>
void doNotOptimizeAway(T&& datum) {
asm volatile("" : "+r" (datum));
}
+
#endif
} // namespace folly