From 653a8670cb314a7fe8dd665643e3c102693a60f8 Mon Sep 17 00:00:00 2001 From: Aleksey Loginov Date: Tue, 4 Jun 2024 00:31:15 +0300 Subject: [PATCH] add benchmarks over subjects --- cmake/dependencies.cmake | 10 +++++--- src/benchmarks/benchmarks.cpp | 45 +++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 6430e41b4..697745e08 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -46,11 +46,15 @@ macro(rpp_fetch_library_extended NAME URL TAG TARGET_NAME) Include(FetchContent) set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Build SHARED libraries") + Set(FETCHCONTENT_QUIET FALSE) + FetchContent_Declare( ${NAME} GIT_REPOSITORY ${URL} GIT_TAG ${TAG} - GIT_SHALLOW TRUE + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + GIT_SUBMODULES "" ) FetchContent_MakeAvailable(${NAME}) @@ -60,7 +64,7 @@ endmacro() macro(rpp_fetch_library NAME URL TAG) find_package(${NAME} QUIET) if (NOT ${NAME}_FOUND) - message("-- RPP: Fetching ${NAME}...") + message("-- RPP: Fetching ${NAME} from ${URL} by ${TAG}...") rpp_fetch_library_extended(${NAME} ${URL} ${TAG} ${NAME}) endif() endmacro() @@ -68,7 +72,7 @@ endmacro() # ==================== RXCPP ======================= if (RPP_BUILD_RXCPP AND RPP_BUILD_BENCHMARKS) set(RXCPP_DISABLE_TESTS_AND_EXAMPLES 1) - rpp_fetch_library(rxcpp https://github.com/ReactiveX/RxCpp.git origin/main) + rpp_fetch_library(rxcpp https://github.com/ReactiveX/RxCpp.git main) endif() # ===================== Tests =================== diff --git a/src/benchmarks/benchmarks.cpp b/src/benchmarks/benchmarks.cpp index e4ce85dc3..a90f0c962 100644 --- a/src/benchmarks/benchmarks.cpp +++ b/src/benchmarks/benchmarks.cpp @@ -661,6 +661,51 @@ int main(int argc, char* argv[]) // NOLINT(bugprone-exception-escape) }); } } + SECTION("subscribe 100 observers to publish_subject") + { + TEST_RPP([&] { + rpp::subjects::publish_subject s{}; + for (size_t i = 0; i < 100; ++i) + { + s.get_observable().subscribe(rpp::make_lambda_observer([](int v) { ankerl::nanobench::doNotOptimizeAway(v); })); + } + s.get_observer().on_next(1); + }); + TEST_RXCPP([&] { + rxcpp::subjects::subject s{}; + for (size_t i = 0; i < 100; ++i) + { + s.get_observable().subscribe(rxcpp::make_subscriber([](int v) { ankerl::nanobench::doNotOptimizeAway(v); })); + } + s.get_subscriber().on_next(1); + }); + } + SECTION("100 on_next to 100 observers to publish_subject") + { + { + rpp::subjects::publish_subject rpp_subj{}; + for (size_t i = 0; i < 100; ++i) + { + rpp_subj.get_observable().subscribe(rpp::make_lambda_observer([](int v) { ankerl::nanobench::doNotOptimizeAway(v); })); + } + TEST_RPP([&] { + for (size_t i = 0; i < 100; ++i) + rpp_subj.get_observer().on_next(i); + }); + } + + { + rxcpp::subjects::subject rxcpp_subj{}; + for (size_t i = 0; i < 100; ++i) + { + rxcpp_subj.get_observable().subscribe(rxcpp::make_subscriber([](int v) { ankerl::nanobench::doNotOptimizeAway(v); })); + } + TEST_RXCPP([&] { + for (size_t i = 0; i < 100; ++i) + rxcpp_subj.get_subscriber().on_next(i); + }); + } + } } // BENCHMARK("Subjects") BENCHMARK("Scenarios")