Skip to content

Hide disposables inside disposable_wrapper#515

Merged
AlexInLog merged 10 commits into
v2from
feature/refactor_disposables_4
Jan 29, 2024
Merged

Hide disposables inside disposable_wrapper#515
AlexInLog merged 10 commits into
v2from
feature/refactor_disposables_4

Conversation

@AlexInLog

@AlexInLog AlexInLog commented Jan 28, 2024

Copy link
Copy Markdown
Owner

For now disposable can be created manually from shared_ptr. It has 2 major disadvantages:

  1. users have to call make_shared manually
  2. we can't control process of creation of disposables

This PR forces disposables to be created via wrapper to eliminate this issues

@AlexInLog AlexInLog changed the title Hide disposables indie disposable_wrapper Hide disposables inside disposable_wrapper Jan 28, 2024
@github-actions

github-actions Bot commented Jan 28, 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 299.96 ns 2.16 ns 2.16 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 298.67 ns 2.16 ns 2.16 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 688.69 ns 0.31 ns 0.31 ns 1.00
from array of 1 - create + subscribe + current_thread 1026.44 ns 4.63 ns 5.25 ns 0.88
concat_as_source of just(1 immediate) create + subscribe 2302.13 ns 108.18 ns 80.50 ns 1.34
defer from array of 1 - defer + create + subscribe + immediate 725.95 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 2133.95 ns 57.98 ns 58.01 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3041.36 ns 32.16 ns 32.11 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1070.90 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 819.05 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 994.07 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 841.99 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1232.26 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 914.64 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 1090.79 ns 17.28 ns 17.90 ns 0.97

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 275.57 ns 2.16 ns 2.16 ns 1.00
current_thread scheduler create worker + schedule 366.11 ns 6.17 ns 7.10 ns 0.87
current_thread scheduler create worker + schedule + recursive schedule 814.86 ns 63.94 ns 63.88 ns 1.00

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 825.09 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 882.07 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 2300.61 ns 151.84 ns 112.13 ns 1.35
immediate_just+buffer(2)+subscribe 1513.96 ns 13.58 ns 14.20 ns 0.96
immediate_just+window(2)+subscribe + subscsribe inner 2324.16 ns 942.91 ns 600.49 ns 1.57

Conditional Operators

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

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 1958.90 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 3506.72 ns 166.14 ns 137.62 ns 1.21
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3660.85 ns 152.99 ns 122.16 ns 1.25
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 132.61 ns 99.18 ns 1.34
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3595.07 ns 904.90 ns 484.12 ns 1.87

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 34.60 ns 12.03 ns 11.41 ns 1.05

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1325.19 ns 14.81 ns 14.19 ns 1.04
basic sample with immediate scheduler 1382.83 ns 5.55 ns 5.55 ns 1.00

Aggregating Operators

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

ci-macos

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 1089.57 ns 5.38 ns 12.03 ns 0.45
Subscribe empty callbacks to empty observable via pipe operator 1062.88 ns 5.31 ns 5.75 ns 0.92

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 2250.80 ns 0.43 ns 0.46 ns 0.93
from array of 1 - create + subscribe + current_thread 2869.90 ns 8.40 ns 12.64 ns 0.66
concat_as_source of just(1 immediate) create + subscribe 6895.52 ns 395.35 ns 314.30 ns 1.26
defer from array of 1 - defer + create + subscribe + immediate 2369.73 ns 0.27 ns 0.30 ns 0.91
interval - interval + take(3) + subscribe + immediate 6276.26 ns 88.37 ns 93.91 ns 0.94
interval - interval + take(3) + subscribe + current_thread 7556.30 ns 60.22 ns 60.39 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 3417.10 ns 0.27 ns 0.31 ns 0.88
immediate_just+filter(true)+subscribe 2499.36 ns 0.28 ns 0.45 ns 0.63
immediate_just(1,2)+skip(1)+subscribe 3307.05 ns 0.28 ns 0.37 ns 0.76
immediate_just(1,1,2)+distinct_until_changed()+subscribe 2455.55 ns 0.56 ns 0.59 ns 0.95
immediate_just(1,2)+first()+subscribe 3848.75 ns 0.28 ns 0.28 ns 0.99
immediate_just(1,2)+last()+subscribe 2886.73 ns 0.28 ns 0.40 ns 0.70
immediate_just+take_last(1)+subscribe 3736.86 ns 79.35 ns 117.09 ns 0.68

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 981.03 ns 5.73 ns 6.22 ns 0.92
current_thread scheduler create worker + schedule 1286.60 ns 15.35 ns 20.68 ns 0.74
current_thread scheduler create worker + schedule + recursive schedule 2251.99 ns 207.60 ns 180.65 ns 1.15

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 2519.02 ns 0.27 ns 0.28 ns 0.95
immediate_just+scan(10, std::plus)+subscribe 2773.53 ns 0.56 ns 0.62 ns 0.89
immediate_just+flat_map(immediate_just(v*2))+subscribe 6400.54 ns 452.16 ns 394.25 ns 1.15
immediate_just+buffer(2)+subscribe 2934.91 ns 69.54 ns 68.36 ns 1.02
immediate_just+window(2)+subscribe + subscsribe inner 6203.12 ns 2524.77 ns 4717.06 ns 0.54

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 2435.11 ns - - 0.00
immediate_just+take_while(true)+subscribe 2518.59 ns 0.28 ns 0.28 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 5982.18 ns 0.28 ns 0.28 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 9128.68 ns 506.01 ns 562.46 ns 0.90
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 10176.11 ns 530.62 ns 424.86 ns 1.25
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 508.06 ns 440.99 ns 1.15
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 9928.63 ns 2341.42 ns 1870.87 ns 1.25

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 96.61 ns 61.49 ns 49.94 ns 1.23

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 3317.72 ns 44.76 ns 47.75 ns 0.94
basic sample with immediate scheduler 3380.12 ns 5.84 ns 8.03 ns 0.73

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 2874.31 ns 0.28 ns 0.28 ns 0.99

ci-ubuntu-clang

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 266.01 ns 1.58 ns 1.57 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 264.86 ns 1.57 ns 1.57 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 550.90 ns 0.42 ns 0.31 ns 1.36
from array of 1 - create + subscribe + current_thread 780.20 ns 5.55 ns 5.55 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 1973.26 ns 106.23 ns 72.18 ns 1.47
defer from array of 1 - defer + create + subscribe + immediate 581.71 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 1535.19 ns 57.07 ns 57.18 ns 1.00
interval - interval + take(3) + subscribe + current_thread 2123.03 ns 30.86 ns 30.86 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 922.89 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 650.56 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 837.20 ns 0.33 ns 0.31 ns 1.06
immediate_just(1,1,2)+distinct_until_changed()+subscribe 692.27 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1112.24 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 753.81 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 958.28 ns 0.39 ns 0.31 ns 1.25

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 194.80 ns 1.57 ns 1.56 ns 1.00
current_thread scheduler create worker + schedule 305.23 ns 5.57 ns 5.57 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 619.43 ns 59.66 ns 58.32 ns 1.02

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 684.91 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 703.77 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 1764.37 ns 117.94 ns 84.77 ns 1.39
immediate_just+buffer(2)+subscribe 1367.39 ns 14.20 ns 14.19 ns 1.00
immediate_just+window(2)+subscribe + subscsribe inner 2132.82 ns 747.69 ns 609.05 ns 1.23

Conditional Operators

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

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 1588.64 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 2572.19 ns 124.03 ns 91.94 ns 1.35
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3131.81 ns 117.61 ns 87.58 ns 1.34
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 109.06 ns 84.23 ns 1.29
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 2654.73 ns 724.11 ns 544.83 ns 1.33

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 23.26 ns 16.44 ns 13.57 ns 1.21

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1024.71 ns 13.66 ns 13.91 ns 0.98
basic sample with immediate scheduler 1072.30 ns 6.17 ns 5.86 ns 1.05

Aggregating Operators

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

ci-windows

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 581.24 ns 4.01 ns 4.94 ns 0.81
Subscribe empty callbacks to empty observable via pipe operator 592.76 ns 4.01 ns 4.94 ns 0.81

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1540.83 ns 7.10 ns 5.55 ns 1.28
from array of 1 - create + subscribe + current_thread 1892.59 ns 25.09 ns 19.74 ns 1.27
concat_as_source of just(1 immediate) create + subscribe 4653.63 ns 172.56 ns 162.10 ns 1.06
defer from array of 1 - defer + create + subscribe + immediate 1212.31 ns 5.24 ns 5.55 ns 0.94
interval - interval + take(3) + subscribe + immediate 3105.17 ns 129.67 ns 131.72 ns 0.98
interval - interval + take(3) + subscribe + current_thread 3443.89 ns 60.75 ns 59.52 ns 1.02

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1891.39 ns 12.90 ns 12.86 ns 1.00
immediate_just+filter(true)+subscribe 1332.41 ns 12.35 ns 12.36 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 1808.16 ns 13.11 ns 13.24 ns 0.99
immediate_just(1,1,2)+distinct_until_changed()+subscribe 1449.71 ns 15.94 ns 15.84 ns 1.01
immediate_just(1,2)+first()+subscribe 2155.16 ns 12.98 ns 12.64 ns 1.03
immediate_just(1,2)+last()+subscribe 1516.96 ns 14.11 ns 14.11 ns 1.00
immediate_just+take_last(1)+subscribe 2067.68 ns 59.99 ns 60.79 ns 0.99

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 488.38 ns 7.40 ns 7.40 ns 1.00
current_thread scheduler create worker + schedule 660.39 ns 17.21 ns 17.59 ns 0.98
current_thread scheduler create worker + schedule + recursive schedule 1368.70 ns 107.42 ns 108.72 ns 0.99

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 1329.62 ns 12.33 ns 12.33 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 1453.26 ns 21.28 ns 21.62 ns 0.98
immediate_just+flat_map(immediate_just(v*2))+subscribe 3916.04 ns 228.72 ns 194.68 ns 1.17
immediate_just+buffer(2)+subscribe 2339.91 ns 60.18 ns 59.80 ns 1.01
immediate_just+window(2)+subscribe + subscsribe inner 4121.96 ns 1122.01 ns 1073.85 ns 1.04

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 1331.05 ns 11.46 ns 11.48 ns 1.00
immediate_just+take_while(true)+subscribe 1336.20 ns 12.42 ns 12.38 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 3556.51 ns 7.40 ns 7.71 ns 0.96

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 5303.12 ns 233.49 ns 219.38 ns 1.06
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 5897.42 ns 231.61 ns 214.08 ns 1.08
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 225.44 ns 229.20 ns 0.98
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 5898.83 ns 938.79 ns 726.02 ns 1.29

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 36.30 ns 26.57 ns 25.90 ns 1.03

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1890.98 ns 59.92 ns 60.26 ns 0.99
basic sample with immediate scheduler 1887.64 ns 34.85 ns 37.64 ns 0.93

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 1476.87 ns 20.93 ns 19.97 ns 1.05

@codecov

codecov Bot commented Jan 28, 2024

Copy link
Copy Markdown

Codecov Report

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

Comparison is base (e97b8eb) 95.91% compared to head (d904072) 95.69%.

Files Patch % Lines
src/rpp/rpp/observables/connectable_observable.hpp 85.71% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##               v2     #515      +/-   ##
==========================================
- Coverage   95.91%   95.69%   -0.22%     
==========================================
  Files          80       80              
  Lines        2055     2093      +38     
==========================================
+ Hits         1971     2003      +32     
- Misses         84       90       +6     

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

@AlexInLog AlexInLog marked this pull request as ready for review January 29, 2024 19:50
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Passed Quality Gate passed

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

3 New issues
0 Security Hotspots
73.9% Coverage on New Code
0.0% Duplication on New Code

See analysis details on SonarCloud

@AlexInLog AlexInLog merged commit a1aa575 into v2 Jan 29, 2024
@AlexInLog AlexInLog deleted the feature/refactor_disposables_4 branch January 29, 2024 20:27
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