Skip to content

Add replay_subject#508

Merged
AlexInLog merged 6 commits into
AlexInLog:v2from
CorentinBT:replay_subject
Jan 26, 2024
Merged

Add replay_subject#508
AlexInLog merged 6 commits into
AlexInLog:v2from
CorentinBT:replay_subject

Conversation

@CorentinBT

Copy link
Copy Markdown
Contributor

No description provided.

Comment thread src/tests/rpp/test_subjects.cpp Outdated
Comment thread src/rpp/rpp/subjects/replay_subject.hpp Outdated
Comment thread src/rpp/rpp/subjects/replay_subject.hpp
Comment thread src/rpp/rpp/subjects/replay_subject.hpp Outdated
Comment thread src/rpp/rpp/subjects/replay_subject.hpp Outdated
}

void on_error(const std::exception_ptr& err) const
requires Serialized

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

tricky solution =)

@github-actions

github-actions Bot commented Jan 25, 2024

Copy link
Copy Markdown
Contributor

BENCHMARK RESULTS (AUTOGENERATED)

ci-ubuntu-gcc

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 383.69 ns 2.60 ns 2.16 ns 1.20
Subscribe empty callbacks to empty observable via pipe operator 372.93 ns 2.93 ns 2.16 ns 1.35

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 698.09 ns 0.42 ns 0.31 ns 1.37
from array of 1 - create + subscribe + current_thread 1034.13 ns 5.25 ns 5.25 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 2283.41 ns 80.39 ns 81.92 ns 0.98
defer from array of 1 - defer + create + subscribe + immediate 741.24 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 2160.23 ns 58.00 ns 58.03 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3754.20 ns 50.50 ns 32.12 ns 1.57

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1079.62 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 841.41 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 1010.08 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 857.01 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1279.07 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 936.15 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 1181.60 ns 17.91 ns 17.59 ns 1.02

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 393.60 ns 3.37 ns 2.16 ns 1.56
current_thread scheduler create worker + schedule 377.42 ns 10.27 ns 7.10 ns 1.45
current_thread scheduler create worker + schedule + recursive schedule 813.31 ns 63.92 ns 64.50 ns 0.99

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 912.52 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 883.07 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 2378.50 ns 112.32 ns 111.29 ns 1.01
immediate_just+buffer(2)+subscribe 1519.85 ns 14.21 ns 13.89 ns 1.02
immediate_just+window(2)+subscribe + subscsribe inner 2413.29 ns 696.73 ns 639.88 ns 1.09

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 856.22 ns - - 0.00
immediate_just+take_while(true)+subscribe 837.47 ns 0.31 ns 0.31 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 2194.04 ns 0.31 ns 0.31 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3529.24 ns 137.74 ns 135.14 ns 1.02
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3757.78 ns 125.27 ns 121.53 ns 1.03
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 99.13 ns 99.70 ns 0.99
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3630.60 ns 494.13 ns 531.26 ns 0.93

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 34.50 ns 11.72 ns 11.71 ns 1.00

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1590.47 ns 14.20 ns 14.20 ns 1.00
basic sample with immediate scheduler 1584.85 ns 5.55 ns 5.55 ns 1.00

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 917.75 ns 0.31 ns 0.31 ns 1.00

ci-macos

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 969.62 ns 3.85 ns 3.86 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 970.21 ns 3.98 ns 4.02 ns 0.99

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1916.80 ns 0.23 ns 0.23 ns 1.00
from array of 1 - create + subscribe + current_thread 2433.49 ns 25.53 ns 25.53 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 5409.14 ns 252.07 ns 257.15 ns 0.98
defer from array of 1 - defer + create + subscribe + immediate 1968.29 ns 0.23 ns 0.23 ns 0.99
interval - interval + take(3) + subscribe + immediate 4942.61 ns 113.89 ns 114.29 ns 1.00
interval - interval + take(3) + subscribe + current_thread 6015.49 ns 106.41 ns 109.39 ns 0.97

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 2859.94 ns 0.23 ns 0.24 ns 0.98
immediate_just+filter(true)+subscribe 2119.96 ns 0.23 ns 0.23 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 2764.72 ns 0.23 ns 0.23 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 2070.38 ns 0.47 ns 0.47 ns 1.00
immediate_just(1,2)+first()+subscribe 3213.53 ns 0.24 ns 0.23 ns 1.01
immediate_just(1,2)+last()+subscribe 2387.41 ns 0.23 ns 0.23 ns 1.00
immediate_just+take_last(1)+subscribe 3025.38 ns 69.58 ns 69.67 ns 1.00

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 851.25 ns 4.04 ns 4.02 ns 1.00
current_thread scheduler create worker + schedule 1182.34 ns 38.60 ns 38.69 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 1980.21 ns 219.01 ns 216.69 ns 1.01

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 2110.99 ns 0.23 ns 0.23 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 2337.02 ns 0.47 ns 0.47 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 5292.77 ns 335.34 ns 336.55 ns 1.00
immediate_just+buffer(2)+subscribe 2494.53 ns 68.21 ns 69.15 ns 0.99
immediate_just+window(2)+subscribe + subscsribe inner 5347.21 ns 1830.61 ns 1847.86 ns 0.99

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 2100.80 ns - - 0.00
immediate_just+take_while(true)+subscribe 2118.05 ns 0.24 ns 0.23 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 4982.71 ns 0.23 ns 0.25 ns 0.92

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 7432.07 ns 373.52 ns 385.81 ns 0.97
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 8357.59 ns 380.47 ns 381.48 ns 1.00
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 400.15 ns 400.70 ns 1.00
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 7941.72 ns 1394.25 ns 1403.38 ns 0.99

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 74.93 ns 38.53 ns 39.17 ns 0.98

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 2741.26 ns 104.62 ns 104.79 ns 1.00
basic sample with immediate scheduler 2745.17 ns 14.54 ns 14.12 ns 1.03

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 2393.67 ns 0.23 ns 0.24 ns 0.99

ci-ubuntu-clang

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 270.31 ns 1.54 ns 0.88 ns 1.76
Subscribe empty callbacks to empty observable via pipe operator 265.39 ns 1.54 ns 0.88 ns 1.76

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 572.17 ns 0.31 ns 0.35 ns 0.89
from array of 1 - create + subscribe + current_thread 843.06 ns 5.56 ns 5.56 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 1990.43 ns 72.37 ns 71.88 ns 1.01
defer from array of 1 - defer + create + subscribe + immediate 592.66 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 1510.48 ns 57.09 ns 57.09 ns 1.00
interval - interval + take(3) + subscribe + current_thread 2124.39 ns 30.88 ns 30.86 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 961.36 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 666.83 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 881.26 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 708.15 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1070.55 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 759.49 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 982.94 ns 0.31 ns 0.31 ns 1.00

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 200.41 ns 1.54 ns 0.88 ns 1.76
current_thread scheduler create worker + schedule 308.74 ns 5.57 ns 5.59 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 634.78 ns 57.97 ns 60.32 ns 0.96

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 675.01 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 720.58 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 1841.36 ns 84.60 ns 82.26 ns 1.03
immediate_just+buffer(2)+subscribe 1368.85 ns 14.82 ns 13.59 ns 1.09
immediate_just+window(2)+subscribe + subscsribe inner 2165.17 ns 602.31 ns 586.10 ns 1.03

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 678.00 ns - - 0.00
immediate_just+take_while(true)+subscribe 671.26 ns 0.31 ns 0.31 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 1660.26 ns 0.31 ns 0.31 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 2588.92 ns 92.81 ns 90.94 ns 1.02
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3095.98 ns 88.69 ns 86.34 ns 1.03
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 85.81 ns 83.20 ns 1.03
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 2766.87 ns 545.47 ns 555.58 ns 0.98

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 23.00 ns 13.88 ns 13.26 ns 1.05

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1047.40 ns 13.89 ns 13.89 ns 1.00
basic sample with immediate scheduler 1056.90 ns 5.86 ns 5.86 ns 1.00

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 751.90 ns 0.31 ns 0.31 ns 1.00

ci-windows

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 573.84 ns 4.94 ns 4.53 ns 1.09
Subscribe empty callbacks to empty observable via pipe operator 587.78 ns 4.94 ns 4.01 ns 1.23

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1182.05 ns 5.55 ns 5.77 ns 0.96
from array of 1 - create + subscribe + current_thread 1443.64 ns 19.76 ns 20.38 ns 0.97
concat_as_source of just(1 immediate) create + subscribe 4635.32 ns 163.65 ns 170.29 ns 0.96
defer from array of 1 - defer + create + subscribe + immediate 1223.84 ns 5.55 ns 5.55 ns 1.00
interval - interval + take(3) + subscribe + immediate 3162.85 ns 131.56 ns 137.32 ns 0.96
interval - interval + take(3) + subscribe + current_thread 3467.37 ns 59.55 ns 60.79 ns 0.98

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1856.15 ns 12.86 ns 12.87 ns 1.00
immediate_just+filter(true)+subscribe 1376.74 ns 12.35 ns 12.36 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 1788.48 ns 13.25 ns 13.24 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 1374.83 ns 15.83 ns 16.27 ns 0.97
immediate_just(1,2)+first()+subscribe 2425.16 ns 12.64 ns 13.46 ns 0.94
immediate_just(1,2)+last()+subscribe 1509.71 ns 14.11 ns 14.21 ns 0.99
immediate_just+take_last(1)+subscribe 2155.08 ns 59.01 ns 64.95 ns 0.91

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 493.58 ns 7.41 ns 7.42 ns 1.00
current_thread scheduler create worker + schedule 667.04 ns 17.60 ns 17.15 ns 1.03
current_thread scheduler create worker + schedule + recursive schedule 1113.00 ns 108.53 ns 108.65 ns 1.00

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 1369.33 ns 12.30 ns 12.34 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 1441.40 ns 21.59 ns 21.95 ns 0.98
immediate_just+flat_map(immediate_just(v*2))+subscribe 3551.01 ns 195.68 ns 196.37 ns 1.00
immediate_just+buffer(2)+subscribe 2670.50 ns 58.13 ns 58.87 ns 0.99
immediate_just+window(2)+subscribe + subscsribe inner 4231.48 ns 1050.10 ns 1180.92 ns 0.89

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 1613.31 ns 11.48 ns 11.56 ns 0.99
immediate_just+take_while(true)+subscribe 1369.38 ns 12.38 ns 13.75 ns 0.90

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 3243.22 ns 7.71 ns 7.71 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 5310.71 ns 224.24 ns 220.64 ns 1.02
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 5995.11 ns 211.86 ns 234.15 ns 0.90
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 227.46 ns 243.74 ns 0.93
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 6256.10 ns 722.82 ns 721.11 ns 1.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 36.68 ns 25.91 ns 25.90 ns 1.00

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1917.58 ns 60.05 ns 60.99 ns 0.98
basic sample with immediate scheduler 1897.01 ns 37.66 ns 38.32 ns 0.98

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 1815.77 ns 19.97 ns 20.61 ns 0.97

Comment thread src/rpp/rpp/subjects/replay_subject.hpp Outdated
@codecov

codecov Bot commented Jan 25, 2024

Copy link
Copy Markdown

Codecov Report

Attention: 2 lines in your changes are missing coverage. Please review.

Comparison is base (c5cb2bd) 95.90% compared to head (9c4b009) 95.90%.
Report is 1 commits behind head on v2.

Files Patch % Lines
src/rpp/rpp/subjects/replay_subject.hpp 96.15% 2 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##               v2     #508   +/-   ##
=======================================
  Coverage   95.90%   95.90%           
=======================================
  Files          78       79    +1     
  Lines        2001     2053   +52     
=======================================
+ Hits         1919     1969   +50     
- Misses         82       84    +2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Passed Quality Gate passed

The SonarCloud Quality Gate passed, but some issues were introduced.

5 New issues
0 Security Hotspots
51.3% Coverage on New Code
0.5% Duplication on New Code

See analysis details on SonarCloud

@AlexInLog AlexInLog merged commit c3eb691 into AlexInLog:v2 Jan 26, 2024
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.

2 participants