Index: mojo/public/c/environment/tests/async_waiter_perftest_helpers.cc |
diff --git a/mojo/public/c/environment/tests/async_waiter_perftest_helpers.cc b/mojo/public/c/environment/tests/async_waiter_perftest_helpers.cc |
deleted file mode 100644 |
index 2af95be339482faee368f25ff4c1d6e3824c3e69..0000000000000000000000000000000000000000 |
--- a/mojo/public/c/environment/tests/async_waiter_perftest_helpers.cc |
+++ /dev/null |
@@ -1,136 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "mojo/public/c/environment/tests/async_waiter_perftest_helpers.h" |
- |
-#include <assert.h> |
-#include <mojo/system/handle.h> |
-#include <mojo/system/message_pipe.h> |
- |
-#include <vector> |
- |
-#include "mojo/public/cpp/system/macros.h" |
- |
-#undef CHECK_OK |
-#ifdef NDEBUG |
-#define CHECK_OK(result) \ |
- do { \ |
- (void)result; \ |
- } while (false) |
-#else |
-#define CHECK_OK(result) \ |
- do { \ |
- MojoResult result_internal = (result); \ |
- assert(result_internal == MOJO_RESULT_OK); \ |
- } while (false) |
-#endif |
- |
-namespace mojo { |
-namespace test { |
-namespace { |
- |
-class AsyncWaiterPerfTest { |
- public: |
- explicit AsyncWaiterPerfTest(const MojoAsyncWaiter* async_waiter, |
- uint32_t num_handles, |
- std::function<void()> run_loop_function) |
- : async_waiter_(async_waiter), |
- num_handles_(num_handles), |
- run_loop_function_(run_loop_function), |
- handle0s_(num_handles, MOJO_HANDLE_INVALID), |
- handle1s_(num_handles, MOJO_HANDLE_INVALID), |
- contexts_(num_handles) {} |
- ~AsyncWaiterPerfTest() {} |
- |
- uint64_t DoIt() { |
- for (uint32_t i = 0; i < num_handles_; i++) { |
- CHECK_OK(MojoCreateMessagePipe(nullptr, &handle0s_[i], &handle1s_[i])); |
- AddAsyncWaiter(i); |
- } |
- |
- // "Signal" the first async wait (i.e., write a message). |
- CHECK_OK(MojoWriteMessage(handle1s_[0], nullptr, 0, nullptr, 0, |
- MOJO_WRITE_MESSAGE_FLAG_NONE)); |
- |
- run_loop_function_(); |
- |
- for (uint32_t i = 0; i < num_handles_; i++) { |
- CancelAsyncWaiter(i); |
- CHECK_OK(MojoClose(handle0s_[i])); |
- CHECK_OK(MojoClose(handle1s_[i])); |
- } |
- |
- return callback_count_; |
- } |
- |
- private: |
- struct Context { |
- AsyncWaiterPerfTest* thiz = nullptr; |
- uint32_t index = 0; |
- MojoAsyncWaitID id = 0; |
- }; |
- |
- void AddAsyncWaiter(uint32_t index) { |
- assert(index < num_handles_); |
- |
- Context& context = contexts_[index]; |
- context.thiz = this; |
- context.index = index; |
- context.id = async_waiter_->AsyncWait( |
- handle0s_[index], MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE, |
- &AsyncWaiterPerfTest::AsyncWaitCallbackThunk, &context); |
- } |
- |
- void CancelAsyncWaiter(uint32_t index) { |
- async_waiter_->CancelWait(contexts_[index].id); |
- } |
- |
- static void AsyncWaitCallbackThunk(void* closure, MojoResult result) { |
- CHECK_OK(result); |
- auto context = static_cast<Context*>(closure); |
- context->thiz->AsyncWaitCallback(context); |
- } |
- |
- void AsyncWaitCallback(Context* context) { |
- callback_count_++; |
- |
- uint32_t index = context->index; |
- |
- // "Unsignal" (i.e., consume a message)). |
- CHECK_OK(MojoReadMessage(handle0s_[index], nullptr, nullptr, nullptr, |
- nullptr, MOJO_READ_MESSAGE_FLAG_MAY_DISCARD)); |
- |
- // Replace ourself. |
- AddAsyncWaiter(index); |
- |
- // "Signal" the next one (i.e., write a message). |
- CHECK_OK(MojoWriteMessage(handle1s_[(index + 1) % num_handles_], nullptr, 0, |
- nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE)); |
- } |
- |
- const MojoAsyncWaiter* const async_waiter_; |
- const uint32_t num_handles_; |
- const std::function<void()> run_loop_function_; |
- |
- // We'll always wait on the |handle0s_| and "signal" from the |handle1s_|. |
- std::vector<MojoHandle> handle0s_; |
- std::vector<MojoHandle> handle1s_; |
- std::vector<Context> contexts_; |
- |
- uint64_t callback_count_ = 0; |
- |
- MOJO_DISALLOW_COPY_AND_ASSIGN(AsyncWaiterPerfTest); |
-}; |
- |
-} // namespace |
- |
-uint64_t DoAsyncWaiterPerfTest(const MojoAsyncWaiter* async_waiter, |
- uint32_t num_handles, |
- std::function<void()> run_loop_function) { |
- return AsyncWaiterPerfTest(async_waiter, num_handles, run_loop_function) |
- .DoIt(); |
-} |
- |
-} // namespace test |
-} // namespace mojo |