Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add notes on .bind usage for event listeners #4678

Merged
merged 1 commit into from
Oct 22, 2022

Conversation

dapplion
Copy link
Contributor

Motivation

From here I reviewed existing usage of .bind() for event listeners. There were two usages that IMO required clarification

this.chain.emitter.on(ChainEvent.clockEpoch, this.onEpoch);
this.chain.emitter.on(ChainEvent.lightClientFinalityUpdate, this.onLightclientFinalityUpdate.bind(this));
this.chain.emitter.on(ChainEvent.lightClientOptimisticUpdate, this.onLightclientOptimisticUpdate.bind(this));
modules.signal.addEventListener("abort", this.close.bind(this), {once: true});

Description

Add notes on .bind usage for event listeners

@dapplion dapplion requested a review from a team as a code owner October 21, 2022 13:51
@github-actions
Copy link
Contributor

Performance Report

✔️ no performance regression detected

Full benchmark results
Benchmark suite Current: da9e0c7 Previous: 9c327fa Ratio
getPubkeys - index2pubkey - req 1000 vs - 250000 vc 2.0471 ms/op 2.4870 ms/op 0.82
getPubkeys - validatorsArr - req 1000 vs - 250000 vc 74.104 us/op 76.625 us/op 0.97
BLS verify - blst-native 2.4383 ms/op 1.8557 ms/op 1.31
BLS verifyMultipleSignatures 3 - blst-native 4.9342 ms/op 3.8048 ms/op 1.30
BLS verifyMultipleSignatures 8 - blst-native 10.492 ms/op 8.2002 ms/op 1.28
BLS verifyMultipleSignatures 32 - blst-native 38.533 ms/op 29.678 ms/op 1.30
BLS aggregatePubkeys 32 - blst-native 53.413 us/op 39.229 us/op 1.36
BLS aggregatePubkeys 128 - blst-native 204.83 us/op 153.62 us/op 1.33
getAttestationsForBlock 93.987 ms/op 90.586 ms/op 1.04
isKnown best case - 1 super set check 455.00 ns/op 458.00 ns/op 0.99
isKnown normal case - 2 super set checks 431.00 ns/op 443.00 ns/op 0.97
isKnown worse case - 16 super set checks 437.00 ns/op 455.00 ns/op 0.96
CheckpointStateCache - add get delete 9.8440 us/op 8.8470 us/op 1.11
validate gossip signedAggregateAndProof - struct 5.4593 ms/op 4.2691 ms/op 1.28
validate gossip attestation - struct 2.6018 ms/op 2.0370 ms/op 1.28
pickEth1Vote - no votes 2.1435 ms/op 2.2061 ms/op 0.97
pickEth1Vote - max votes 19.723 ms/op 21.430 ms/op 0.92
pickEth1Vote - Eth1Data hashTreeRoot value x2048 12.540 ms/op 11.310 ms/op 1.11
pickEth1Vote - Eth1Data hashTreeRoot tree x2048 20.687 ms/op 21.766 ms/op 0.95
pickEth1Vote - Eth1Data fastSerialize value x2048 1.6024 ms/op 1.5349 ms/op 1.04
pickEth1Vote - Eth1Data fastSerialize tree x2048 12.569 ms/op 14.791 ms/op 0.85
bytes32 toHexString 1.0770 us/op 1.0830 us/op 0.99
bytes32 Buffer.toString(hex) 705.00 ns/op 722.00 ns/op 0.98
bytes32 Buffer.toString(hex) from Uint8Array 1.0020 us/op 1.0460 us/op 0.96
bytes32 Buffer.toString(hex) + 0x 736.00 ns/op 711.00 ns/op 1.04
Object access 1 prop 0.35800 ns/op 0.36700 ns/op 0.98
Map access 1 prop 0.31600 ns/op 0.30100 ns/op 1.05
Object get x1000 14.850 ns/op 17.578 ns/op 0.84
Map get x1000 0.87400 ns/op 0.98800 ns/op 0.88
Object set x1000 100.04 ns/op 127.04 ns/op 0.79
Map set x1000 71.594 ns/op 75.328 ns/op 0.95
Return object 10000 times 0.37600 ns/op 0.37680 ns/op 1.00
Throw Error 10000 times 7.2051 us/op 6.1080 us/op 1.18
fastMsgIdFn sha256 / 200 bytes 4.8620 us/op 4.2640 us/op 1.14
fastMsgIdFn h32 xxhash / 200 bytes 546.00 ns/op 549.00 ns/op 0.99
fastMsgIdFn h64 xxhash / 200 bytes 742.00 ns/op 649.00 ns/op 1.14
fastMsgIdFn sha256 / 1000 bytes 15.207 us/op 13.285 us/op 1.14
fastMsgIdFn h32 xxhash / 1000 bytes 725.00 ns/op 712.00 ns/op 1.02
fastMsgIdFn h64 xxhash / 1000 bytes 795.00 ns/op 837.00 ns/op 0.95
fastMsgIdFn sha256 / 10000 bytes 134.50 us/op 112.70 us/op 1.19
fastMsgIdFn h32 xxhash / 10000 bytes 2.4240 us/op 2.3890 us/op 1.01
fastMsgIdFn h64 xxhash / 10000 bytes 1.7640 us/op 1.7590 us/op 1.00
enrSubnets - fastDeserialize 64 bits 2.8060 us/op 2.7160 us/op 1.03
enrSubnets - ssz BitVector 64 bits 791.00 ns/op 762.00 ns/op 1.04
enrSubnets - fastDeserialize 4 bits 399.00 ns/op 378.00 ns/op 1.06
enrSubnets - ssz BitVector 4 bits 788.00 ns/op 738.00 ns/op 1.07
prioritizePeers score -10:0 att 32-0.1 sync 2-0 98.607 us/op 94.357 us/op 1.05
prioritizePeers score 0:0 att 32-0.25 sync 2-0.25 136.53 us/op 123.21 us/op 1.11
prioritizePeers score 0:0 att 32-0.5 sync 2-0.5 242.57 us/op 215.30 us/op 1.13
prioritizePeers score 0:0 att 64-0.75 sync 4-0.75 548.46 us/op 471.97 us/op 1.16
prioritizePeers score 0:0 att 64-1 sync 4-1 574.75 us/op 462.66 us/op 1.24
RateTracker 1000000 limit, 1 obj count per request 183.66 ns/op 204.29 ns/op 0.90
RateTracker 1000000 limit, 2 obj count per request 135.18 ns/op 155.63 ns/op 0.87
RateTracker 1000000 limit, 4 obj count per request 113.57 ns/op 134.66 ns/op 0.84
RateTracker 1000000 limit, 8 obj count per request 106.46 ns/op 121.60 ns/op 0.88
RateTracker with prune 4.7070 us/op 4.8240 us/op 0.98
array of 16000 items push then shift 4.6968 us/op 3.2010 us/op 1.47
LinkedList of 16000 items push then shift 18.618 ns/op 19.037 ns/op 0.98
array of 16000 items push then pop 226.02 ns/op 241.49 ns/op 0.94
LinkedList of 16000 items push then pop 16.325 ns/op 17.053 ns/op 0.96
array of 24000 items push then shift 7.0548 us/op 4.5568 us/op 1.55
LinkedList of 24000 items push then shift 17.886 ns/op 23.345 ns/op 0.77
array of 24000 items push then pop 215.65 ns/op 209.31 ns/op 1.03
LinkedList of 24000 items push then pop 17.561 ns/op 19.202 ns/op 0.91
intersect bitArray bitLen 8 11.083 ns/op 11.764 ns/op 0.94
intersect array and set length 8 173.22 ns/op 165.06 ns/op 1.05
intersect bitArray bitLen 128 62.990 ns/op 72.097 ns/op 0.87
intersect array and set length 128 2.1472 us/op 2.2875 us/op 0.94
Buffer.concat 32 items 2.0390 ns/op 1.9300 ns/op 1.06
pass gossip attestations to forkchoice per slot 4.0301 ms/op 4.0643 ms/op 0.99
computeDeltas 5.0152 ms/op 6.1263 ms/op 0.82
computeProposerBoostScoreFromBalances 783.75 us/op 907.73 us/op 0.86
altair processAttestation - 250000 vs - 7PWei normalcase 4.0372 ms/op 4.0008 ms/op 1.01
altair processAttestation - 250000 vs - 7PWei worstcase 6.2367 ms/op 5.8500 ms/op 1.07
altair processAttestation - setStatus - 1/6 committees join 225.18 us/op 210.95 us/op 1.07
altair processAttestation - setStatus - 1/3 committees join 435.78 us/op 403.80 us/op 1.08
altair processAttestation - setStatus - 1/2 committees join 607.12 us/op 562.53 us/op 1.08
altair processAttestation - setStatus - 2/3 committees join 857.73 us/op 737.05 us/op 1.16
altair processAttestation - setStatus - 4/5 committees join 1.0797 ms/op 1.0034 ms/op 1.08
altair processAttestation - setStatus - 100% committees join 1.3855 ms/op 1.1788 ms/op 1.18
altair processBlock - 250000 vs - 7PWei normalcase 27.941 ms/op 28.879 ms/op 0.97
altair processBlock - 250000 vs - 7PWei normalcase hashState 43.358 ms/op 45.490 ms/op 0.95
altair processBlock - 250000 vs - 7PWei worstcase 98.178 ms/op 84.485 ms/op 1.16
altair processBlock - 250000 vs - 7PWei worstcase hashState 112.72 ms/op 114.86 ms/op 0.98
phase0 processBlock - 250000 vs - 7PWei normalcase 4.1847 ms/op 3.6812 ms/op 1.14
phase0 processBlock - 250000 vs - 7PWei worstcase 57.371 ms/op 47.066 ms/op 1.22
altair processEth1Data - 250000 vs - 7PWei normalcase 1.0900 ms/op 844.64 us/op 1.29
Tree 40 250000 create 936.77 ms/op 856.65 ms/op 1.09
Tree 40 250000 get(125000) 294.31 ns/op 300.23 ns/op 0.98
Tree 40 250000 set(125000) 3.6536 us/op 2.7137 us/op 1.35
Tree 40 250000 toArray() 34.248 ms/op 34.298 ms/op 1.00
Tree 40 250000 iterate all - toArray() + loop 35.326 ms/op 34.447 ms/op 1.03
Tree 40 250000 iterate all - get(i) 129.00 ms/op 114.53 ms/op 1.13
MutableVector 250000 create 13.888 ms/op 17.741 ms/op 0.78
MutableVector 250000 get(125000) 20.919 ns/op 13.156 ns/op 1.59
MutableVector 250000 set(125000) 725.69 ns/op 686.51 ns/op 1.06
MutableVector 250000 toArray() 6.5555 ms/op 7.7278 ms/op 0.85
MutableVector 250000 iterate all - toArray() + loop 6.8969 ms/op 7.9816 ms/op 0.86
MutableVector 250000 iterate all - get(i) 3.1209 ms/op 3.4414 ms/op 0.91
Array 250000 create 6.1302 ms/op 7.2173 ms/op 0.85
Array 250000 clone - spread 3.5191 ms/op 3.7651 ms/op 0.93
Array 250000 get(125000) 1.4490 ns/op 1.6040 ns/op 0.90
Array 250000 set(125000) 1.4810 ns/op 1.5960 ns/op 0.93
Array 250000 iterate all - loop 125.84 us/op 167.83 us/op 0.75
effectiveBalanceIncrements clone Uint8Array 300000 94.502 us/op 95.551 us/op 0.99
effectiveBalanceIncrements clone MutableVector 300000 1.1540 us/op 1.1670 us/op 0.99
effectiveBalanceIncrements rw all Uint8Array 300000 262.45 us/op 252.47 us/op 1.04
effectiveBalanceIncrements rw all MutableVector 300000 236.30 ms/op 228.08 ms/op 1.04
phase0 afterProcessEpoch - 250000 vs - 7PWei 174.44 ms/op 185.58 ms/op 0.94
phase0 beforeProcessEpoch - 250000 vs - 7PWei 102.43 ms/op 78.455 ms/op 1.31
altair processEpoch - mainnet_e81889 626.06 ms/op 600.65 ms/op 1.04
mainnet_e81889 - altair beforeProcessEpoch 160.90 ms/op 168.42 ms/op 0.96
mainnet_e81889 - altair processJustificationAndFinalization 80.971 us/op 29.338 us/op 2.76
mainnet_e81889 - altair processInactivityUpdates 11.456 ms/op 13.941 ms/op 0.82
mainnet_e81889 - altair processRewardsAndPenalties 99.863 ms/op 95.950 ms/op 1.04
mainnet_e81889 - altair processRegistryUpdates 23.199 us/op 4.6590 us/op 4.98
mainnet_e81889 - altair processSlashings 5.9360 us/op 835.00 ns/op 7.11
mainnet_e81889 - altair processEth1DataReset 7.3630 us/op 812.00 ns/op 9.07
mainnet_e81889 - altair processEffectiveBalanceUpdates 2.8372 ms/op 2.4661 ms/op 1.15
mainnet_e81889 - altair processSlashingsReset 33.373 us/op 6.4250 us/op 5.19
mainnet_e81889 - altair processRandaoMixesReset 40.986 us/op 7.4090 us/op 5.53
mainnet_e81889 - altair processHistoricalRootsUpdate 4.9490 us/op 1.1900 us/op 4.16
mainnet_e81889 - altair processParticipationFlagUpdates 28.775 us/op 3.9680 us/op 7.25
mainnet_e81889 - altair processSyncCommitteeUpdates 5.1850 us/op 851.00 ns/op 6.09
mainnet_e81889 - altair afterProcessEpoch 192.50 ms/op 194.45 ms/op 0.99
phase0 processEpoch - mainnet_e58758 574.35 ms/op 544.79 ms/op 1.05
mainnet_e58758 - phase0 beforeProcessEpoch 278.48 ms/op 249.14 ms/op 1.12
mainnet_e58758 - phase0 processJustificationAndFinalization 69.011 us/op 23.044 us/op 2.99
mainnet_e58758 - phase0 processRewardsAndPenalties 128.68 ms/op 144.49 ms/op 0.89
mainnet_e58758 - phase0 processRegistryUpdates 44.363 us/op 12.145 us/op 3.65
mainnet_e58758 - phase0 processSlashings 5.1700 us/op 1.0670 us/op 4.85
mainnet_e58758 - phase0 processEth1DataReset 6.6000 us/op 978.00 ns/op 6.75
mainnet_e58758 - phase0 processEffectiveBalanceUpdates 2.2351 ms/op 2.4750 ms/op 0.90
mainnet_e58758 - phase0 processSlashingsReset 33.466 us/op 6.0290 us/op 5.55
mainnet_e58758 - phase0 processRandaoMixesReset 39.380 us/op 7.7360 us/op 5.09
mainnet_e58758 - phase0 processHistoricalRootsUpdate 7.7430 us/op 1.3320 us/op 5.81
mainnet_e58758 - phase0 processParticipationRecordUpdates 32.072 us/op 5.1920 us/op 6.18
mainnet_e58758 - phase0 afterProcessEpoch 153.66 ms/op 159.16 ms/op 0.97
phase0 processEffectiveBalanceUpdates - 250000 normalcase 2.3115 ms/op 2.7623 ms/op 0.84
phase0 processEffectiveBalanceUpdates - 250000 worstcase 0.5 2.6650 ms/op 3.6325 ms/op 0.73
altair processInactivityUpdates - 250000 normalcase 46.355 ms/op 43.726 ms/op 1.06
altair processInactivityUpdates - 250000 worstcase 56.720 ms/op 54.871 ms/op 1.03
phase0 processRegistryUpdates - 250000 normalcase 46.514 us/op 10.201 us/op 4.56
phase0 processRegistryUpdates - 250000 badcase_full_deposits 561.69 us/op 470.25 us/op 1.19
phase0 processRegistryUpdates - 250000 worstcase 0.5 220.50 ms/op 223.31 ms/op 0.99
altair processRewardsAndPenalties - 250000 normalcase 135.23 ms/op 131.95 ms/op 1.02
altair processRewardsAndPenalties - 250000 worstcase 86.472 ms/op 89.432 ms/op 0.97
phase0 getAttestationDeltas - 250000 normalcase 13.169 ms/op 13.516 ms/op 0.97
phase0 getAttestationDeltas - 250000 worstcase 13.089 ms/op 14.003 ms/op 0.93
phase0 processSlashings - 250000 worstcase 5.6707 ms/op 5.3380 ms/op 1.06
altair processSyncCommitteeUpdates - 250000 301.90 ms/op 291.50 ms/op 1.04
BeaconState.hashTreeRoot - No change 567.00 ns/op 495.00 ns/op 1.15
BeaconState.hashTreeRoot - 1 full validator 69.744 us/op 65.699 us/op 1.06
BeaconState.hashTreeRoot - 32 full validator 781.98 us/op 746.53 us/op 1.05
BeaconState.hashTreeRoot - 512 full validator 9.4073 ms/op 6.5670 ms/op 1.43
BeaconState.hashTreeRoot - 1 validator.effectiveBalance 100.55 us/op 81.341 us/op 1.24
BeaconState.hashTreeRoot - 32 validator.effectiveBalance 1.3899 ms/op 1.2158 ms/op 1.14
BeaconState.hashTreeRoot - 512 validator.effectiveBalance 17.663 ms/op 15.878 ms/op 1.11
BeaconState.hashTreeRoot - 1 balances 69.376 us/op 63.326 us/op 1.10
BeaconState.hashTreeRoot - 32 balances 662.70 us/op 615.77 us/op 1.08
BeaconState.hashTreeRoot - 512 balances 6.5136 ms/op 5.9931 ms/op 1.09
BeaconState.hashTreeRoot - 250000 balances 114.00 ms/op 87.664 ms/op 1.30
aggregationBits - 2048 els - zipIndexesInBitList 35.231 us/op 33.064 us/op 1.07
regular array get 100000 times 50.762 us/op 67.373 us/op 0.75
wrappedArray get 100000 times 51.898 us/op 67.386 us/op 0.77
arrayWithProxy get 100000 times 30.892 ms/op 28.935 ms/op 1.07
ssz.Root.equals 539.00 ns/op 468.00 ns/op 1.15
byteArrayEquals 530.00 ns/op 468.00 ns/op 1.13
shuffle list - 16384 els 12.182 ms/op 11.061 ms/op 1.10
shuffle list - 250000 els 153.96 ms/op 162.70 ms/op 0.95
processSlot - 1 slots 15.325 us/op 12.726 us/op 1.20
processSlot - 32 slots 2.1159 ms/op 1.8362 ms/op 1.15
getEffectiveBalanceIncrementsZeroInactive - 250000 vs - 7PWei 383.95 us/op 411.42 us/op 0.93
getCommitteeAssignments - req 1 vs - 250000 vc 4.8574 ms/op 5.2732 ms/op 0.92
getCommitteeAssignments - req 100 vs - 250000 vc 6.8601 ms/op 7.3444 ms/op 0.93
getCommitteeAssignments - req 1000 vs - 250000 vc 7.3783 ms/op 7.8540 ms/op 0.94
RootCache.getBlockRootAtSlot - 250000 vs - 7PWei 8.2300 ns/op 9.8900 ns/op 0.83
state getBlockRootAtSlot - 250000 vs - 7PWei 1.0767 us/op 1.1697 us/op 0.92
computeProposers - vc 250000 18.224 ms/op 17.128 ms/op 1.06
computeEpochShuffling - vc 250000 157.03 ms/op 165.99 ms/op 0.95
getNextSyncCommittee - vc 250000 300.33 ms/op 284.89 ms/op 1.05

by benchmarkbot/action

@wemeetagain wemeetagain merged commit 2aac3d8 into unstable Oct 22, 2022
@wemeetagain wemeetagain deleted the dapplion/bind-usage branch October 22, 2022 15:57
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