Skip to content

Add timeout with fallback observable#302

Merged
AlexInLog merged 2 commits into
mainfrom
timeout_fallback
Dec 2, 2022
Merged

Add timeout with fallback observable#302
AlexInLog merged 2 commits into
mainfrom
timeout_fallback

Conversation

@AlexInLog

Copy link
Copy Markdown
Owner

@codecov

codecov Bot commented Dec 2, 2022

Copy link
Copy Markdown

Codecov Report

Merging #302 (9bc7aed) into main (6fe6c15) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##             main     #302   +/-   ##
=======================================
  Coverage   98.26%   98.27%           
=======================================
  Files         109      109           
  Lines        1556     1562    +6     
=======================================
+ Hits         1529     1535    +6     
  Misses         27       27           
Impacted Files Coverage Δ
src/rpp/rpp/operators/fwd/timeout.hpp 100.00% <100.00%> (ø)
src/rpp/rpp/operators/timeout.hpp 96.42% <100.00%> (+0.27%) ⬆️

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

@github-actions

github-actions Bot commented Dec 2, 2022

Copy link
Copy Markdown
Contributor

BENCHMARK RESULTS (AUTOGENERATED)

ci-macos

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 0.29ns 0.310763 0.92 0.29ns
Dynamic observable construction 72.18ns 76.5794 0.94 157.23ns
Specific observable construction + as_dynamic 75.29ns 75.8952 0.99 125.18ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 181.91ns 158.079 1.15 1096.45ns
Specific observable lift dynamic observer 167.16ns 176.538 0.95 1246.03ns
Dynamic observable lift specific observer 265.09ns 272.488 0.97 1278.97ns
Dynamic observable lift dynamic observer 246.34ns 222.547 1.11 1265.02ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 129.43ns 141.117 0.92 1439.50ns
Specific observable subscribe dynamic observer 145.60ns 135.228 1.08 1309.40ns
Dynamic observable subscribe specific observer 224.08ns 250.539 0.89 1767.72ns
Dynamic observable subscribe dynamic observer 157.31ns 159.266 0.99 1252.03ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 133.69ns 106.782 1.25 3378.55ns
Dynamic observable subscribe lambda 238.23ns 218.79 1.09 1233.26ns
Specific observable subscribe lambda without subscription 128.38ns 154.52 0.83 1279.91ns
Dynamic observable subscribe lambda without subscription 224.30ns 225.364 1.00 2662.47ns
Specific observable subscribe specific subscriber 33.92ns 47.1847 0.72 837.28ns
Dynamic observable subscribe specific subscriber 128.88ns 152.21 0.85 1039.34ns
Specific observable subscribe dynamic observer 46.87ns 51.6253 0.91 828.95ns
Dynamic observable subscribe dynamic observer 73.92ns 76.6639 0.96 864.40ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 0.57ns 0.352338 1.62 0.28ns
Dynamic observer construction 72.55ns 87.8855 0.83 2343.82ns
Specific observer construction + as_dynamic 173.94ns 82.0567 2.12 112.05ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.78ns 0.870593 0.89 1.38ns
Dynamic observer OnNext 2.30ns 2.3073 0.99 2.28ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 76.16ns 84.4831 0.90 318.28ns
Make copy of subscriber 12.31ns 13.5372 0.91 32.17ns
Transform subsriber to dynamic 86.83ns 116.832 0.74 358.83ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 80.86ns 96.2527 0.84 515.21ns
composite_subscription add 55.71ns 56.4203 0.99 188.37ns
composite_subscription unsubscribe 74.84ns 75.1341 1.00 77.75ns

buffer

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
buffer 338.78ns 325.703 1.04 8099.35ns
sending of values from observable via buffer to subscriber 5.79ns 6.34927 0.91 95.40ns

chains creation test

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
long non-state chain creation + subscribe 214.61ns 220.503 0.97 1602.87ns
long stateful chain creation + subscribe 537.97ns 533.912 1.01 2719.36ns

combine_latest

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
combine_latest construction from observable via dot + subscribe 1359.46ns 1353.61 1.00 .
sending of values from observable via combine_latest to subscriber 29.16ns 31.5347 0.92 .

concat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
concat 2775.47ns 2975.38 0.93 10595.00ns
concat_with 3120.22ns 3431.46 0.91 11349.10ns

distinct_until_changed

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
distinct_until_changed construction from observable via dot + subscribe 176.87ns 164.964 1.07 1286.77ns
sending of values from observable via distinct_until_changed to subscriber 3.35ns 2.51117 1.33 1.13ns

first

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
first construction from observable via dot + subscribe 119.44ns 128.619 0.93 4359.49ns
sending of values from observable via first to subscriber 0.85ns 0.889152 0.96 1.77ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 62.49ns 70.9054 0.88 2132.66ns
error 108.15ns 118.33 0.91 3034.56ns
never 32.08ns 32.1604 1.00 827.21ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 8204.87ns 168.989 48.55 2347.62ns

immediate scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 2.23ns 2.26769 0.99 390.47ns
re-schedule 10 times 31.80ns 31.6417 1.00 428.59ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 64.39ns 73.3232 0.88 3826.21ns
just send variadic 127.58ns 95.553 1.34 2345.07ns

last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
last construction from observable via dot + subscribe 223.29ns 230.289 0.97 1290.38ns
sending of values from observable via last to subscriber 2.53ns 2.73053 0.93 1.27ns

map

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 67.84ns 72.3019 0.94 2123.82ns
sending of values from observable via map to subscriber 1.32ns 1.17753 1.12 1.41ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 2530.30ns 3439.18 0.74 9306.47ns
merge_with 6369.55ns 3604.15 1.77 10101.60ns

observe_on

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
observe_on construction from observable via dot + subscribe 1415.30ns 639.349 2.21 9051.81ns
sending of values from observable via observe_on to subscriber 101.40ns 110.689 0.92 2093.56ns

on_error_resume_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_error_resume_next construction from observable via dot + subscribe 585.83ns 590.542 0.99 1941.83ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 20.65ns 21.0728 0.98 28.09ns
on_error 0.56ns 0.565653 1.00 17.55ns
on_completed 0.61ns 0.583087 1.05 2.26ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 333.07ns 324.271 1.03 519.81ns
get_observable 27.44ns 29.0556 0.94 172.07ns
get_subscriber 71.39ns 68.089 1.05 80.01ns

repeat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
repeat construction from observable via dot + subscribe 5874.74ns 6432.14 0.91 36948.70ns

scan

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
scan construction from observable via dot + subscribe 141.07ns 149.387 0.94 1562.82ns
sending of values from observable via scan to subscriber 2.26ns 2.58219 0.88 2.20ns

single-threaded locks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no-lock increment 1.86ns 1.93389 0.96 .
mutex lock increment 47.56ns 23.2032 2.05 .
spin-lock increment 9.47ns 8.59798 1.10 .

skip

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
skip construction from observable via dot + subscribe 136.96ns 145.161 0.94 1454.75ns
sending of values from observable via skip to subscriber 2.23ns 3.25103 0.69 1.93ns

switch_on_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
switch_on_next construction from observable via dot + subscribe 3408.53ns 3537.48 0.96 10339.50ns
sending of values from observable via switch_on_next to subscriber 852.33ns 789.069 1.08 2735.80ns

take

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take construction from observable via dot + subscribe 190.42ns 209.974 0.91 2577.27ns
sending of values from observable via take to subscriber 3.01ns 3.08964 0.98 6.47ns

take_last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_last construction from observable via dot + subscribe 328.00ns 326.897 1.00 1974.61ns
sending of values from observable via take_last to subscriber 2.81ns 3.0226 0.93 16.12ns

take_until

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_until construction from observable via dot + subscribe 1541.67ns 1493.91 1.03 4437.00ns
sending of values from observable via take_until to subscriber 7.96ns 8.53695 0.93 2.37ns

timeout

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
timeout construction from observable via dot + subscribe with run_loop 6722.88ns 999.649 6.73 5721.65ns
sending of values from observable via timeout to subscriber with unreachable timeout interval with run_loop 69.41ns 77.1563 0.90 969.28ns

trampoline scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 66.71ns 29.5317 2.26 592.34ns
re-schedule 10 times 88.19ns 103.573 0.85 633.09ns
recursively schedule 10 times 2117.38ns 1994.47 1.06 16212.50ns

window

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
window 3103.16ns 3254.66 0.95 8356.52ns
sending of values from observable via window to subscriber 1190.38ns 892.921 1.33 1546.59ns

with_latest_from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
with_latest_from construction from observable via dot + subscribe 1646.78ns 1656.18 0.99 .
sending of values from observable via with_latest_from to subscriber 27.76ns 30.2228 0.92 .

ci-ubuntu-clang

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 0.32ns 0.401983 0.79 0.41ns
Dynamic observable construction 26.59ns 35.0391 0.76 29.24ns
Specific observable construction + as_dynamic 24.85ns 35.035 0.71 29.34ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 98.27ns 106.893 0.92 318.15ns
Specific observable lift dynamic observer 126.25ns 127.845 0.99 319.81ns
Dynamic observable lift specific observer 205.06ns 207.398 0.99 363.28ns
Dynamic observable lift dynamic observer 210.48ns 209.117 1.01 269.46ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 67.20ns 69.7066 0.96 318.72ns
Specific observable subscribe dynamic observer 82.00ns 85.8592 0.96 349.16ns
Dynamic observable subscribe specific observer 151.27ns 151.709 1.00 286.69ns
Dynamic observable subscribe dynamic observer 142.03ns 146.054 0.97 380.16ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 51.83ns 69.6243 0.74 340.31ns
Dynamic observable subscribe lambda 131.81ns 149.326 0.88 351.10ns
Specific observable subscribe lambda without subscription 53.04ns 69.5287 0.76 307.13ns
Dynamic observable subscribe lambda without subscription 110.47ns 148.913 0.74 371.16ns
Specific observable subscribe specific subscriber 23.87ns 33.3849 0.72 229.55ns
Dynamic observable subscribe specific subscriber 102.53ns 106.237 0.97 277.77ns
Specific observable subscribe dynamic observer 27.01ns 33.611 0.80 251.11ns
Dynamic observable subscribe dynamic observer 73.41ns 90.3906 0.81 242.67ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 0.35ns 0.40229 0.87 0.39ns
Dynamic observer construction 26.69ns 32.4202 0.82 21.61ns
Specific observer construction + as_dynamic 28.81ns 35.2612 0.82 20.46ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.76ns 0.805177 0.95 0.65ns
Dynamic observer OnNext 2.03ns 2.41519 0.84 2.51ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 37.93ns 41.7958 0.91 73.36ns
Make copy of subscriber 18.74ns 20.181 0.93 5.08ns
Transform subsriber to dynamic 41.62ns 55.1109 0.76 30.28ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 39.70ns 41.7675 0.95 60.80ns
composite_subscription add 58.91ns 60.1125 0.98 96.44ns
composite_subscription unsubscribe 50.90ns 52.842 0.96 25.98ns

buffer

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
buffer 292.89ns 292.226 1.00 1885.19ns
sending of values from observable via buffer to subscriber 5.52ns 6.06036 0.91 29.01ns

chains creation test

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
long non-state chain creation + subscribe 310.98ns 311.471 1.00 588.86ns
long stateful chain creation + subscribe 445.52ns 455.356 0.98 1445.86ns

combine_latest

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
combine_latest construction from observable via dot + subscribe 836.75ns 1041.07 0.80 .
sending of values from observable via combine_latest to subscriber 31.62ns 32.9992 0.96 .

concat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
concat 2240.03ns 2223.48 1.01 3377.58ns
concat_with 2614.94ns 2584.94 1.01 3485.63ns

distinct_until_changed

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
distinct_until_changed construction from observable via dot + subscribe 116.54ns 135.839 0.86 279.04ns
sending of values from observable via distinct_until_changed to subscriber 2.59ns 3.20506 0.81 1.95ns

first

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
first construction from observable via dot + subscribe 146.43ns 151.406 0.97 613.78ns
sending of values from observable via first to subscriber 0.65ns 0.804657 0.81 0.69ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 70.56ns 76.2937 0.92 643.23ns
error 127.08ns 135.314 0.94 800.31ns
never 32.03ns 34.7677 0.92 274.79ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 95.88ns 94.2983 1.02 731.84ns

immediate scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 0.81ns 0.804238 1.00 126.07ns
re-schedule 10 times 11.32ns 8.37252 1.35 164.30ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 77.98ns 75.2861 1.04 707.75ns
just send variadic 107.99ns 115.383 0.94 860.96ns

last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
last construction from observable via dot + subscribe 184.51ns 196.269 0.94 383.56ns
sending of values from observable via last to subscriber 2.48ns 2.60956 0.95 1.92ns

map

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 75.90ns 83.8781 0.90 287.10ns
sending of values from observable via map to subscriber 1.18ns 1.19398 0.99 1.82ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 2166.02ns 2175.54 1.00 3002.01ns
merge_with 2432.93ns 2581.73 0.94 3720.91ns

observe_on

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
observe_on construction from observable via dot + subscribe 525.85ns 522.848 1.01 2796.52ns
sending of values from observable via observe_on to subscriber 63.51ns 75.2843 0.84 227.75ns

on_error_resume_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_error_resume_next construction from observable via dot + subscribe 488.85ns 501.017 0.98 880.47ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 28.60ns 28.9306 0.99 12.99ns
on_error 0.59ns 0.808772 0.73 20.76ns
on_completed 0.56ns 0.807661 0.69 0.60ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 225.27ns 240.953 0.93 189.60ns
get_observable 33.42ns 34.9171 0.96 54.37ns
get_subscriber 67.67ns 72.7537 0.93 14.84ns

repeat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
repeat construction from observable via dot + subscribe 4724.35ns 4688.02 1.01 2954.02ns

scan

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
scan construction from observable via dot + subscribe 108.22ns 119.421 0.91 322.86ns
sending of values from observable via scan to subscriber 1.78ns 2.01134 0.88 1.77ns

single-threaded locks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no-lock increment 2.42ns 2.42768 1.00 .
mutex lock increment 21.70ns 21.6923 1.00 .
spin-lock increment 10.74ns 10.8548 0.99 .

skip

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
skip construction from observable via dot + subscribe 116.31ns 118.88 0.98 458.83ns
sending of values from observable via skip to subscriber 1.89ns 2.01958 0.93 1.78ns

switch_on_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
switch_on_next construction from observable via dot + subscribe 1838.24ns 2642.8 0.70 3343.13ns
sending of values from observable via switch_on_next to subscriber 499.96ns 693.965 0.72 617.40ns

take

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take construction from observable via dot + subscribe 191.90ns 200.288 0.96 443.52ns
sending of values from observable via take to subscriber 2.81ns 2.81737 1.00 3.16ns

take_last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_last construction from observable via dot + subscribe 252.42ns 248.575 1.02 508.48ns
sending of values from observable via take_last to subscriber 3.76ns 3.70746 1.01 3.32ns

take_until

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_until construction from observable via dot + subscribe 1176.17ns 1220.35 0.96 1142.71ns
sending of values from observable via take_until to subscriber 10.68ns 10.9669 0.97 1.62ns

timeout

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
timeout construction from observable via dot + subscribe with run_loop 1197.89ns 1040.65 1.15 15279.50ns
sending of values from observable via timeout to subscriber with unreachable timeout interval with run_loop 65.15ns 66.2531 0.98 12855.60ns

trampoline scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 15.00ns 16.5987 0.90 170.92ns
re-schedule 10 times 38.24ns 40.5002 0.94 174.80ns
recursively schedule 10 times 1615.40ns 1627.78 0.99 8624.51ns

window

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
window 1699.00ns 2412.15 0.70 2678.25ns
sending of values from observable via window to subscriber 624.11ns 655.512 0.95 377.43ns

with_latest_from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
with_latest_from construction from observable via dot + subscribe 1208.39ns 1210.08 1.00 .
sending of values from observable via with_latest_from to subscriber 27.57ns 30.7829 0.90 .

ci-ubuntu-gcc

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 0.29ns 0.33502 0.86 0.29ns
Dynamic observable construction 20.59ns 31.521 0.65 15.39ns
Specific observable construction + as_dynamic 20.52ns 31.556 0.65 16.24ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 67.92ns 97.9249 0.69 238.95ns
Specific observable lift dynamic observer 93.01ns 126.639 0.73 254.13ns
Dynamic observable lift specific observer 134.93ns 181.172 0.74 279.41ns
Dynamic observable lift dynamic observer 146.89ns 192.768 0.76 258.45ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 42.67ns 60.9391 0.70 227.29ns
Specific observable subscribe dynamic observer 55.32ns 79.1391 0.70 228.05ns
Dynamic observable subscribe specific observer 92.32ns 128.988 0.72 251.68ns
Dynamic observable subscribe dynamic observer 96.34ns 127.584 0.76 243.81ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 43.35ns 60.8652 0.71 224.09ns
Dynamic observable subscribe lambda 91.98ns 130.431 0.71 257.59ns
Specific observable subscribe lambda without subscription 42.62ns 60.9103 0.70 226.34ns
Dynamic observable subscribe lambda without subscription 92.24ns 130.185 0.71 260.53ns
Specific observable subscribe specific subscriber 19.31ns 30.4936 0.63 183.21ns
Dynamic observable subscribe specific subscriber 68.61ns 97.3504 0.70 220.38ns
Specific observable subscribe dynamic observer 19.22ns 30.5095 0.63 188.61ns
Dynamic observable subscribe dynamic observer 66.56ns 85.2471 0.78 197.27ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 0.29ns 0.334909 0.86 0.29ns
Dynamic observer construction 20.82ns 31.5405 0.66 13.76ns
Specific observer construction + as_dynamic 21.81ns 31.4806 0.69 13.19ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.30ns 0.334916 0.91 0.30ns
Dynamic observer OnNext 1.15ns 1.68372 0.68 1.15ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 24.17ns 34.459 0.70 47.45ns
Make copy of subscriber 11.49ns 16.7222 0.69 4.21ns
Transform subsriber to dynamic 32.78ns 44.2622 0.74 16.96ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 24.16ns 34.484 0.70 40.72ns
composite_subscription add 37.08ns 47.853 0.77 65.45ns
composite_subscription unsubscribe 32.25ns 41.4118 0.78 15.29ns

buffer

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
buffer 165.56ns 232.293 0.71 1387.75ns
sending of values from observable via buffer to subscriber 4.77ns 6.39992 0.75 18.59ns

chains creation test

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
long non-state chain creation + subscribe 231.29ns 288.206 0.80 490.16ns
long stateful chain creation + subscribe 327.41ns 423.76 0.77 1522.12ns

combine_latest

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
combine_latest construction from observable via dot + subscribe 677.05ns 918.938 0.74 .
sending of values from observable via combine_latest to subscriber 24.13ns 28.3259 0.85 .

concat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
concat 1445.83ns 1932.58 0.75 2775.55ns
concat_with 1700.30ns 2272.59 0.75 3161.86ns

distinct_until_changed

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
distinct_until_changed construction from observable via dot + subscribe 84.59ns 120.276 0.70 254.56ns
sending of values from observable via distinct_until_changed to subscriber 2.30ns 2.41741 0.95 1.15ns

first

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
first construction from observable via dot + subscribe 105.58ns 137.283 0.77 516.05ns
sending of values from observable via first to subscriber 0.86ns 1.34047 0.64 0.48ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 48.51ns 66.9164 0.72 539.07ns
error 83.62ns 118.085 0.71 597.56ns
never 20.51ns 32.1479 0.64 198.97ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 58.98ns 85.8387 0.69 561.12ns

immediate scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 0.58ns 1.33952 0.43 89.44ns
re-schedule 10 times 13.74ns 22.4677 0.61 110.72ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 50.29ns 70.2511 0.72 587.01ns
just send variadic 67.70ns 112.925 0.60 587.27ns

last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
last construction from observable via dot + subscribe 135.23ns 175.426 0.77 299.71ns
sending of values from observable via last to subscriber 1.21ns 2.68223 0.45 0.80ns

map

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 58.86ns 81.9398 0.72 256.46ns
sending of values from observable via map to subscriber 0.81ns 0.753246 1.08 1.15ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 1405.51ns 1847.51 0.76 2894.04ns
merge_with 1670.10ns 2210.8 0.76 3195.47ns

observe_on

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
observe_on construction from observable via dot + subscribe 340.03ns 477.913 0.71 1816.25ns
sending of values from observable via observe_on to subscriber 52.67ns 68.542 0.77 163.08ns

on_error_resume_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_error_resume_next construction from observable via dot + subscribe 327.23ns 437.003 0.75 568.46ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 20.99ns 22.4367 0.94 5.75ns
on_error 0.87ns 0.674549 1.29 11.53ns
on_completed 0.58ns 1.34763 0.43 0.86ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 148.02ns 216.811 0.68 113.24ns
get_observable 23.82ns 29.4357 0.81 30.94ns
get_subscriber 45.44ns 57.4541 0.79 15.15ns

repeat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
repeat construction from observable via dot + subscribe 3089.93ns 4153.28 0.74 2317.48ns

scan

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
scan construction from observable via dot + subscribe 81.10ns 114.823 0.71 263.31ns
sending of values from observable via scan to subscriber 1.43ns 1.747 0.82 1.23ns

single-threaded locks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no-lock increment 1.62ns 2.00829 0.81 .
mutex lock increment 15.76ns 18.0581 0.87 .
spin-lock increment 7.45ns 9.04582 0.82 .

skip

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
skip construction from observable via dot + subscribe 81.37ns 115.958 0.70 395.14ns
sending of values from observable via skip to subscriber 2.23ns 2.36362 0.94 1.95ns

switch_on_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
switch_on_next construction from observable via dot + subscribe 1764.55ns 2339.02 0.75 3368.72ns
sending of values from observable via switch_on_next to subscriber 448.98ns 604.556 0.74 832.21ns

take

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take construction from observable via dot + subscribe 123.83ns 174.194 0.71 444.68ns
sending of values from observable via take to subscriber 2.89ns 3.95506 0.73 2.06ns

take_last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_last construction from observable via dot + subscribe 153.69ns 205.533 0.75 468.78ns
sending of values from observable via take_last to subscriber 1.97ns 3.02876 0.65 4.55ns

take_until

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_until construction from observable via dot + subscribe 789.49ns 1065.86 0.74 1208.79ns
sending of values from observable via take_until to subscriber 7.45ns 9.02442 0.83 1.48ns

timeout

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
timeout construction from observable via dot + subscribe with run_loop 817.38ns 942.624 0.87 12800.70ns
sending of values from observable via timeout to subscriber with unreachable timeout interval with run_loop 43.22ns 58.3416 0.74 21492.00ns

trampoline scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 15.35ns 20.9273 0.73 122.40ns
re-schedule 10 times 31.36ns 52.1837 0.60 143.80ns
recursively schedule 10 times 1008.45ns 1412.25 0.71 5988.53ns

window

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
window 1635.63ns 2130.16 0.77 2361.08ns
sending of values from observable via window to subscriber 459.01ns 592.495 0.77 291.67ns

with_latest_from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
with_latest_from construction from observable via dot + subscribe 794.86ns 1090.09 0.73 .
sending of values from observable via with_latest_from to subscriber 22.69ns 26.7766 0.85 .

ci-windows

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 1.82ns 2.23939 0.81 0.82ns
Dynamic observable construction 97.49ns 85.6355 1.14 139.32ns
Specific observable construction + as_dynamic 97.23ns 137.889 0.71 146.60ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 173.16ns 168.741 1.03 1524.00ns
Specific observable lift dynamic observer 220.53ns 179.415 1.23 1492.24ns
Dynamic observable lift specific observer 340.15ns 304.253 1.12 1705.21ns
Dynamic observable lift dynamic observer 271.76ns 269.094 1.01 1742.68ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 140.73ns 128.005 1.10 1326.78ns
Specific observable subscribe dynamic observer 154.32ns 161.552 0.96 1427.86ns
Dynamic observable subscribe specific observer 263.23ns 256.732 1.03 1497.80ns
Dynamic observable subscribe dynamic observer 206.59ns 240.464 0.86 1475.65ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 125.63ns 143.575 0.87 1430.22ns
Dynamic observable subscribe lambda 275.28ns 241.807 1.14 1596.80ns
Specific observable subscribe lambda without subscription 135.93ns 125.315 1.08 1535.00ns
Dynamic observable subscribe lambda without subscription 276.68ns 225.935 1.22 1619.60ns
Specific observable subscribe specific subscriber 35.34ns 37.3193 0.95 1013.50ns
Dynamic observable subscribe specific subscriber 173.02ns 152.107 1.14 1221.31ns
Specific observable subscribe dynamic observer 35.33ns 32.6882 1.08 1054.00ns
Dynamic observable subscribe dynamic observer 87.71ns 102.355 0.86 1096.07ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 1.70ns 1.67292 1.01 1.78ns
Dynamic observer construction 100.06ns 94.8155 1.06 136.82ns
Specific observer construction + as_dynamic 100.44ns 84.1802 1.19 134.00ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.75ns 0.839111 0.89 0.82ns
Dynamic observer OnNext 2.81ns 2.08101 1.35 1.90ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 94.73ns 111.412 0.85 421.22ns
Make copy of subscriber 19.46ns 15.8467 1.23 37.89ns
Transform subsriber to dynamic 110.64ns 122.411 0.90 180.68ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 103.21ns 90.7816 1.14 410.68ns
composite_subscription add 84.65ns 72.3158 1.17 182.84ns
composite_subscription unsubscribe 74.58ns 71.2644 1.05 144.86ns

buffer

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
buffer 417.64ns 374.933 1.11 7428.29ns
sending of values from observable via buffer to subscriber 8.51ns 6.73028 1.27 91.89ns

chains creation test

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
long non-state chain creation + subscribe 320.35ns 467.753 0.68 1921.33ns
long stateful chain creation + subscribe 752.57ns 831.182 0.91 3778.62ns

combine_latest

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
combine_latest construction from observable via dot + subscribe 2065.56ns 1987.64 1.04 .
sending of values from observable via combine_latest to subscriber 56.01ns 53.1658 1.05 .

concat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
concat 3319.60ns 3656.11 0.91 12857.70ns
concat_with 4956.12ns 3842.86 1.29 13385.70ns

distinct_until_changed

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
distinct_until_changed construction from observable via dot + subscribe 221.27ns 242.852 0.91 1136.44ns
sending of values from observable via distinct_until_changed to subscriber 5.34ns 6.11343 0.87 4.33ns

first

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
first construction from observable via dot + subscribe 149.17ns 160.652 0.93 2919.55ns
sending of values from observable via first to subscriber 2.84ns 2.71639 1.04 1.95ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 76.19ns 73.0255 1.04 2834.82ns
error 135.63ns 139.38 0.97 2697.18ns
never 37.75ns 47.758 0.79 1040.77ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 163.29ns 201.152 0.81 2921.91ns

immediate scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 2.45ns 1.458 1.68 475.94ns
re-schedule 10 times 117.62ns 102.309 1.15 526.29ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 77.53ns 76.9192 1.01 2488.36ns
just send variadic 121.94ns 93.9064 1.30 2911.64ns

last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
last construction from observable via dot + subscribe 269.45ns 273.378 0.99 1681.94ns
sending of values from observable via last to subscriber 3.80ns 4.26948 0.89 3.98ns

map

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 105.60ns 85.0204 1.24 1209.21ns
sending of values from observable via map to subscriber 4.80ns 4.29039 1.12 8.60ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 3221.80ns 3741.0 0.86 13046.30ns
merge_with 4643.12ns 3993.25 1.16 12936.70ns

observe_on

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
observe_on construction from observable via dot + subscribe 731.05ns 782.949 0.93 6300.40ns
sending of values from observable via observe_on to subscriber 79.20ns 72.4402 1.09 889.50ns

on_error_resume_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_error_resume_next construction from observable via dot + subscribe 769.83ns 788.667 0.98 2120.17ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 23.83ns 23.2102 1.03 40.99ns
on_error 3.37ns 2.91421 1.16 20.71ns
on_completed 3.29ns 3.07828 1.07 0.82ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 425.10ns 401.83 1.06 651.78ns
get_observable 29.97ns 34.6418 0.87 195.14ns
get_subscriber 58.52ns 73.0061 0.80 105.70ns

repeat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
repeat construction from observable via dot + subscribe 7211.20ns 10822.5 0.67 11943.30ns

scan

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
scan construction from observable via dot + subscribe 262.00ns 183.133 1.43 1536.73ns
sending of values from observable via scan to subscriber 6.71ns 5.7158 1.17 10.61ns

single-threaded locks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no-lock increment 3.07ns 2.19038 1.40 .
mutex lock increment 29.98ns 25.4183 1.18 .
spin-lock increment 11.30ns 13.004 0.87 .

skip

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
skip construction from observable via dot + subscribe 199.57ns 199.192 1.00 1920.40ns
sending of values from observable via skip to subscriber 4.18ns 3.4326 1.22 4.19ns

switch_on_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
switch_on_next construction from observable via dot + subscribe 4188.75ns 3956.86 1.06 14323.30ns
sending of values from observable via switch_on_next to subscriber 1025.45ns 1052.67 0.97 3533.33ns

take

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take construction from observable via dot + subscribe 273.58ns 234.185 1.17 2465.25ns
sending of values from observable via take to subscriber 6.69ns 7.03862 0.95 7.76ns

take_last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_last construction from observable via dot + subscribe 370.08ns 371.507 1.00 2708.45ns
sending of values from observable via take_last to subscriber 5.33ns 6.68842 0.80 24.64ns

take_until

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_until construction from observable via dot + subscribe 1878.06ns 1655.81 1.13 5812.17ns
sending of values from observable via take_until to subscriber 12.82ns 10.1426 1.26 6.40ns

timeout

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
timeout construction from observable via dot + subscribe with run_loop 2002.85ns 1877.24 1.07 6353.75ns
sending of values from observable via timeout to subscriber with unreachable timeout interval with run_loop 62.94ns 64.7089 0.97 1607.12ns

trampoline scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 24.95ns 20.677 1.21 718.71ns
re-schedule 10 times 140.69ns 147.202 0.96 731.02ns
recursively schedule 10 times 3104.09ns 2983.5 1.04 22035.00ns

window

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
window 3423.33ns 3439.44 1.00 11547.70ns
sending of values from observable via window to subscriber 976.36ns 1134.54 0.86 1884.19ns

with_latest_from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
with_latest_from construction from observable via dot + subscribe 2440.92ns 2332.5 1.05 .
sending of values from observable via with_latest_from to subscriber 45.91ns 42.5637 1.08 .

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ clang-tidy found issue(s) with the introduced code (1/1)

for (int i = 0; i < 10; ++i)
try
{
std::rethrow_exception(err);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ performance-unnecessary-value-param ⚠️
parameter err is passed by value and only copied once; consider moving it to avoid unnecessary copies

Suggested change
std::rethrow_exception(err);
std::rethrow_exception(std::move(err);

for (int i = 0; i < 10; ++i)
try
{
std::rethrow_exception(err);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ performance-unnecessary-value-param ⚠️
parameter err is passed by value and only copied once; consider moving it to avoid unnecessary copies

Suggested change
std::rethrow_exception(err);
std::rethrow_exception(err));

namespace rpp::details
{
template<constraint::decayed_type Type, schedulers::constraint::scheduler TScheduler>
template<constraint::decayed_type Type, constraint::observable_of_type<Type> FallbackObs, schedulers::constraint::scheduler TScheduler>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ clang-diagnostic-error ⚠️
no template named observable_of_type in namespace rpp::constraint; did you mean observer_of_type?

Suggested change
template<constraint::decayed_type Type, constraint::observable_of_type<Type> FallbackObs, schedulers::constraint::scheduler TScheduler>
template<constraint::decayed_type Type, constraint::observer_of_type<Type> FallbackObs, schedulers::constraint::scheduler TScheduler>

* \ingroup utility_operators
* \see https://reactivex.io/documentation/operators/timeout.html
*/
template<constraint::observable_of_type<Type> FallbackObs, schedulers::constraint::scheduler TScheduler>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ clang-diagnostic-error ⚠️
no template named observable_of_type in namespace rpp::constraint; did you mean observer_of_type?

Suggested change
template<constraint::observable_of_type<Type> FallbackObs, schedulers::constraint::scheduler TScheduler>
template<constraint::observer_of_type<Type> FallbackObs, schedulers::constraint::scheduler TScheduler>

return static_cast<const SpecificObservable*>(this)->template lift<Type>(timeout_impl<Type, std::decay_t<FallbackObs>, TScheduler>{period, std::forward<FallbackObs>(fallback_obs), scheduler});
}

template<constraint::observable_of_type<Type> FallbackObs,schedulers::constraint::scheduler TScheduler>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ clang-diagnostic-error ⚠️
no template named observable_of_type in namespace rpp::constraint; did you mean observer_of_type?

Suggested change
template<constraint::observable_of_type<Type> FallbackObs,schedulers::constraint::scheduler TScheduler>
template<constraint::observer_of_type<Type> FallbackObs,schedulers::constraint::scheduler TScheduler>

auto timeout(schedulers::duration period, const TScheduler& scheduler = TScheduler{}) const & requires is_header_included<timeout_tag, TScheduler>
{
return static_cast<const SpecificObservable*>(this)->template lift<Type>(timeout_impl<Type, TScheduler>{period, scheduler});
return timeout(period, rpp::source::error<Type>(std::make_exception_ptr(utils::timeout{"Timeout reached"})), scheduler);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ clang-diagnostic-error ⚠️
no member named timeout in namespace rpp::utils

auto timeout(schedulers::duration period, const TScheduler& scheduler = TScheduler{}) && requires is_header_included<timeout_tag, TScheduler>
{
return std::move(*static_cast<SpecificObservable*>(this)).template lift<Type>(timeout_impl<Type, TScheduler>{period, scheduler});
return std::move(*static_cast<SpecificObservable*>(this)).timeout(period, rpp::source::error<Type>(std::make_exception_ptr(utils::timeout{"Timeout reached"})), scheduler);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ clang-diagnostic-error ⚠️
no member named timeout in namespace rpp::utils

@sonarqubecloud

sonarqubecloud Bot commented Dec 2, 2022

Copy link
Copy Markdown

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

0.0% 0.0% Coverage
0.0% 0.0% Duplication

@AlexInLog AlexInLog merged commit 6c1815e into main Dec 2, 2022
@AlexInLog AlexInLog deleted the timeout_fallback branch December 2, 2022 20:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant