2 * Copyright 2015-present Facebook, Inc.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 #include <folly/Benchmark.h>
17 #include <folly/io/async/EventBase.h>
18 #include <folly/portability/GFlags.h>
20 using namespace folly;
22 class CountedLoopCallback : public EventBase::LoopCallback {
24 CountedLoopCallback(EventBase* eventBase, unsigned int count)
25 : eventBase_(eventBase)
28 void runLoopCallback() noexcept override {
31 eventBase_->runInLoop(this);
36 EventBase* eventBase_;
40 BENCHMARK(timeMeasurementsOn, n) {
44 CountedLoopCallback c(&eventBase, 10);
45 eventBase.runInLoop(&c);
50 BENCHMARK_RELATIVE(timeMeasurementsOff, n) {
51 EventBase eventBase(/* enableTimeMeasurement */ false);
54 CountedLoopCallback c(&eventBase, 10);
55 eventBase.runInLoop(&c);
61 * --bm_min_iters=1000000
63 * ============================================================================
64 * folly/io/async/test/EventBaseBenchmark.cpp relative time/iter iters/s
65 * ============================================================================
66 * timeMeasurementsOn 1.25us 798.33K
67 * timeMeasurementsOff 214.47% 584.04ns 1.71M
68 * ============================================================================
71 int main(int argc, char** argv) {
72 gflags::ParseCommandLineFlags(&argc, &argv, true);