Split up FibersTest into test and Benchmark.
authorMichael Lee <mzlee@fb.com>
Tue, 16 Aug 2016 23:47:09 +0000 (16:47 -0700)
committerFacebook Github Bot 2 <facebook-github-bot-2-bot@fb.com>
Tue, 16 Aug 2016 23:53:29 +0000 (16:53 -0700)
Summary: And clean up the extra main.cpp

Reviewed By: yfeldblum

Differential Revision: D3717445

fbshipit-source-id: 2a5d554824c454b5339514d0d4ca7ae9474abdb9

folly/fibers/FiberManager.h
folly/fibers/test/FibersBenchmark.cpp [new file with mode: 0644]
folly/fibers/test/FibersTest.cpp
folly/fibers/test/main.cpp [deleted file]

index 25ee78c1eb8ea6ca65817402c29ed16610b203bc..558dce6fa8be44be107cd9760491fe927d749a91 100644 (file)
@@ -570,4 +570,4 @@ inline void yield() {
 }
 }
 
 }
 }
 
-#include "FiberManager-inl.h"
+#include <folly/fibers/FiberManager-inl.h>
diff --git a/folly/fibers/test/FibersBenchmark.cpp b/folly/fibers/test/FibersBenchmark.cpp
new file mode 100644 (file)
index 0000000..8bd9d96
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2016 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <folly/fibers/FiberManager.h>
+#include <folly/fibers/FiberManagerMap.h>
+
+#include <queue>
+
+#include <folly/Benchmark.h>
+#include <folly/fibers/SimpleLoopController.h>
+#include <folly/init/Init.h>
+#include <folly/io/async/EventBase.h>
+
+using namespace folly::fibers;
+
+static size_t sNumAwaits;
+
+void runBenchmark(size_t numAwaits, size_t toSend) {
+  sNumAwaits = numAwaits;
+
+  FiberManager fiberManager(folly::make_unique<SimpleLoopController>());
+  auto& loopController =
+      dynamic_cast<SimpleLoopController&>(fiberManager.loopController());
+
+  std::queue<Promise<int>> pendingRequests;
+  static const size_t maxOutstanding = 5;
+
+  auto loop = [&fiberManager, &loopController, &pendingRequests, &toSend]() {
+    if (pendingRequests.size() == maxOutstanding || toSend == 0) {
+      if (pendingRequests.empty()) {
+        return;
+      }
+      pendingRequests.front().setValue(0);
+      pendingRequests.pop();
+    } else {
+      fiberManager.addTask([&pendingRequests]() {
+        for (size_t i = 0; i < sNumAwaits; ++i) {
+          auto result = await([&pendingRequests](Promise<int> promise) {
+            pendingRequests.push(std::move(promise));
+          });
+          DCHECK_EQ(result, 0);
+        }
+      });
+
+      if (--toSend == 0) {
+        loopController.stop();
+      }
+    }
+  };
+
+  loopController.loop(std::move(loop));
+}
+
+BENCHMARK(FiberManagerBasicOneAwait, iters) {
+  runBenchmark(1, iters);
+}
+
+BENCHMARK(FiberManagerBasicFiveAwaits, iters) {
+  runBenchmark(5, iters);
+}
+
+BENCHMARK(FiberManagerCreateDestroy, iters) {
+  for (size_t i = 0; i < iters; ++i) {
+    folly::EventBase evb;
+    auto& fm = folly::fibers::getFiberManager(evb);
+    fm.addTask([]() {});
+    evb.loop();
+  }
+}
+
+BENCHMARK(FiberManagerAllocateDeallocatePattern, iters) {
+  static const size_t kNumAllocations = 10000;
+
+  FiberManager::Options opts;
+  opts.maxFibersPoolSize = 0;
+
+  FiberManager fiberManager(folly::make_unique<SimpleLoopController>(), opts);
+
+  for (size_t iter = 0; iter < iters; ++iter) {
+    DCHECK_EQ(0, fiberManager.fibersPoolSize());
+
+    size_t fibersRun = 0;
+
+    for (size_t i = 0; i < kNumAllocations; ++i) {
+      fiberManager.addTask([&fibersRun] { ++fibersRun; });
+      fiberManager.loopUntilNoReady();
+    }
+
+    DCHECK_EQ(10000, fibersRun);
+    DCHECK_EQ(0, fiberManager.fibersPoolSize());
+  }
+}
+
+BENCHMARK(FiberManagerAllocateLargeChunk, iters) {
+  static const size_t kNumAllocations = 10000;
+
+  FiberManager::Options opts;
+  opts.maxFibersPoolSize = 0;
+
+  FiberManager fiberManager(folly::make_unique<SimpleLoopController>(), opts);
+
+  for (size_t iter = 0; iter < iters; ++iter) {
+    DCHECK_EQ(0, fiberManager.fibersPoolSize());
+
+    size_t fibersRun = 0;
+
+    for (size_t i = 0; i < kNumAllocations; ++i) {
+      fiberManager.addTask([&fibersRun] { ++fibersRun; });
+    }
+
+    fiberManager.loopUntilNoReady();
+
+    DCHECK_EQ(10000, fibersRun);
+    DCHECK_EQ(0, fiberManager.fibersPoolSize());
+  }
+}
+
+int main(int argc, char** argv) {
+  folly::init(&argc, &argv, true);
+
+  folly::runBenchmarks();
+  return 0;
+}
index e962145aeaa5d24970ce4db72510257aba0693bf..dcdd5d790f6cd2ee08680bdde2cf9e6cfd2adcaa 100644 (file)
@@ -19,7 +19,6 @@
 
 #include <gtest/gtest.h>
 
 
 #include <gtest/gtest.h>
 
-#include <folly/Benchmark.h>
 #include <folly/Memory.h>
 #include <folly/futures/Future.h>
 
 #include <folly/Memory.h>
 #include <folly/futures/Future.h>
 
@@ -1540,105 +1539,3 @@ TEST(FiberManager, nestedFiberManagers) {
 
   outerEvb.loopForever();
 }
 
   outerEvb.loopForever();
 }
-
-static size_t sNumAwaits;
-
-void runBenchmark(size_t numAwaits, size_t toSend) {
-  sNumAwaits = numAwaits;
-
-  FiberManager fiberManager(folly::make_unique<SimpleLoopController>());
-  auto& loopController =
-      dynamic_cast<SimpleLoopController&>(fiberManager.loopController());
-
-  std::queue<Promise<int>> pendingRequests;
-  static const size_t maxOutstanding = 5;
-
-  auto loop = [&fiberManager, &loopController, &pendingRequests, &toSend]() {
-    if (pendingRequests.size() == maxOutstanding || toSend == 0) {
-      if (pendingRequests.empty()) {
-        return;
-      }
-      pendingRequests.front().setValue(0);
-      pendingRequests.pop();
-    } else {
-      fiberManager.addTask([&pendingRequests]() {
-        for (size_t i = 0; i < sNumAwaits; ++i) {
-          auto result = await([&pendingRequests](Promise<int> promise) {
-            pendingRequests.push(std::move(promise));
-          });
-          DCHECK_EQ(result, 0);
-        }
-      });
-
-      if (--toSend == 0) {
-        loopController.stop();
-      }
-    }
-  };
-
-  loopController.loop(std::move(loop));
-}
-
-BENCHMARK(FiberManagerBasicOneAwait, iters) {
-  runBenchmark(1, iters);
-}
-
-BENCHMARK(FiberManagerBasicFiveAwaits, iters) {
-  runBenchmark(5, iters);
-}
-
-BENCHMARK(FiberManagerCreateDestroy, iters) {
-  for (size_t i = 0; i < iters; ++i) {
-    folly::EventBase evb;
-    auto& fm = folly::fibers::getFiberManager(evb);
-    fm.addTask([]() {});
-    evb.loop();
-  }
-}
-
-BENCHMARK(FiberManagerAllocateDeallocatePattern, iters) {
-  static const size_t kNumAllocations = 10000;
-
-  FiberManager::Options opts;
-  opts.maxFibersPoolSize = 0;
-
-  FiberManager fiberManager(folly::make_unique<SimpleLoopController>(), opts);
-
-  for (size_t iter = 0; iter < iters; ++iter) {
-    EXPECT_EQ(0, fiberManager.fibersPoolSize());
-
-    size_t fibersRun = 0;
-
-    for (size_t i = 0; i < kNumAllocations; ++i) {
-      fiberManager.addTask([&fibersRun] { ++fibersRun; });
-      fiberManager.loopUntilNoReady();
-    }
-
-    EXPECT_EQ(10000, fibersRun);
-    EXPECT_EQ(0, fiberManager.fibersPoolSize());
-  }
-}
-
-BENCHMARK(FiberManagerAllocateLargeChunk, iters) {
-  static const size_t kNumAllocations = 10000;
-
-  FiberManager::Options opts;
-  opts.maxFibersPoolSize = 0;
-
-  FiberManager fiberManager(folly::make_unique<SimpleLoopController>(), opts);
-
-  for (size_t iter = 0; iter < iters; ++iter) {
-    EXPECT_EQ(0, fiberManager.fibersPoolSize());
-
-    size_t fibersRun = 0;
-
-    for (size_t i = 0; i < kNumAllocations; ++i) {
-      fiberManager.addTask([&fibersRun] { ++fibersRun; });
-    }
-
-    fiberManager.loopUntilNoReady();
-
-    EXPECT_EQ(10000, fibersRun);
-    EXPECT_EQ(0, fiberManager.fibersPoolSize());
-  }
-}
diff --git a/folly/fibers/test/main.cpp b/folly/fibers/test/main.cpp
deleted file mode 100644 (file)
index ac94a9e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2016 Facebook, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <gtest/gtest.h>
-
-#include <folly/Benchmark.h>
-
-// for backward compatibility with gflags
-namespace gflags {}
-namespace google {
-using namespace gflags;
-}
-
-int main(int argc, char** argv) {
-  testing::InitGoogleTest(&argc, argv);
-  gflags::ParseCommandLineFlags(&argc, &argv, true);
-
-  auto rc = RUN_ALL_TESTS();
-  folly::runBenchmarksOnFlag();
-  return rc;
-}