diff --git a/system/ulib/fit/include/lib/fit/bridge.h b/system/ulib/fit/include/lib/fit/bridge.h index 114762e281ebd8d8a95a5a4fe2b9de12904b0be6..3fed908d34c61eaae41c32407601e57354f5ec65 100644 --- a/system/ulib/fit/include/lib/fit/bridge.h +++ b/system/ulib/fit/include/lib/fit/bridge.h @@ -453,7 +453,7 @@ private: // private: // // The model is responsible for initializing and running its own // // executor (perhaps on its own thread). -// fit::sequential_executor executor_; +// fit::single_threaded_executor executor_; // }; // // // Asks the model to perform a calculation, awaits a result on the diff --git a/system/ulib/fit/include/lib/fit/promise.h b/system/ulib/fit/include/lib/fit/promise.h index 7ef9c44adfa6dd5ff890631b06e2fc02d905fe4e..ece9e75b3bc558275ada4546436f5b6d375a4580 100644 --- a/system/ulib/fit/include/lib/fit/promise.h +++ b/system/ulib/fit/include/lib/fit/promise.h @@ -137,7 +137,7 @@ namespace fit { // suspended tasks and destroys the task because it is not possible for the task // to be resumed or to make progress from that state. // -// See also |fit::sequential_executor| for a simple executor implementation. +// See also |fit::single_threaded_executor| for a simple executor implementation. // // BOXED AND UNBOXED PROMISES // @@ -1397,7 +1397,7 @@ protected: // a single thread whereas another might dispatch them on an event-driven // message loop or use a thread pool. // -// See also |fit::sequential_executor| for a concrete implementation. +// See also |fit::single_threaded_executor| for a concrete implementation. class executor { public: // Destroys the executor along with all of its remaining scheduled tasks diff --git a/system/ulib/fit/include/lib/fit/scheduler.h b/system/ulib/fit/include/lib/fit/scheduler.h index 64d32da207973db1cbcd3ad24dc9625aa0be909f..e2eb42eac3d3311579a32579aebfb149bc5b9d9c 100644 --- a/system/ulib/fit/include/lib/fit/scheduler.h +++ b/system/ulib/fit/include/lib/fit/scheduler.h @@ -16,7 +16,7 @@ namespace subtle { // Keeps track of runnable and suspended tasks. // This is a low-level building block for implementing executors. -// For a concrete implementation, see |fit::sequential_executor|. +// For a concrete implementation, see |fit::single_threaded_executor|. // // Instances of this object are not thread-safe. Its client is responsible // for providing all necessary synchronization. diff --git a/system/ulib/fit/include/lib/fit/sequential_executor.h b/system/ulib/fit/include/lib/fit/single_threaded_executor.h similarity index 78% rename from system/ulib/fit/include/lib/fit/sequential_executor.h rename to system/ulib/fit/include/lib/fit/single_threaded_executor.h index 44f00d2cd87e6cea3c31c4cab897276fb7ecd130..09d07b31e3472b555c71556d1c5a185d652a45f0 100644 --- a/system/ulib/fit/include/lib/fit/sequential_executor.h +++ b/system/ulib/fit/include/lib/fit/single_threaded_executor.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef LIB_FIT_SEQUENTIAL_EXECUTOR_H_ -#define LIB_FIT_SEQUENTIAL_EXECUTOR_H_ +#ifndef LIB_FIT_SINGLE_THREADED_EXECUTOR_H_ +#define LIB_FIT_SINGLE_THREADED_EXECUTOR_H_ #include <condition_variable> #include <mutex> @@ -22,13 +22,13 @@ namespace fit { // fewer features than more specialized or platform-dependent executors. // // See documentation of |fit::promise| for more information. -class sequential_executor final : public executor { +class single_threaded_executor final : public executor { public: - sequential_executor(); + single_threaded_executor(); // Destroys the executor along with all of its remaining scheduled tasks // that have yet to complete. - ~sequential_executor() override; + ~single_threaded_executor() override; // Schedules a task for eventual execution by the executor. // @@ -42,23 +42,23 @@ public: // thread at a time. void run(); - sequential_executor(const sequential_executor&) = delete; - sequential_executor(sequential_executor&&) = delete; - sequential_executor& operator=(const sequential_executor&) = delete; - sequential_executor& operator=(sequential_executor&&) = delete; + single_threaded_executor(const single_threaded_executor&) = delete; + single_threaded_executor(single_threaded_executor&&) = delete; + single_threaded_executor& operator=(const single_threaded_executor&) = delete; + single_threaded_executor& operator=(single_threaded_executor&&) = delete; private: // The task context for tasks run by the executor. class context_impl final : public context { public: - explicit context_impl(sequential_executor* executor); + explicit context_impl(single_threaded_executor* executor); ~context_impl() override; - sequential_executor* executor() const override; + single_threaded_executor* executor() const override; suspended_task suspend_task() override; private: - sequential_executor* const executor_; + single_threaded_executor* const executor_; }; // The dispatcher runs tasks and provides the suspended task resolver. @@ -66,7 +66,7 @@ private: // The lifetime of this object is somewhat complex since there are pointers // to it from multiple sources which are released in different ways. // - // - |sequential_executor| holds a pointer in |dispatcher_| which it releases + // - |single_threaded_executor| holds a pointer in |dispatcher_| which it releases // after calling |shutdown()| to inform the dispatcher of its own demise // - |suspended_task| holds a pointer to the dispatcher's resolver // interface and the number of outstanding pointers corresponds to the @@ -110,14 +110,14 @@ private: dispatcher_impl* dispatcher_; }; -// Creates a new |fit::sequential_executor|, schedules a promise as a task, +// Creates a new |fit::single_threaded_executor|, schedules a promise as a task, // runs all of the executor's scheduled tasks until none remain, then returns // the promise's result. template <typename Continuation> static typename promise_impl<Continuation>::result_type -run_sequentially(promise_impl<Continuation> promise) { +run_single_threaded(promise_impl<Continuation> promise) { using result_type = typename promise_impl<Continuation>::result_type; - sequential_executor exec; + single_threaded_executor exec; result_type saved_result; exec.schedule_task(promise.then([&saved_result](result_type result) { saved_result = std::move(result); @@ -128,4 +128,4 @@ run_sequentially(promise_impl<Continuation> promise) { } // namespace fit -#endif // LIB_FIT_SEQUENTIAL_EXECUTOR_H_ +#endif // LIB_FIT_SINGLE_THREADED_EXECUTOR_H_ diff --git a/system/ulib/fit/rules.mk b/system/ulib/fit/rules.mk index 0f1de2110fd5a6a448ded7c72a36d4ab03f16d61..a561f7bfe0750da040838ab84df131887bb8effe 100644 --- a/system/ulib/fit/rules.mk +++ b/system/ulib/fit/rules.mk @@ -7,7 +7,7 @@ LOCAL_DIR := $(GET_LOCAL_DIR) fit_srcs := \ $(LOCAL_DIR)/empty.c \ $(LOCAL_DIR)/promise.cpp \ - $(LOCAL_DIR)/sequential_executor.cpp \ + $(LOCAL_DIR)/single_threaded_executor.cpp \ $(LOCAL_DIR)/scheduler.cpp \ # diff --git a/system/ulib/fit/sequential_executor.cpp b/system/ulib/fit/single_threaded_executor.cpp similarity index 78% rename from system/ulib/fit/sequential_executor.cpp rename to system/ulib/fit/single_threaded_executor.cpp index 2a2230f3c83cfb78aa2c669bef872c32ed61b855..3064220122620e8fbc05ee236c033bf972739af8 100644 --- a/system/ulib/fit/sequential_executor.cpp +++ b/system/ulib/fit/single_threaded_executor.cpp @@ -5,42 +5,42 @@ // Can't compile this for Zircon userspace yet since libstdc++ isn't available. #ifndef FIT_NO_STD_FOR_ZIRCON_USERSPACE -#include <lib/fit/sequential_executor.h> +#include <lib/fit/single_threaded_executor.h> namespace fit { -sequential_executor::sequential_executor() +single_threaded_executor::single_threaded_executor() : context_(this), dispatcher_(new dispatcher_impl()) {} -sequential_executor::~sequential_executor() { +single_threaded_executor::~single_threaded_executor() { dispatcher_->shutdown(); } -void sequential_executor::schedule_task(pending_task task) { +void single_threaded_executor::schedule_task(pending_task task) { assert(task); dispatcher_->schedule_task(std::move(task)); } -void sequential_executor::run() { +void single_threaded_executor::run() { dispatcher_->run(context_); } -sequential_executor::context_impl::context_impl(sequential_executor* executor) +single_threaded_executor::context_impl::context_impl(single_threaded_executor* executor) : executor_(executor) {} -sequential_executor::context_impl::~context_impl() = default; +single_threaded_executor::context_impl::~context_impl() = default; -sequential_executor* sequential_executor::context_impl::executor() const { +single_threaded_executor* single_threaded_executor::context_impl::executor() const { return executor_; } -suspended_task sequential_executor::context_impl::suspend_task() { +suspended_task single_threaded_executor::context_impl::suspend_task() { return executor_->dispatcher_->suspend_current_task(); } -sequential_executor::dispatcher_impl::dispatcher_impl() = default; +single_threaded_executor::dispatcher_impl::dispatcher_impl() = default; -sequential_executor::dispatcher_impl::~dispatcher_impl() { +single_threaded_executor::dispatcher_impl::~dispatcher_impl() { std::lock_guard<std::mutex> lock(guarded_.mutex_); assert(guarded_.was_shutdown_); assert(!guarded_.scheduler_.has_runnable_tasks()); @@ -48,7 +48,7 @@ sequential_executor::dispatcher_impl::~dispatcher_impl() { assert(!guarded_.scheduler_.has_outstanding_tickets()); } -void sequential_executor::dispatcher_impl::shutdown() { +void single_threaded_executor::dispatcher_impl::shutdown() { fit::subtle::scheduler::task_queue tasks; // drop outside of the lock { std::lock_guard<std::mutex> lock(guarded_.mutex_); @@ -64,7 +64,7 @@ void sequential_executor::dispatcher_impl::shutdown() { delete this; } -void sequential_executor::dispatcher_impl::schedule_task(pending_task task) { +void single_threaded_executor::dispatcher_impl::schedule_task(pending_task task) { { std::lock_guard<std::mutex> lock(guarded_.mutex_); assert(!guarded_.was_shutdown_); @@ -79,7 +79,7 @@ void sequential_executor::dispatcher_impl::schedule_task(pending_task task) { wake_.notify_one(); } -void sequential_executor::dispatcher_impl::run(context_impl& context) { +void single_threaded_executor::dispatcher_impl::run(context_impl& context) { fit::subtle::scheduler::task_queue tasks; for (;;) { wait_for_runnable_tasks(&tasks); @@ -97,7 +97,7 @@ void sequential_executor::dispatcher_impl::run(context_impl& context) { // Must only be called while |run_task()| is running a task. // This happens when the task's continuation calls |context::suspend_task()| // upon the context it received as an argument. -suspended_task sequential_executor::dispatcher_impl::suspend_current_task() { +suspended_task single_threaded_executor::dispatcher_impl::suspend_current_task() { std::lock_guard<std::mutex> lock(guarded_.mutex_); assert(!guarded_.was_shutdown_); if (current_task_ticket_ == 0) { @@ -110,7 +110,7 @@ suspended_task sequential_executor::dispatcher_impl::suspend_current_task() { } // Unfortunately std::unique_lock does not support thread-safety annotations -void sequential_executor::dispatcher_impl::wait_for_runnable_tasks( +void single_threaded_executor::dispatcher_impl::wait_for_runnable_tasks( fit::subtle::scheduler::task_queue* out_tasks) FIT_NO_THREAD_SAFETY_ANALYSIS { std::unique_lock<std::mutex> lock(guarded_.mutex_); for (;;) { @@ -128,8 +128,8 @@ void sequential_executor::dispatcher_impl::wait_for_runnable_tasks( } } -void sequential_executor::dispatcher_impl::run_task(pending_task* task, - context& context) { +void single_threaded_executor::dispatcher_impl::run_task(pending_task* task, + context& context) { assert(current_task_ticket_ == 0); const bool finished = (*task)(context); assert(!*task == finished); @@ -144,14 +144,14 @@ void sequential_executor::dispatcher_impl::run_task(pending_task* task, current_task_ticket_ = 0; } -suspended_task::ticket sequential_executor::dispatcher_impl::duplicate_ticket( +suspended_task::ticket single_threaded_executor::dispatcher_impl::duplicate_ticket( suspended_task::ticket ticket) { std::lock_guard<std::mutex> lock(guarded_.mutex_); guarded_.scheduler_.duplicate_ticket(ticket); return ticket; } -void sequential_executor::dispatcher_impl::resolve_ticket( +void single_threaded_executor::dispatcher_impl::resolve_ticket( suspended_task::ticket ticket, bool resume_task) { pending_task abandoned_task; // drop outside of the lock bool do_wake = false; diff --git a/system/utest/fit/bridge_tests.cpp b/system/utest/fit/bridge_tests.cpp index 9d42ef2c1b4496abc13cc95273a3a470d2382399..7520365acc71ea0aab8e898be9df5b254b908514 100644 --- a/system/utest/fit/bridge_tests.cpp +++ b/system/utest/fit/bridge_tests.cpp @@ -9,7 +9,7 @@ #include <lib/fit/bridge.h> #include <lib/fit/promise.h> -#include <lib/fit/sequential_executor.h> +#include <lib/fit/single_threaded_executor.h> #include <unittest/unittest.h> namespace { @@ -67,7 +67,7 @@ bool bridge_construction_and_assignment() { bridge.completer().complete_error("Test"); EXPECT_FALSE(bridge.completer()); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise()); + fit::run_single_threaded(bridge.consumer().promise()); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::error, result.state()); EXPECT_STR_EQ("Test", result.error()); @@ -96,7 +96,7 @@ bool completer_construction_and_assignment() { completer.complete_error("Test"); EXPECT_FALSE(completer); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise()); + fit::run_single_threaded(bridge.consumer().promise()); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::error, result.state()); EXPECT_STR_EQ("Test", result.error()); @@ -128,7 +128,7 @@ bool completer_abandon() { EXPECT_TRUE(bridge.consumer().was_abandoned()); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise_or( + fit::run_single_threaded(bridge.consumer().promise_or( fit::error("Abandoned"))); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::error, result.state()); @@ -146,7 +146,7 @@ bool completer_abandon() { EXPECT_TRUE(bridge.consumer().was_abandoned()); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise_or( + fit::run_single_threaded(bridge.consumer().promise_or( fit::error("Abandoned"))); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::error, result.state()); @@ -170,7 +170,7 @@ bool completer_complete() { EXPECT_FALSE(bridge.consumer().was_abandoned()); fit::result<void, const char*> result = - fit::run_sequentially(bridge.consumer().promise()); + fit::run_single_threaded(bridge.consumer().promise()); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::ok, result.state()); } @@ -186,7 +186,7 @@ bool completer_complete() { EXPECT_FALSE(bridge.consumer().was_abandoned()); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise()); + fit::run_single_threaded(bridge.consumer().promise()); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_EQ(42, result.value()); @@ -203,7 +203,7 @@ bool completer_complete() { EXPECT_FALSE(bridge.consumer().was_abandoned()); fit::result<int, void> result = - fit::run_sequentially(bridge.consumer().promise()); + fit::run_single_threaded(bridge.consumer().promise()); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::error, result.state()); } @@ -219,7 +219,7 @@ bool completer_complete() { EXPECT_FALSE(bridge.consumer().was_abandoned()); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise()); + fit::run_single_threaded(bridge.consumer().promise()); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::error, result.state()); EXPECT_STR_EQ("Test", result.error()); @@ -236,7 +236,7 @@ bool completer_complete() { EXPECT_FALSE(bridge.consumer().was_abandoned()); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise()); + fit::run_single_threaded(bridge.consumer().promise()); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_EQ(42, result.value()); @@ -253,7 +253,7 @@ bool completer_complete() { EXPECT_FALSE(bridge.consumer().was_abandoned()); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise()); + fit::run_single_threaded(bridge.consumer().promise()); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::error, result.state()); EXPECT_STR_EQ("Test", result.error()); @@ -270,7 +270,7 @@ bool completer_complete() { EXPECT_TRUE(bridge.consumer().was_abandoned()); fit::result<int, const char*> result = - fit::run_sequentially(bridge.consumer().promise_or( + fit::run_single_threaded(bridge.consumer().promise_or( fit::error("Abandoned"))); EXPECT_FALSE(bridge.consumer()); EXPECT_EQ(fit::result_state::error, result.state()); @@ -291,7 +291,7 @@ bool completer_bind_no_arg_callback() { EXPECT_FALSE(bridge.completer()); EXPECT_FALSE(bridge.consumer().was_abandoned()); - fit::result<> result = fit::run_sequentially( + fit::result<> result = fit::run_single_threaded( bridge.consumer().promise()); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_EQ(1, run_count); @@ -305,7 +305,7 @@ bool completer_bind_no_arg_callback() { EXPECT_FALSE(bridge.completer()); EXPECT_FALSE(bridge.consumer().was_abandoned()); - fit::result<std::tuple<>> result = fit::run_sequentially( + fit::result<std::tuple<>> result = fit::run_single_threaded( bridge.consumer().promise()); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_EQ(1, run_count); @@ -325,7 +325,7 @@ bool completer_bind_one_arg_callback() { EXPECT_FALSE(bridge.completer()); EXPECT_FALSE(bridge.consumer().was_abandoned()); - fit::result<std::string> result = fit::run_sequentially( + fit::result<std::string> result = fit::run_single_threaded( bridge.consumer().promise()); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_TRUE(result.value() == "Hippopotamus"); @@ -340,7 +340,7 @@ bool completer_bind_one_arg_callback() { EXPECT_FALSE(bridge.completer()); EXPECT_FALSE(bridge.consumer().was_abandoned()); - fit::result<std::tuple<std::string>> result = fit::run_sequentially( + fit::result<std::tuple<std::string>> result = fit::run_single_threaded( bridge.consumer().promise()); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_TRUE(std::get<0>(result.value()) == "Hippopotamus"); @@ -361,7 +361,7 @@ bool completer_bind_two_arg_callback() { EXPECT_FALSE(bridge.completer()); EXPECT_FALSE(bridge.consumer().was_abandoned()); - fit::result<std::tuple<std::string, int>> result = fit::run_sequentially( + fit::result<std::tuple<std::string, int>> result = fit::run_single_threaded( bridge.consumer().promise()); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_TRUE(std::get<0>(result.value()) == @@ -394,7 +394,7 @@ bool consumer_construction_and_assignment() { bridge.completer().complete_error("Test"); EXPECT_FALSE(bridge.completer()); fit::result<int, const char*> result = - fit::run_sequentially(consumer.promise()); + fit::run_single_threaded(consumer.promise()); EXPECT_FALSE(consumer); EXPECT_EQ(fit::result_state::error, result.state()); EXPECT_STR_EQ("Test", result.error()); @@ -463,7 +463,7 @@ bool consumer_promise() { EXPECT_FALSE(bridge.completer()); fit::result<int, const char*> result = - fit::run_sequentially(std::move(promise)); + fit::run_single_threaded(std::move(promise)); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_EQ(42, result.value()); } @@ -482,7 +482,7 @@ bool consumer_promise() { EXPECT_FALSE(bridge.completer()); fit::result<int, const char*> result = - fit::run_sequentially(std::move(promise)); + fit::run_single_threaded(std::move(promise)); EXPECT_EQ(fit::result_state::pending, result.state()); } @@ -501,7 +501,7 @@ bool consumer_promise() { EXPECT_FALSE(bridge.completer()); fit::result<int, const char*> result = - fit::run_sequentially(std::move(promise)); + fit::run_single_threaded(std::move(promise)); EXPECT_EQ(fit::result_state::ok, result.state()); EXPECT_EQ(42, result.value()); } @@ -521,7 +521,7 @@ bool consumer_promise() { EXPECT_FALSE(bridge.completer()); fit::result<int, const char*> result = - fit::run_sequentially(std::move(promise)); + fit::run_single_threaded(std::move(promise)); EXPECT_EQ(fit::result_state::error, result.state()); EXPECT_STR_EQ("Abandoned", result.error()); } @@ -535,7 +535,7 @@ bool schedule_for_consumer() { // Promise completes normally. { uint64_t run_count[2] = {}; - fit::sequential_executor executor; + fit::single_threaded_executor executor; fit::consumer<int> consumer = fit::schedule_for_consumer( &executor, fit::make_promise([&](fit::context& context) { @@ -546,7 +546,7 @@ bool schedule_for_consumer() { EXPECT_EQ(0, run_count[0]); std::async(std::launch::async, [&] { executor.run(); }); - fit::run_sequentially( + fit::run_single_threaded( consumer.promise() .then([&](fit::context& context, fit::result<int> result) { assert(context.executor() != &executor); @@ -560,7 +560,7 @@ bool schedule_for_consumer() { // Promise abandons its task so the consumer is abandoned too. { uint64_t run_count[2] = {}; - fit::sequential_executor executor; + fit::single_threaded_executor executor; fit::consumer<int> consumer = fit::schedule_for_consumer( &executor, fit::make_promise([&](fit::context& context) @@ -574,7 +574,7 @@ bool schedule_for_consumer() { EXPECT_EQ(0, run_count[0]); std::async(std::launch::async, [&] { executor.run(); }); - fit::run_sequentially( + fit::run_single_threaded( consumer.promise() .then([&](fit::context& context, fit::result<int> result) { // This should not run because the promise was abandoned. @@ -588,7 +588,7 @@ bool schedule_for_consumer() { // but this time we use promise_or() so we can handle the abandonment. { uint64_t run_count[2] = {}; - fit::sequential_executor executor; + fit::single_threaded_executor executor; fit::consumer<int> consumer = fit::schedule_for_consumer( &executor, fit::make_promise([&](fit::context& context) @@ -602,7 +602,7 @@ bool schedule_for_consumer() { EXPECT_EQ(0, run_count[0]); std::async(std::launch::async, [&] { executor.run(); }); - fit::run_sequentially( + fit::run_single_threaded( consumer.promise_or(fit::error()) .then([&](fit::context& context, fit::result<int> result) { assert(context.executor() != &executor); diff --git a/system/utest/fit/examples/promise_example1.cpp b/system/utest/fit/examples/promise_example1.cpp index d0b024d3a20269ca9b3ae40afccdb23a859e1b1d..ad38d1d88e2fcf89be6158f7cc12409766b6884c 100644 --- a/system/utest/fit/examples/promise_example1.cpp +++ b/system/utest/fit/examples/promise_example1.cpp @@ -7,7 +7,7 @@ #include <string> #include <lib/fit/promise.h> -#include <lib/fit/sequential_executor.h> +#include <lib/fit/single_threaded_executor.h> #include "utils.h" @@ -90,7 +90,7 @@ fit::promise<> prepare_simulation() { void run() { auto simulation = prepare_simulation(); - fit::run_sequentially(std::move(simulation)); + fit::run_single_threaded(std::move(simulation)); } } // namespace promise_example1 diff --git a/system/utest/fit/examples/promise_example2.cpp b/system/utest/fit/examples/promise_example2.cpp index d64c1fb44ed4d1e8083c416e6beae995da87a77f..25618602b08e7a7831c1eded6bcd53f95ea69db8 100644 --- a/system/utest/fit/examples/promise_example2.cpp +++ b/system/utest/fit/examples/promise_example2.cpp @@ -8,7 +8,7 @@ #include <string> #include <lib/fit/promise.h> -#include <lib/fit/sequential_executor.h> +#include <lib/fit/single_threaded_executor.h> #include "utils.h" @@ -164,7 +164,7 @@ auto play_game() { } void run() { - fit::run_sequentially(play_game()); + fit::run_single_threaded(play_game()); } } // namespace promise_example2 diff --git a/system/utest/fit/promise_tests.cpp b/system/utest/fit/promise_tests.cpp index 0442fe901aaccef0957f8381d832e0f880fbb02a..bf7cf30867a38e86353b76b309d9b1684d7d9836 100644 --- a/system/utest/fit/promise_tests.cpp +++ b/system/utest/fit/promise_tests.cpp @@ -5,7 +5,7 @@ #include <functional> #include <lib/fit/promise.h> -#include <lib/fit/sequential_executor.h> +#include <lib/fit/single_threaded_executor.h> #include <unittest/unittest.h> #include "examples/promise_example1.h" @@ -71,7 +71,7 @@ bool basics() { // Evaluate the promise. fit::result<int, const char*> result = - fit::run_sequentially(std::move(promise)); + fit::run_single_threaded(std::move(promise)); if (i % 2 == 0) { EXPECT_TRUE(result.is_ok()); EXPECT_EQ(i * i / 2, result.value()); diff --git a/system/utest/fit/rules.mk b/system/utest/fit/rules.mk index a487f596f2852721134d1920116ca3f848db44c7..9443e4a1fbc22c02f55f06ac56098d243c77bb1b 100644 --- a/system/utest/fit/rules.mk +++ b/system/utest/fit/rules.mk @@ -22,7 +22,7 @@ fit_tests := \ $(LOCAL_DIR)/result_tests.cpp \ $(LOCAL_DIR)/scheduler_tests.cpp \ $(LOCAL_DIR)/sequencer_tests.cpp \ - $(LOCAL_DIR)/sequential_executor_tests.cpp \ + $(LOCAL_DIR)/single_threaded_executor_tests.cpp \ $(LOCAL_DIR)/suspended_task_tests.cpp \ $(LOCAL_DIR)/traits_tests.cpp \ $(LOCAL_DIR)/variant_tests.cpp \ diff --git a/system/utest/fit/sequencer_tests.cpp b/system/utest/fit/sequencer_tests.cpp index 3bdc4f2a9cf0ae1be4bd83ccace23c71cb4305e8..6b743125dd766ea89d00c4bf02191ea79afc67dd 100644 --- a/system/utest/fit/sequencer_tests.cpp +++ b/system/utest/fit/sequencer_tests.cpp @@ -8,7 +8,7 @@ #include <string> #include <lib/fit/sequencer.h> -#include <lib/fit/sequential_executor.h> +#include <lib/fit/single_threaded_executor.h> #include <unittest/unittest.h> namespace { @@ -63,7 +63,7 @@ bool sequencing_tasks() { // Schedule the promises in an order which intentionally does not // match the sequencing. - fit::sequential_executor executor; + fit::single_threaded_executor executor; executor.schedule_task(std::move(z1)); executor.schedule_task(std::move(b)); executor.schedule_task(std::move(c)); @@ -82,7 +82,7 @@ bool thread_safety() { BEGIN_TEST; fit::sequencer seq; - fit::sequential_executor executor; + fit::single_threaded_executor executor; uint64_t run_count = 0; // Schedule work from a few threads, just to show that we can. diff --git a/system/utest/fit/sequential_executor_tests.cpp b/system/utest/fit/single_threaded_executor_tests.cpp similarity index 94% rename from system/utest/fit/sequential_executor_tests.cpp rename to system/utest/fit/single_threaded_executor_tests.cpp index 4343aa08e9d54cf7d92f2fa89b8d92562e5e4258..080be5fe8cb5a13af2012977a6962bd2b195cded 100644 --- a/system/utest/fit/sequential_executor_tests.cpp +++ b/system/utest/fit/single_threaded_executor_tests.cpp @@ -5,7 +5,7 @@ #include <future> // for std::async #include <lib/fit/defer.h> -#include <lib/fit/sequential_executor.h> +#include <lib/fit/single_threaded_executor.h> #include <unittest/unittest.h> namespace { @@ -13,7 +13,7 @@ namespace { bool running_tasks() { BEGIN_TEST; - fit::sequential_executor executor; + fit::single_threaded_executor executor; uint64_t run_count[3] = {}; // Schedule a task that runs once and increments a counter. @@ -43,7 +43,7 @@ bool running_tasks() { bool suspending_and_resuming_tasks() { BEGIN_TEST; - fit::sequential_executor executor; + fit::single_threaded_executor executor; uint64_t run_count[5] = {}; uint64_t resume_count[5] = {}; uint64_t resume_count4b = 0; @@ -130,7 +130,7 @@ bool suspending_and_resuming_tasks() { bool abandoning_tasks() { BEGIN_TEST; - fit::sequential_executor executor; + fit::single_threaded_executor executor; uint64_t run_count[4] = {}; uint64_t destruction[4] = {}; @@ -188,11 +188,11 @@ bool abandoning_tasks() { END_TEST; } -bool run_sequentially() { +bool run_single_threaded() { BEGIN_TEST; uint64_t run_count = 0; - fit::result<int> result = fit::run_sequentially(fit::make_promise( + fit::result<int> result = fit::run_single_threaded(fit::make_promise( [&]() { run_count++; return fit::ok(42); @@ -205,9 +205,9 @@ bool run_sequentially() { } // namespace -BEGIN_TEST_CASE(sequential_executor_tests) +BEGIN_TEST_CASE(single_threaded_executor_tests) RUN_TEST(running_tasks) RUN_TEST(suspending_and_resuming_tasks) RUN_TEST(abandoning_tasks) -RUN_TEST(run_sequentially) -END_TEST_CASE(sequential_executor_tests) +RUN_TEST(run_single_threaded) +END_TEST_CASE(single_threaded_executor_tests)