-
-
Notifications
You must be signed in to change notification settings - Fork 147
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
Introduce Event Timing Control Package with Throttling and Debouncing Mechanism #1166
base: main
Are you sure you want to change the base?
Conversation
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the WalkthroughThis update modifies the dependency management in the Changes
Sequence Diagram(s)sequenceDiagram
participant Client as Client
participant Throttler as Throttler
participant RateLimiter as RateLimiter
participant Callback as Callback
Client->>Throttler: Execute(callback)
Throttler->>RateLimiter: Request token
alt Token available immediately
Throttler->>Callback: Execute callback
else Token unavailable
Throttler->>RateLimiter: Wait for token
RateLimiter-->>Throttler: Token granted
Throttler->>Callback: Execute callback after delay
end
sequenceDiagram
participant Client as Client
participant Throttler as Throttler
participant RateLimiter as RateLimiter
participant Callback as Callback
Client->>Throttler: ExecuteOrSchedule(callback)
Throttler->>RateLimiter: Check token availability
alt Immediate execution allowed
Throttler->>Callback: Execute callback immediately
else Immediate execution denied
Throttler->>Throttler: Schedule callback for later
Throttler->>RateLimiter: Wait for token
RateLimiter-->>Throttler: Token granted
Throttler->>Callback: Execute scheduled callback
end
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Go Benchmark Analysis 📊
This is a comparison result between the previous(e687d61) and the current commit(d8cf598).
Significant Changes (≥20% difference)
Nothing
Key Observations 🔍
- The following benchmark suites showed significant changes (≥20% difference) in their performance:
- BenchmarkVersionVector for
clients_1000
experienced a notable improvement with a decrease in the execution time by 1.18% and a reduction in memory allocation by 0.01%.
- BenchmarkVersionVector for
- While there were no significant changes in other benchmark suites, several benchmarks showed slight improvements (🟢) or regressions (🔴) in performance, highlighting the ongoing optimization efforts in the codebase.
- Overall, the benchmarks demonstrate consistent performance with minor fluctuations, indicating a stable and efficient implementation that can still benefit from occasional optimizations to maintain or enhance performance levels.
Detailed Test Results
BenchmarkDocument
Benchmark suite | Previous | Current | Change |
---|---|---|---|
constructor_test/ (ns/op) | 1439.00 ns | 1440.00 ns | 🔴 +0.07% |
constructor_test/ (B/op) | 1.39 KB | 1.39 KB | ⚪ 0% |
constructor_test/ (allocs/op) | 24 allocs | 24 allocs | ⚪ 0% |
status_test/ (ns/op) | 1028.00 ns | 1020.00 ns | 🟢 -0.78% |
status_test/ (B/op) | 1.35 KB | 1.35 KB | ⚪ 0% |
status_test/ (allocs/op) | 22 allocs | 22 allocs | ⚪ 0% |
equals_test/ (ns/op) | 7864.00 ns | 7761.00 ns | 🟢 -1.31% |
equals_test/ (B/op) | 7.56 KB | 7.56 KB | ⚪ 0% |
equals_test/ (allocs/op) | 129 allocs | 129 allocs | ⚪ 0% |
nested_update_test/ (ns/op) | 17079.00 ns | 16805.00 ns | 🟢 -1.60% |
nested_update_test/ (B/op) | 12.31 KB | 12.31 KB | ⚪ 0% |
nested_update_test/ (allocs/op) | 258 allocs | 258 allocs | ⚪ 0% |
delete_test/ (ns/op) | 27313.00 ns | 26265.00 ns | 🟢 -3.84% |
delete_test/ (B/op) | 15.79 KB | 15.79 KB | 🟢 -0.01% |
delete_test/ (allocs/op) | 339 allocs | 339 allocs | ⚪ 0% |
object_test/ (ns/op) | 8546.00 ns | 8579.00 ns | 🔴 +0.39% |
object_test/ (B/op) | 7.03 KB | 7.03 KB | 🔴 +0.01% |
object_test/ (allocs/op) | 118 allocs | 118 allocs | ⚪ 0% |
array_test/ (ns/op) | 28984.00 ns | 28617.00 ns | 🟢 -1.27% |
array_test/ (B/op) | 12.14 KB | 12.14 KB | ⚪ 0% |
array_test/ (allocs/op) | 273 allocs | 273 allocs | ⚪ 0% |
text_test/ (ns/op) | 32155.00 ns | 31934.00 ns | 🟢 -0.69% |
text_test/ (B/op) | 15.19 KB | 15.19 KB | ⚪ 0% |
text_test/ (allocs/op) | 484 allocs | 484 allocs | ⚪ 0% |
text_composition_test/ (ns/op) | 31674.00 ns | 31689.00 ns | 🔴 +0.05% |
text_composition_test/ (B/op) | 18.70 KB | 18.70 KB | ⚪ 0% |
text_composition_test/ (allocs/op) | 501 allocs | 501 allocs | ⚪ 0% |
rich_text_test/ (ns/op) | 87424.00 ns | 86468.00 ns | 🟢 -1.09% |
rich_text_test/ (B/op) | 39.36 KB | 39.36 KB | ⚪ 0% |
rich_text_test/ (allocs/op) | 1,146 allocs | 1,146 allocs | ⚪ 0% |
counter_test/ (ns/op) | 18201.00 ns | 18087.00 ns | 🟢 -0.63% |
counter_test/ (B/op) | 11.81 KB | 11.81 KB | ⚪ 0% |
counter_test/ (allocs/op) | 253 allocs | 253 allocs | ⚪ 0% |
text_edit_gc_100/ (ns/op) | 1.39 ms | 1.38 ms | 🟢 -0.43% |
text_edit_gc_100/ (B/op) | 864.90 KB | 864.95 KB | ⚪ 0% |
text_edit_gc_100/ (allocs/op) | 17,281 allocs | 17,282 allocs | ⚪ 0% |
text_edit_gc_1000/ (ns/op) | 53.39 ms | 53.14 ms | 🟢 -0.47% |
text_edit_gc_1000/ (B/op) | 46.84 MB | 46.84 MB | ⚪ 0% |
text_edit_gc_1000/ (allocs/op) | 185,598 allocs | 185,591 allocs | ⚪ 0% |
text_split_gc_100/ (ns/op) | 2.12 ms | 2.11 ms | 🟢 -0.50% |
text_split_gc_100/ (B/op) | 1.58 MB | 1.58 MB | ⚪ 0% |
text_split_gc_100/ (allocs/op) | 15,950 allocs | 15,951 allocs | ⚪ 0% |
text_split_gc_1000/ (ns/op) | 128.25 ms | 127.50 ms | 🟢 -0.58% |
text_split_gc_1000/ (B/op) | 137.79 MB | 137.79 MB | ⚪ 0% |
text_split_gc_1000/ (allocs/op) | 185,000 allocs | 185,004 allocs | ⚪ 0% |
text_delete_all_10000/ (ns/op) | 18.43 ms | 16.35 ms | 🟢 -11.29% |
text_delete_all_10000/ (B/op) | 10.58 MB | 10.58 MB | 🔴 +0.02% |
text_delete_all_10000/ (allocs/op) | 56,134 allocs | 56,140 allocs | 🔴 +0.01% |
text_delete_all_100000/ (ns/op) | 312.31 ms | 276.68 ms | 🟢 -11.41% |
text_delete_all_100000/ (B/op) | 105.54 MB | 105.52 MB | 🟢 -0.02% |
text_delete_all_100000/ (allocs/op) | 566,133 allocs | 566,066 allocs | 🟢 -0.01% |
text_100/ (ns/op) | 234634.00 ns | 232480.00 ns | 🟢 -0.92% |
text_100/ (B/op) | 120.94 KB | 120.91 KB | 🟢 -0.03% |
text_100/ (allocs/op) | 5,181 allocs | 5,181 allocs | ⚪ 0% |
text_1000/ (ns/op) | 2.46 ms | 2.46 ms | 🟢 -0.19% |
text_1000/ (B/op) | 1.16 MB | 1.16 MB | ⚪ 0% |
text_1000/ (allocs/op) | 51,084 allocs | 51,084 allocs | ⚪ 0% |
array_1000/ (ns/op) | 1.24 ms | 1.23 ms | 🟢 -0.56% |
array_1000/ (B/op) | 1.09 MB | 1.09 MB | ⚪ 0% |
array_1000/ (allocs/op) | 11,879 allocs | 11,879 allocs | ⚪ 0% |
array_10000/ (ns/op) | 13.33 ms | 13.29 ms | 🟢 -0.35% |
array_10000/ (B/op) | 9.89 MB | 9.89 MB | 🟢 -0.02% |
array_10000/ (allocs/op) | 120,735 allocs | 120,729 allocs | ⚪ 0% |
array_gc_100/ (ns/op) | 131750.00 ns | 132133.00 ns | 🔴 +0.29% |
array_gc_100/ (B/op) | 99.89 KB | 99.88 KB | 🟢 -0.02% |
array_gc_100/ (allocs/op) | 1,266 allocs | 1,266 allocs | ⚪ 0% |
array_gc_1000/ (ns/op) | 1.42 ms | 1.42 ms | 🟢 -0.30% |
array_gc_1000/ (B/op) | 1.14 MB | 1.14 MB | ⚪ 0% |
array_gc_1000/ (allocs/op) | 12,926 allocs | 12,927 allocs | ⚪ 0% |
counter_1000/ (ns/op) | 202098.00 ns | 201524.00 ns | 🟢 -0.28% |
counter_1000/ (B/op) | 178.13 KB | 178.14 KB | ⚪ 0% |
counter_1000/ (allocs/op) | 5,771 allocs | 5,771 allocs | ⚪ 0% |
counter_10000/ (ns/op) | 2.17 ms | 2.16 ms | 🟢 -0.50% |
counter_10000/ (B/op) | 2.07 MB | 2.07 MB | ⚪ 0% |
counter_10000/ (allocs/op) | 59,778 allocs | 59,778 allocs | ⚪ 0% |
object_1000/ (ns/op) | 1.39 ms | 1.39 ms | 🔴 +0.13% |
object_1000/ (B/op) | 1.44 MB | 1.44 MB | ⚪ 0% |
object_1000/ (allocs/op) | 9,925 allocs | 9,924 allocs | 🟢 -0.01% |
object_10000/ (ns/op) | 14.82 ms | 14.57 ms | 🟢 -1.69% |
object_10000/ (B/op) | 12.35 MB | 12.35 MB | ⚪ 0% |
object_10000/ (allocs/op) | 101,232 allocs | 101,237 allocs | ⚪ 0% |
tree_100/ (ns/op) | 1.02 ms | 1.02 ms | 🟢 -0.57% |
tree_100/ (B/op) | 951.02 KB | 951.03 KB | ⚪ 0% |
tree_100/ (allocs/op) | 6,102 allocs | 6,102 allocs | ⚪ 0% |
tree_1000/ (ns/op) | 74.23 ms | 74.53 ms | 🔴 +0.40% |
tree_1000/ (B/op) | 86.58 MB | 86.58 MB | ⚪ 0% |
tree_1000/ (allocs/op) | 60,111 allocs | 60,112 allocs | ⚪ 0% |
tree_10000/ (ns/op) | 9.68 s | 9.37 s | 🟢 -3.21% |
tree_10000/ (B/op) | 8.58 GB | 8.58 GB | ⚪ 0% |
tree_10000/ (allocs/op) | 600,173 allocs | 600,200 allocs | ⚪ 0% |
tree_delete_all_1000/ (ns/op) | 78.41 ms | 79.33 ms | 🔴 +1.17% |
tree_delete_all_1000/ (B/op) | 87.57 MB | 87.57 MB | ⚪ 0% |
tree_delete_all_1000/ (allocs/op) | 75,289 allocs | 75,291 allocs | ⚪ 0% |
tree_edit_gc_100/ (ns/op) | 3.96 ms | 3.88 ms | 🟢 -1.94% |
tree_edit_gc_100/ (B/op) | 4.15 MB | 4.15 MB | ⚪ 0% |
tree_edit_gc_100/ (allocs/op) | 15,147 allocs | 15,146 allocs | ⚪ 0% |
tree_edit_gc_1000/ (ns/op) | 332.75 ms | 318.75 ms | 🟢 -4.21% |
tree_edit_gc_1000/ (B/op) | 384.04 MB | 384.04 MB | ⚪ 0% |
tree_edit_gc_1000/ (allocs/op) | 154,952 allocs | 154,947 allocs | ⚪ 0% |
tree_split_gc_100/ (ns/op) | 2.67 ms | 2.65 ms | 🟢 -0.72% |
tree_split_gc_100/ (B/op) | 2.41 MB | 2.41 MB | ⚪ 0% |
tree_split_gc_100/ (allocs/op) | 11,131 allocs | 11,131 allocs | ⚪ 0% |
tree_split_gc_1000/ (ns/op) | 197.74 ms | 197.46 ms | 🟢 -0.14% |
tree_split_gc_1000/ (B/op) | 222.50 MB | 222.50 MB | ⚪ 0% |
tree_split_gc_1000/ (allocs/op) | 122,053 allocs | 122,073 allocs | 🔴 +0.02% |
BenchmarkRPC
Benchmark suite | Previous | Current | Change |
---|---|---|---|
client_to_server/ (ns/op) | 431.85 ms | 419.06 ms | 🟢 -2.96% |
client_to_server/ (B/op) | 16.13 MB | 16.13 MB | 🔴 +0.01% |
client_to_server/ (allocs/op) | 223,674 allocs | 223,558 allocs | 🟢 -0.05% |
client_to_client_via_server/ (ns/op) | 788.62 ms | 782.83 ms | 🟢 -0.73% |
client_to_client_via_server/ (B/op) | 37.20 MB | 39.02 MB | 🔴 +4.90% |
client_to_client_via_server/ (allocs/op) | 478,656 allocs | 477,760 allocs | 🟢 -0.19% |
attach_large_document/ (ns/op) | 1.32 s | 1.28 s | 🟢 -2.98% |
attach_large_document/ (B/op) | 1.89 GB | 1.90 GB | 🔴 +0.56% |
attach_large_document/ (allocs/op) | 12,321 allocs | 12,662 allocs | 🔴 +2.77% |
adminCli_to_server/ (ns/op) | 542.08 ms | 542.43 ms | 🔴 +0.06% |
adminCli_to_server/ (B/op) | 21.76 MB | 21.30 MB | 🟢 -2.11% |
adminCli_to_server/ (allocs/op) | 291,952 allocs | 316,690 allocs | 🔴 +8.47% |
BenchmarkLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 82.86 ns | 80.69 ns | 🟢 -2.62% |
(B/op) | 32.00 B | 32.00 B | ⚪ 0% |
(allocs/op) | 1 allocs | 1 allocs | ⚪ 0% |
BenchmarkLockerParallel
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 45.80 ns | 44.64 ns | 🟢 -2.53% |
(B/op) | 0.00 B | 0.00 B | ⚪ 0% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkLockerMoreKeys
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 180.50 ns | 179.40 ns | 🟢 -0.61% |
(B/op) | 31.00 B | 30.00 B | 🟢 -3.23% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkRWLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
RWLock_rate_2/ (ns/op) | 50.25 ns | 49.30 ns | 🟢 -1.89% |
RWLock_rate_2/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_2/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_10/ (ns/op) | 44.88 ns | 42.58 ns | 🟢 -5.12% |
RWLock_rate_10/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_10/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_100/ (ns/op) | 63.08 ns | 59.00 ns | 🟢 -6.47% |
RWLock_rate_100/ (B/op) | 2.00 B | 2.00 B | ⚪ 0% |
RWLock_rate_100/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_1000/ (ns/op) | 91.91 ns | 87.07 ns | 🟢 -5.27% |
RWLock_rate_1000/ (B/op) | 8.00 B | 8.00 B | ⚪ 0% |
RWLock_rate_1000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkChange
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_10_Changes/ (ns/op) | 4.54 ms | 4.51 ms | 🟢 -0.66% |
Push_10_Changes/ (B/op) | 150.42 KB | 150.52 KB | 🔴 +0.07% |
Push_10_Changes/ (allocs/op) | 1,623 allocs | 1,623 allocs | ⚪ 0% |
Push_100_Changes/ (ns/op) | 16.52 ms | 16.49 ms | 🟢 -0.18% |
Push_100_Changes/ (B/op) | 770.59 KB | 779.02 KB | 🔴 +1.09% |
Push_100_Changes/ (allocs/op) | 8,509 allocs | 8,509 allocs | ⚪ 0% |
Push_1000_Changes/ (ns/op) | 129.20 ms | 131.66 ms | 🔴 +1.91% |
Push_1000_Changes/ (B/op) | 7.22 MB | 7.31 MB | 🔴 +1.32% |
Push_1000_Changes/ (allocs/op) | 79,325 allocs | 79,324 allocs | ⚪ 0% |
Pull_10_Changes/ (ns/op) | 3.70 ms | 3.69 ms | 🟢 -0.42% |
Pull_10_Changes/ (B/op) | 124.59 KB | 124.80 KB | 🔴 +0.17% |
Pull_10_Changes/ (allocs/op) | 1,456 allocs | 1,456 allocs | ⚪ 0% |
Pull_100_Changes/ (ns/op) | 5.32 ms | 5.25 ms | 🟢 -1.49% |
Pull_100_Changes/ (B/op) | 354.61 KB | 354.84 KB | 🔴 +0.06% |
Pull_100_Changes/ (allocs/op) | 5,182 allocs | 5,181 allocs | 🟢 -0.02% |
Pull_1000_Changes/ (ns/op) | 10.88 ms | 10.69 ms | 🟢 -1.67% |
Pull_1000_Changes/ (B/op) | 2.20 MB | 2.20 MB | ⚪ 0% |
Pull_1000_Changes/ (allocs/op) | 44,681 allocs | 44,683 allocs | ⚪ 0% |
BenchmarkSnapshot
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_3KB_snapshot/ (ns/op) | 19.55 ms | 18.99 ms | 🟢 -2.88% |
Push_3KB_snapshot/ (B/op) | 905.58 KB | 903.70 KB | 🟢 -0.21% |
Push_3KB_snapshot/ (allocs/op) | 8,516 allocs | 8,512 allocs | 🟢 -0.05% |
Push_30KB_snapshot/ (ns/op) | 132.18 ms | 137.19 ms | 🔴 +3.79% |
Push_30KB_snapshot/ (B/op) | 8.24 MB | 8.25 MB | 🔴 +0.13% |
Push_30KB_snapshot/ (allocs/op) | 89,008 allocs | 89,960 allocs | 🔴 +1.07% |
Pull_3KB_snapshot/ (ns/op) | 7.80 ms | 7.43 ms | 🟢 -4.82% |
Pull_3KB_snapshot/ (B/op) | 1.12 MB | 1.12 MB | 🔴 +0.04% |
Pull_3KB_snapshot/ (allocs/op) | 20,064 allocs | 20,066 allocs | ⚪ 0% |
Pull_30KB_snapshot/ (ns/op) | 19.91 ms | 19.65 ms | 🟢 -1.33% |
Pull_30KB_snapshot/ (B/op) | 9.31 MB | 9.31 MB | 🔴 +0.02% |
Pull_30KB_snapshot/ (allocs/op) | 193,610 allocs | 193,605 allocs | ⚪ 0% |
BenchmarkSplayTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
stress_test_100000/ (ns/op) | 0.19 ns | 0.19 ns | 🟢 -2.48% |
stress_test_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_200000/ (ns/op) | 0.40 ns | 0.37 ns | 🟢 -5.47% |
stress_test_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_300000/ (ns/op) | 0.57 ns | 0.57 ns | 🟢 -0.28% |
stress_test_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_100000/ (ns/op) | 0.01 ns | 0.01 ns | 🟢 -1.65% |
random_access_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_200000/ (ns/op) | 0.03 ns | 0.03 ns | 🟢 -2.83% |
random_access_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_300000/ (ns/op) | 0.04 ns | 0.04 ns | 🟢 -4.57% |
random_access_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
editing_trace_bench/ (ns/op) | 0.00 ns | 0.00 ns | 🟢 -9.27% |
editing_trace_bench/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
editing_trace_bench/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkSync
Benchmark suite | Previous | Current | Change |
---|---|---|---|
memory_sync_10_test/ (ns/op) | 7288.00 ns | 7183.00 ns | 🟢 -1.44% |
memory_sync_10_test/ (B/op) | 1.34 KB | 1.34 KB | 🔴 +0.07% |
memory_sync_10_test/ (allocs/op) | 35 allocs | 35 allocs | ⚪ 0% |
memory_sync_100_test/ (ns/op) | 55353.00 ns | 55409.00 ns | 🔴 +0.10% |
memory_sync_100_test/ (B/op) | 9.51 KB | 9.51 KB | 🔴 +0.03% |
memory_sync_100_test/ (allocs/op) | 268 allocs | 268 allocs | ⚪ 0% |
memory_sync_1000_test/ (ns/op) | 616285.00 ns | 615204.00 ns | 🟢 -0.18% |
memory_sync_1000_test/ (B/op) | 75.92 KB | 75.73 KB | 🟢 -0.25% |
memory_sync_1000_test/ (allocs/op) | 2,111 allocs | 2,105 allocs | 🟢 -0.28% |
memory_sync_10000_test/ (ns/op) | 7.47 ms | 7.76 ms | 🔴 +3.85% |
memory_sync_10000_test/ (B/op) | 761.49 KB | 762.99 KB | 🔴 +0.20% |
memory_sync_10000_test/ (allocs/op) | 20,475 allocs | 20,512 allocs | 🔴 +0.18% |
BenchmarkTextEditing
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 5.18 s | 5.11 s | 🟢 -1.28% |
(B/op) | 3.92 GB | 3.92 GB | ⚪ 0% |
(allocs/op) | 20,619,777 allocs | 20,619,802 allocs | ⚪ 0% |
BenchmarkTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
10000_vertices_to_protobuf/ (ns/op) | 4.17 ms | 4.25 ms | 🔴 +1.87% |
10000_vertices_to_protobuf/ (B/op) | 6.36 MB | 6.36 MB | ⚪ 0% |
10000_vertices_to_protobuf/ (allocs/op) | 70,025 allocs | 70,025 allocs | ⚪ 0% |
10000_vertices_from_protobuf/ (ns/op) | 217.30 ms | 226.86 ms | 🔴 +4.40% |
10000_vertices_from_protobuf/ (B/op) | 442.30 MB | 442.30 MB | ⚪ 0% |
10000_vertices_from_protobuf/ (allocs/op) | 290,038 allocs | 290,039 allocs | ⚪ 0% |
20000_vertices_to_protobuf/ (ns/op) | 8.84 ms | 9.26 ms | 🔴 +4.81% |
20000_vertices_to_protobuf/ (B/op) | 12.89 MB | 12.89 MB | ⚪ 0% |
20000_vertices_to_protobuf/ (allocs/op) | 140,028 allocs | 140,028 allocs | ⚪ 0% |
20000_vertices_from_protobuf/ (ns/op) | 884.61 ms | 894.81 ms | 🔴 +1.15% |
20000_vertices_from_protobuf/ (B/op) | 1.70 GB | 1.70 GB | ⚪ 0% |
20000_vertices_from_protobuf/ (allocs/op) | 580,043 allocs | 580,045 allocs | ⚪ 0% |
30000_vertices_to_protobuf/ (ns/op) | 14.26 ms | 13.54 ms | 🟢 -5.03% |
30000_vertices_to_protobuf/ (B/op) | 18.98 MB | 18.98 MB | ⚪ 0% |
30000_vertices_to_protobuf/ (allocs/op) | 210,029 allocs | 210,029 allocs | ⚪ 0% |
30000_vertices_from_protobuf/ (ns/op) | 2.00 s | 2.03 s | 🔴 +1.63% |
30000_vertices_from_protobuf/ (B/op) | 3.75 GB | 3.75 GB | ⚪ 0% |
30000_vertices_from_protobuf/ (allocs/op) | 870,147 allocs | 870,142 allocs | ⚪ 0% |
BenchmarkVersionVector
Benchmark suite | Previous | Current | Change |
---|---|---|---|
clients_10/ (ns/op) | 160.21 ms | 160.66 ms | 🔴 +0.28% |
clients_10/ (1_changepack(bytes)) | 745.00 B | 745.00 B | ⚪ 0% |
clients_10/ (2_snapshot(bytes)) | 379.00 B | 379.00 B | ⚪ 0% |
clients_10/ (3_pushpull(ms)) | 8.00 ms | 7.00 ms | 🟢 -12.50% |
clients_10/ (4_attach(ms)) | 6.00 ms | 6.00 ms | ⚪ 0% |
clients_10/ (5_changepack_after_detach(bytes)) | 805.00 B | 805.00 B | ⚪ 0% |
clients_10/ (6_snapshot_after_detach(bytes)) | 136.00 B | 136.00 B | ⚪ 0% |
clients_10/ (7_pushpull_after_detach(ms)) | 8.00 ms | 8.00 ms | ⚪ 0% |
clients_10/ (B/op) | 19.93 MB | 18.28 MB | 🟢 -8.26% |
clients_10/ (allocs/op) | 83,762 allocs | 83,724 allocs | 🟢 -0.05% |
clients_100/ (ns/op) | 1.41 s | 1.43 s | 🔴 +1.30% |
clients_100/ (1_changepack(bytes)) | 6.14 KB | 6.14 KB | ⚪ 0% |
clients_100/ (2_snapshot(bytes)) | 3.08 KB | 3.08 KB | ⚪ 0% |
clients_100/ (3_pushpull(ms)) | 11.00 ms | 11.00 ms | ⚪ 0% |
clients_100/ (4_attach(ms)) | 11.00 ms | 11.00 ms | ⚪ 0% |
clients_100/ (5_changepack_after_detach(bytes)) | 6.21 KB | 6.21 KB | ⚪ 0% |
clients_100/ (6_snapshot_after_detach(bytes)) | 137.00 B | 137.00 B | ⚪ 0% |
clients_100/ (7_pushpull_after_detach(ms)) | 9.00 ms | 9.00 ms | ⚪ 0% |
clients_100/ (B/op) | 230.31 MB | 231.20 MB | 🔴 +0.39% |
clients_100/ (allocs/op) | 1,539,768 allocs | 1,539,883 allocs | ⚪ 0% |
clients_1000/ (ns/op) | 60.97 s | 60.25 s | 🟢 -1.18% |
clients_1000/ (1_changepack(bytes)) | 60.16 KB | 60.16 KB | ⚪ 0% |
clients_1000/ (2_snapshot(bytes)) | 30.08 KB | 30.08 KB | ⚪ 0% |
clients_1000/ (3_pushpull(ms)) | 95.00 ms | 94.00 ms | 🟢 -1.05% |
clients_1000/ (4_attach(ms)) | 249.00 ms | 216.00 ms | 🟢 -13.25% |
clients_1000/ (5_changepack_after_detach(bytes)) | 60.22 KB | 60.22 KB | ⚪ 0% |
clients_1000/ (6_snapshot_after_detach(bytes)) | 139.00 B | 139.00 B | ⚪ 0% |
clients_1000/ (7_pushpull_after_detach(ms)) | 26.00 ms | 23.00 ms | 🟢 -11.54% |
clients_1000/ (B/op) | 22.07 GB | 22.07 GB | ⚪ 0% |
clients_1000/ (allocs/op) | 111,762,106 allocs | 111,757,974 allocs | ⚪ 0% |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (3)
pkg/throttle/throttler.go (2)
17-18
: Enhance package documentation.The package documentation is minimal. Consider adding more details about the package's purpose, usage examples, and common use cases.
Apply this diff to improve the documentation:
-// Package throttle provide event timing control components +// Package throttle provides event timing control components for managing callback execution rates. +// It implements throttling and debouncing mechanisms to ensure that callbacks are executed +// at most once within a specified time window, while maintaining eventual consistency. +// +// Example usage: +// +// th := throttle.New(time.Second) +// +// // For synchronous execution with blocking +// err := th.Execute(ctx, func() error { +// // your callback logic here +// return nil +// }) +// +// // For asynchronous execution without blocking +// th.ExecuteOrSchedule(func() { +// // your callback logic here +// })
32-35
: Consider adding methods to check throttler state.The
Throttler
struct could benefit from methods to check its current state, such as whether it's currently throttled or has pending callbacks.Consider adding these methods:
// IsPending returns true if there is a pending callback. func (t *Throttler) IsPending() bool { return atomic.LoadInt32(&t.pending) == 1 } // IsThrottled returns true if the rate limiter would not allow an immediate execution. func (t *Throttler) IsThrottled() bool { return !t.lim.Allow() }pkg/throttle/throttler_test.go (1)
32-62
: Add edge case tests for window duration.The test suite should include tests for edge cases like zero or negative window durations.
Add these test cases:
func TestNewWithInvalidWindow(t *testing.T) { t.Run("zero window duration", func(t *testing.T) { th := New(0) assert.NotNil(t, th) assert.NotNil(t, th.lim) }) t.Run("negative window duration", func(t *testing.T) { th := New(-time.Second) assert.NotNil(t, th) assert.NotNil(t, th.lim) }) }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
go.sum
is excluded by!**/*.sum
📒 Files selected for processing (3)
go.mod
(1 hunks)pkg/throttle/throttler.go
(1 hunks)pkg/throttle/throttler_test.go
(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: build
- GitHub Check: bench
🔇 Additional comments (1)
go.mod (1)
3-3
:✅ Verification successful
Verify Go version compatibility.
The module requires Go 1.23, which is not yet released. The latest stable version is Go 1.22.
🌐 Web query:
What is the latest stable version of Go?
💡 Result:
The latest stable version of Go is 1.24.0, released on February 11, 2025[3][8]. This release follows the standard six-month cadence for major Go updates[6][8].
Key details about current Go versions:
- Go 1.24 (released Feb 11, 2025)
Actively supported with security and bug fixes[3][4]- Go 1.23 (released Aug 13, 2024)
Still supported with latest patch version 1.23.6 (Feb 4, 2025)[3][4]- Go 1.22 (released Feb 6, 2024)
Support ended Feb 11, 2025[3]The Go team maintains a policy where each major release receives official support until two subsequent major releases appear[3][4]. Users are encouraged to upgrade to supported versions to receive security updates and critical bug fixes automatically through Go's toolchain management system introduced in Go 1.21[2][6].
Citations:
- 1: https://github.com/golang/tools/releases
- 2: https://tip.golang.org/doc/go1.21
- 3: https://endoflife.date/go
- 4: https://go.dev/doc/devel/release
- 5: https://go.dev/dl/
- 6: https://tip.golang.org/doc/go1.23
- 7: https://groups.google.com/g/golang-nuts/c/_ROx_UGCCCg
- 8: https://en.wikipedia.org/wiki/Go_(programming_language)
Action: Validate the Go version requirement in go.mod
The
go.mod
file now specifies:go 1.23Based on the latest release information, Go 1.23 was released on August 13, 2024 and is still supported (with patch version 1.23.6 released in February 2025). Although the most recent stable version is now Go 1.24.0, using Go 1.23 remains valid. You may consider upgrading to 1.24 to benefit from the latest features and improvements, but there is no immediate compatibility issue with retaining Go 1.23.
- wait goroutine done in test
- use const - use wait group
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🧹 Nitpick comments (3)
pkg/limit/throttler.go (2)
29-44
: Add input validation and consider using constants for atomic values.The implementation looks good, but consider these improvements:
- Add validation for non-negative window duration
- Use constants for atomic values to improve readability
+const ( + notPending int32 = 0 + pending int32 = 1 +) func New(window time.Duration) *Throttler { + if window <= 0 { + panic("window duration must be positive") + } dt := &Throttler{ lim: rate.NewLimiter(rate.Every(window), 1), - pending: 0, + pending: notPending, } return dt }
46-66
: Improve error handling in Execute method.The error handling looks good, but consider wrapping the callback error for better error context:
func (t *Throttler) Execute(ctx context.Context, callback func() error) error { if t.lim.Allow() { - return callback() + if err := callback(); err != nil { + return fmt.Errorf("execute immediate callback: %w", err) + } + return nil } if !atomic.CompareAndSwapInt32(&t.pending, 0, 1) { return nil } if err := t.lim.Wait(ctx); err != nil { return fmt.Errorf("wait for limiter: %w", err) } atomic.StoreInt32(&t.pending, 0) - return callback() + if err := callback(); err != nil { + return fmt.Errorf("execute delayed callback: %w", err) + } + return nil }pkg/limit/throttler_test.go (1)
31-63
: Add edge cases to TestSynchronousExecute.Consider adding these test cases:
- Zero duration window
- Negative duration window
- Nil callback function
func TestSynchronousExecute(t *testing.T) { + t.Run("Zero duration window panics", func(t *testing.T) { + assert.Panics(t, func() { + New(0) + }) + }) + + t.Run("Negative duration window panics", func(t *testing.T) { + assert.Panics(t, func() { + New(-time.Millisecond) + }) + }) + + t.Run("Nil callback panics", func(t *testing.T) { + th := New(throttleWindow) + assert.Panics(t, func() { + th.Execute(context.Background(), nil) + }) + })
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
pkg/limit/throttler.go
(1 hunks)pkg/limit/throttler_test.go
(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: bench
- GitHub Check: build
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Go Benchmark Analysis 📊
This is a comparison result between the previous(e687d61) and the current commit(71e15d1).
Significant Changes (≥20% difference)
Benchmark suite | Previous | Current | Change |
---|---|---|---|
BenchmarkRWLocker/RWLock_rate_100/ (B/op) | 2.00 B | 1.00 B | 🟢 -50.00% |
Key Observations 🔍
- The benchmark suite BenchmarkRWLocker/RWLock_rate_100/ showed a significant decrease of -50.00% in the number of bytes processed per operation, indicating an improvement in efficiency.
- Across different benchmark suites, there are generally minor fluctuations in performance, with some benchmarks showing slight improvements while others exhibit minimal declines. No major outliers or consistent trends are evident from the data provided.
Detailed Test Results
BenchmarkDocument
Benchmark suite | Previous | Current | Change |
---|---|---|---|
constructor_test/ (ns/op) | 1439.00 ns | 1423.00 ns | 🟢 -1.11% |
constructor_test/ (B/op) | 1.39 KB | 1.39 KB | ⚪ 0% |
constructor_test/ (allocs/op) | 24 allocs | 24 allocs | ⚪ 0% |
status_test/ (ns/op) | 1028.00 ns | 1019.00 ns | 🟢 -0.88% |
status_test/ (B/op) | 1.35 KB | 1.35 KB | ⚪ 0% |
status_test/ (allocs/op) | 22 allocs | 22 allocs | ⚪ 0% |
equals_test/ (ns/op) | 7864.00 ns | 7737.00 ns | 🟢 -1.61% |
equals_test/ (B/op) | 7.56 KB | 7.56 KB | ⚪ 0% |
equals_test/ (allocs/op) | 129 allocs | 129 allocs | ⚪ 0% |
nested_update_test/ (ns/op) | 17079.00 ns | 16812.00 ns | 🟢 -1.56% |
nested_update_test/ (B/op) | 12.31 KB | 12.31 KB | ⚪ 0% |
nested_update_test/ (allocs/op) | 258 allocs | 258 allocs | ⚪ 0% |
delete_test/ (ns/op) | 27313.00 ns | 26808.00 ns | 🟢 -1.85% |
delete_test/ (B/op) | 15.79 KB | 15.79 KB | ⚪ 0% |
delete_test/ (allocs/op) | 339 allocs | 339 allocs | ⚪ 0% |
object_test/ (ns/op) | 8546.00 ns | 8489.00 ns | 🟢 -0.67% |
object_test/ (B/op) | 7.03 KB | 7.03 KB | ⚪ 0% |
object_test/ (allocs/op) | 118 allocs | 118 allocs | ⚪ 0% |
array_test/ (ns/op) | 28984.00 ns | 28425.00 ns | 🟢 -1.93% |
array_test/ (B/op) | 12.14 KB | 12.14 KB | ⚪ 0% |
array_test/ (allocs/op) | 273 allocs | 273 allocs | ⚪ 0% |
text_test/ (ns/op) | 32155.00 ns | 31758.00 ns | 🟢 -1.23% |
text_test/ (B/op) | 15.19 KB | 15.19 KB | ⚪ 0% |
text_test/ (allocs/op) | 484 allocs | 484 allocs | ⚪ 0% |
text_composition_test/ (ns/op) | 31674.00 ns | 31438.00 ns | 🟢 -0.75% |
text_composition_test/ (B/op) | 18.70 KB | 18.70 KB | ⚪ 0% |
text_composition_test/ (allocs/op) | 501 allocs | 501 allocs | ⚪ 0% |
rich_text_test/ (ns/op) | 87424.00 ns | 85834.00 ns | 🟢 -1.82% |
rich_text_test/ (B/op) | 39.36 KB | 39.36 KB | ⚪ 0% |
rich_text_test/ (allocs/op) | 1,146 allocs | 1,146 allocs | ⚪ 0% |
counter_test/ (ns/op) | 18201.00 ns | 18089.00 ns | 🟢 -0.62% |
counter_test/ (B/op) | 11.81 KB | 11.81 KB | ⚪ 0% |
counter_test/ (allocs/op) | 253 allocs | 253 allocs | ⚪ 0% |
text_edit_gc_100/ (ns/op) | 1.39 ms | 1.39 ms | 🔴 +0.32% |
text_edit_gc_100/ (B/op) | 864.90 KB | 864.86 KB | ⚪ 0% |
text_edit_gc_100/ (allocs/op) | 17,281 allocs | 17,282 allocs | ⚪ 0% |
text_edit_gc_1000/ (ns/op) | 53.39 ms | 52.83 ms | 🟢 -1.04% |
text_edit_gc_1000/ (B/op) | 46.84 MB | 46.84 MB | ⚪ 0% |
text_edit_gc_1000/ (allocs/op) | 185,598 allocs | 185,590 allocs | ⚪ 0% |
text_split_gc_100/ (ns/op) | 2.12 ms | 2.11 ms | 🟢 -0.65% |
text_split_gc_100/ (B/op) | 1.58 MB | 1.58 MB | ⚪ 0% |
text_split_gc_100/ (allocs/op) | 15,950 allocs | 15,951 allocs | ⚪ 0% |
text_split_gc_1000/ (ns/op) | 128.25 ms | 127.47 ms | 🟢 -0.60% |
text_split_gc_1000/ (B/op) | 137.79 MB | 137.79 MB | ⚪ 0% |
text_split_gc_1000/ (allocs/op) | 185,000 allocs | 184,998 allocs | ⚪ 0% |
text_delete_all_10000/ (ns/op) | 18.43 ms | 16.82 ms | 🟢 -8.75% |
text_delete_all_10000/ (B/op) | 10.58 MB | 10.58 MB | ⚪ 0% |
text_delete_all_10000/ (allocs/op) | 56,134 allocs | 56,134 allocs | ⚪ 0% |
text_delete_all_100000/ (ns/op) | 312.31 ms | 282.78 ms | 🟢 -9.45% |
text_delete_all_100000/ (B/op) | 105.54 MB | 105.51 MB | 🟢 -0.03% |
text_delete_all_100000/ (allocs/op) | 566,133 allocs | 566,061 allocs | 🟢 -0.01% |
text_100/ (ns/op) | 234634.00 ns | 242903.00 ns | 🔴 +3.52% |
text_100/ (B/op) | 120.94 KB | 120.91 KB | 🟢 -0.03% |
text_100/ (allocs/op) | 5,181 allocs | 5,181 allocs | ⚪ 0% |
text_1000/ (ns/op) | 2.46 ms | 2.53 ms | 🔴 +2.85% |
text_1000/ (B/op) | 1.16 MB | 1.16 MB | 🔴 +0.03% |
text_1000/ (allocs/op) | 51,084 allocs | 51,084 allocs | ⚪ 0% |
array_1000/ (ns/op) | 1.24 ms | 1.30 ms | 🔴 +5.05% |
array_1000/ (B/op) | 1.09 MB | 1.09 MB | ⚪ 0% |
array_1000/ (allocs/op) | 11,879 allocs | 11,879 allocs | ⚪ 0% |
array_10000/ (ns/op) | 13.33 ms | 13.38 ms | 🔴 +0.37% |
array_10000/ (B/op) | 9.89 MB | 9.89 MB | ⚪ 0% |
array_10000/ (allocs/op) | 120,735 allocs | 120,734 allocs | ⚪ 0% |
array_gc_100/ (ns/op) | 131750.00 ns | 137737.00 ns | 🔴 +4.54% |
array_gc_100/ (B/op) | 99.89 KB | 99.88 KB | 🟢 -0.01% |
array_gc_100/ (allocs/op) | 1,266 allocs | 1,266 allocs | ⚪ 0% |
array_gc_1000/ (ns/op) | 1.42 ms | 1.47 ms | 🔴 +3.84% |
array_gc_1000/ (B/op) | 1.14 MB | 1.14 MB | ⚪ 0% |
array_gc_1000/ (allocs/op) | 12,926 allocs | 12,926 allocs | ⚪ 0% |
counter_1000/ (ns/op) | 202098.00 ns | 210307.00 ns | 🔴 +4.06% |
counter_1000/ (B/op) | 178.13 KB | 178.13 KB | ⚪ 0% |
counter_1000/ (allocs/op) | 5,771 allocs | 5,771 allocs | ⚪ 0% |
counter_10000/ (ns/op) | 2.17 ms | 2.20 ms | 🔴 +1.29% |
counter_10000/ (B/op) | 2.07 MB | 2.07 MB | ⚪ 0% |
counter_10000/ (allocs/op) | 59,778 allocs | 59,778 allocs | ⚪ 0% |
object_1000/ (ns/op) | 1.39 ms | 1.46 ms | 🔴 +5.22% |
object_1000/ (B/op) | 1.44 MB | 1.44 MB | 🔴 +0.01% |
object_1000/ (allocs/op) | 9,925 allocs | 9,925 allocs | ⚪ 0% |
object_10000/ (ns/op) | 14.82 ms | 14.54 ms | 🟢 -1.89% |
object_10000/ (B/op) | 12.35 MB | 12.35 MB | 🟢 -0.02% |
object_10000/ (allocs/op) | 101,232 allocs | 101,224 allocs | ⚪ 0% |
tree_100/ (ns/op) | 1.02 ms | 1.07 ms | 🔴 +5.14% |
tree_100/ (B/op) | 951.02 KB | 951.03 KB | ⚪ 0% |
tree_100/ (allocs/op) | 6,102 allocs | 6,102 allocs | ⚪ 0% |
tree_1000/ (ns/op) | 74.23 ms | 79.31 ms | 🔴 +6.84% |
tree_1000/ (B/op) | 86.58 MB | 86.58 MB | ⚪ 0% |
tree_1000/ (allocs/op) | 60,111 allocs | 60,112 allocs | ⚪ 0% |
tree_10000/ (ns/op) | 9.68 s | 9.57 s | 🟢 -1.13% |
tree_10000/ (B/op) | 8.58 GB | 8.58 GB | ⚪ 0% |
tree_10000/ (allocs/op) | 600,173 allocs | 600,198 allocs | ⚪ 0% |
tree_delete_all_1000/ (ns/op) | 78.41 ms | 80.79 ms | 🔴 +3.04% |
tree_delete_all_1000/ (B/op) | 87.57 MB | 87.57 MB | ⚪ 0% |
tree_delete_all_1000/ (allocs/op) | 75,289 allocs | 75,289 allocs | ⚪ 0% |
tree_edit_gc_100/ (ns/op) | 3.96 ms | 3.99 ms | 🔴 +0.67% |
tree_edit_gc_100/ (B/op) | 4.15 MB | 4.15 MB | ⚪ 0% |
tree_edit_gc_100/ (allocs/op) | 15,147 allocs | 15,146 allocs | ⚪ 0% |
tree_edit_gc_1000/ (ns/op) | 332.75 ms | 334.66 ms | 🔴 +0.58% |
tree_edit_gc_1000/ (B/op) | 384.04 MB | 384.04 MB | ⚪ 0% |
tree_edit_gc_1000/ (allocs/op) | 154,952 allocs | 154,940 allocs | ⚪ 0% |
tree_split_gc_100/ (ns/op) | 2.67 ms | 2.74 ms | 🔴 +2.54% |
tree_split_gc_100/ (B/op) | 2.41 MB | 2.41 MB | ⚪ 0% |
tree_split_gc_100/ (allocs/op) | 11,131 allocs | 11,131 allocs | ⚪ 0% |
tree_split_gc_1000/ (ns/op) | 197.74 ms | 204.38 ms | 🔴 +3.36% |
tree_split_gc_1000/ (B/op) | 222.50 MB | 222.50 MB | ⚪ 0% |
tree_split_gc_1000/ (allocs/op) | 122,053 allocs | 122,077 allocs | 🔴 +0.02% |
BenchmarkRPC
Benchmark suite | Previous | Current | Change |
---|---|---|---|
client_to_server/ (ns/op) | 431.85 ms | 417.28 ms | 🟢 -3.37% |
client_to_server/ (B/op) | 16.13 MB | 16.13 MB | ⚪ 0% |
client_to_server/ (allocs/op) | 223,674 allocs | 223,644 allocs | 🟢 -0.01% |
client_to_client_via_server/ (ns/op) | 788.62 ms | 771.45 ms | 🟢 -2.18% |
client_to_client_via_server/ (B/op) | 37.20 MB | 36.70 MB | 🟢 -1.34% |
client_to_client_via_server/ (allocs/op) | 478,656 allocs | 475,803 allocs | 🟢 -0.60% |
attach_large_document/ (ns/op) | 1.32 s | 1.29 s | 🟢 -2.86% |
attach_large_document/ (B/op) | 1.89 GB | 1.92 GB | 🔴 +1.81% |
attach_large_document/ (allocs/op) | 12,321 allocs | 12,393 allocs | 🔴 +0.58% |
adminCli_to_server/ (ns/op) | 542.08 ms | 543.37 ms | 🔴 +0.24% |
adminCli_to_server/ (B/op) | 21.76 MB | 22.51 MB | 🔴 +3.48% |
adminCli_to_server/ (allocs/op) | 291,952 allocs | 316,700 allocs | 🔴 +8.48% |
BenchmarkLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 82.86 ns | 82.10 ns | 🟢 -0.92% |
(B/op) | 32.00 B | 32.00 B | ⚪ 0% |
(allocs/op) | 1 allocs | 1 allocs | ⚪ 0% |
BenchmarkLockerParallel
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 45.80 ns | 45.19 ns | 🟢 -1.33% |
(B/op) | 0.00 B | 0.00 B | ⚪ 0% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkLockerMoreKeys
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 180.50 ns | 165.60 ns | 🟢 -8.25% |
(B/op) | 31.00 B | 31.00 B | ⚪ 0% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkRWLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
RWLock_rate_2/ (ns/op) | 50.25 ns | 49.09 ns | 🟢 -2.31% |
RWLock_rate_2/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_2/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_10/ (ns/op) | 44.88 ns | 43.31 ns | 🟢 -3.50% |
RWLock_rate_10/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_10/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_100/ (ns/op) | 63.08 ns | 58.54 ns | 🟢 -7.20% |
RWLock_rate_100/ (B/op) | 2.00 B | 1.00 B | 🟢 -50.00% |
RWLock_rate_100/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_1000/ (ns/op) | 91.91 ns | 86.82 ns | 🟢 -5.54% |
RWLock_rate_1000/ (B/op) | 8.00 B | 8.00 B | ⚪ 0% |
RWLock_rate_1000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkChange
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_10_Changes/ (ns/op) | 4.54 ms | 4.43 ms | 🟢 -2.43% |
Push_10_Changes/ (B/op) | 150.42 KB | 151.00 KB | 🔴 +0.39% |
Push_10_Changes/ (allocs/op) | 1,623 allocs | 1,624 allocs | 🔴 +0.06% |
Push_100_Changes/ (ns/op) | 16.52 ms | 15.80 ms | 🟢 -4.36% |
Push_100_Changes/ (B/op) | 770.59 KB | 775.07 KB | 🔴 +0.58% |
Push_100_Changes/ (allocs/op) | 8,509 allocs | 8,510 allocs | 🔴 +0.01% |
Push_1000_Changes/ (ns/op) | 129.20 ms | 126.66 ms | 🟢 -1.97% |
Push_1000_Changes/ (B/op) | 7.22 MB | 7.23 MB | 🔴 +0.11% |
Push_1000_Changes/ (allocs/op) | 79,325 allocs | 79,322 allocs | ⚪ 0% |
Pull_10_Changes/ (ns/op) | 3.70 ms | 3.65 ms | 🟢 -1.45% |
Pull_10_Changes/ (B/op) | 124.59 KB | 125.01 KB | 🔴 +0.34% |
Pull_10_Changes/ (allocs/op) | 1,456 allocs | 1,456 allocs | ⚪ 0% |
Pull_100_Changes/ (ns/op) | 5.32 ms | 5.22 ms | 🟢 -1.99% |
Pull_100_Changes/ (B/op) | 354.61 KB | 355.30 KB | 🔴 +0.19% |
Pull_100_Changes/ (allocs/op) | 5,182 allocs | 5,182 allocs | ⚪ 0% |
Pull_1000_Changes/ (ns/op) | 10.88 ms | 10.65 ms | 🟢 -2.05% |
Pull_1000_Changes/ (B/op) | 2.20 MB | 2.20 MB | ⚪ 0% |
Pull_1000_Changes/ (allocs/op) | 44,681 allocs | 44,681 allocs | ⚪ 0% |
BenchmarkSnapshot
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_3KB_snapshot/ (ns/op) | 19.55 ms | 18.18 ms | 🟢 -7.02% |
Push_3KB_snapshot/ (B/op) | 905.58 KB | 919.83 KB | 🔴 +1.57% |
Push_3KB_snapshot/ (allocs/op) | 8,516 allocs | 8,514 allocs | 🟢 -0.02% |
Push_30KB_snapshot/ (ns/op) | 132.18 ms | 129.86 ms | 🟢 -1.75% |
Push_30KB_snapshot/ (B/op) | 8.24 MB | 8.25 MB | 🔴 +0.12% |
Push_30KB_snapshot/ (allocs/op) | 89,008 allocs | 89,057 allocs | 🔴 +0.06% |
Pull_3KB_snapshot/ (ns/op) | 7.80 ms | 7.43 ms | 🟢 -4.76% |
Pull_3KB_snapshot/ (B/op) | 1.12 MB | 1.12 MB | 🔴 +0.13% |
Pull_3KB_snapshot/ (allocs/op) | 20,064 allocs | 20,065 allocs | ⚪ 0% |
Pull_30KB_snapshot/ (ns/op) | 19.91 ms | 19.41 ms | 🟢 -2.53% |
Pull_30KB_snapshot/ (B/op) | 9.31 MB | 9.31 MB | ⚪ 0% |
Pull_30KB_snapshot/ (allocs/op) | 193,610 allocs | 193,605 allocs | ⚪ 0% |
BenchmarkSplayTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
stress_test_100000/ (ns/op) | 0.19 ns | 0.19 ns | 🟢 -2.53% |
stress_test_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_200000/ (ns/op) | 0.40 ns | 0.38 ns | 🟢 -2.61% |
stress_test_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_300000/ (ns/op) | 0.57 ns | 0.57 ns | 🔴 +1.11% |
stress_test_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_100000/ (ns/op) | 0.01 ns | 0.01 ns | 🟢 -1.18% |
random_access_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_200000/ (ns/op) | 0.03 ns | 0.03 ns | 🟢 -6.79% |
random_access_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_300000/ (ns/op) | 0.04 ns | 0.05 ns | 🔴 +5.36% |
random_access_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
editing_trace_bench/ (ns/op) | 0.00 ns | 0.00 ns | 🔴 +2.02% |
editing_trace_bench/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
editing_trace_bench/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkSync
Benchmark suite | Previous | Current | Change |
---|---|---|---|
memory_sync_10_test/ (ns/op) | 7288.00 ns | 7109.00 ns | 🟢 -2.46% |
memory_sync_10_test/ (B/op) | 1.34 KB | 1.34 KB | 🔴 +0.07% |
memory_sync_10_test/ (allocs/op) | 35 allocs | 35 allocs | ⚪ 0% |
memory_sync_100_test/ (ns/op) | 55353.00 ns | 54894.00 ns | 🟢 -0.83% |
memory_sync_100_test/ (B/op) | 9.51 KB | 9.52 KB | 🔴 +0.14% |
memory_sync_100_test/ (allocs/op) | 268 allocs | 268 allocs | ⚪ 0% |
memory_sync_1000_test/ (ns/op) | 616285.00 ns | 609643.00 ns | 🟢 -1.08% |
memory_sync_1000_test/ (B/op) | 75.92 KB | 75.88 KB | 🟢 -0.05% |
memory_sync_1000_test/ (allocs/op) | 2,111 allocs | 2,111 allocs | ⚪ 0% |
memory_sync_10000_test/ (ns/op) | 7.47 ms | 7.62 ms | 🔴 +1.94% |
memory_sync_10000_test/ (B/op) | 761.49 KB | 766.27 KB | 🔴 +0.63% |
memory_sync_10000_test/ (allocs/op) | 20,475 allocs | 20,520 allocs | 🔴 +0.22% |
BenchmarkTextEditing
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 5.18 s | 5.13 s | 🟢 -0.89% |
(B/op) | 3.92 GB | 3.92 GB | ⚪ 0% |
(allocs/op) | 20,619,777 allocs | 20,619,808 allocs | ⚪ 0% |
BenchmarkTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
10000_vertices_to_protobuf/ (ns/op) | 4.17 ms | 4.28 ms | 🔴 +2.68% |
10000_vertices_to_protobuf/ (B/op) | 6.36 MB | 6.36 MB | ⚪ 0% |
10000_vertices_to_protobuf/ (allocs/op) | 70,025 allocs | 70,025 allocs | ⚪ 0% |
10000_vertices_from_protobuf/ (ns/op) | 217.30 ms | 224.11 ms | 🔴 +3.13% |
10000_vertices_from_protobuf/ (B/op) | 442.30 MB | 442.31 MB | ⚪ 0% |
10000_vertices_from_protobuf/ (allocs/op) | 290,038 allocs | 290,049 allocs | ⚪ 0% |
20000_vertices_to_protobuf/ (ns/op) | 8.84 ms | 9.06 ms | 🔴 +2.49% |
20000_vertices_to_protobuf/ (B/op) | 12.89 MB | 12.89 MB | ⚪ 0% |
20000_vertices_to_protobuf/ (allocs/op) | 140,028 allocs | 140,028 allocs | ⚪ 0% |
20000_vertices_from_protobuf/ (ns/op) | 884.61 ms | 879.94 ms | 🟢 -0.53% |
20000_vertices_from_protobuf/ (B/op) | 1.70 GB | 1.70 GB | ⚪ 0% |
20000_vertices_from_protobuf/ (allocs/op) | 580,043 allocs | 580,090 allocs | ⚪ 0% |
30000_vertices_to_protobuf/ (ns/op) | 14.26 ms | 13.83 ms | 🟢 -3.04% |
30000_vertices_to_protobuf/ (B/op) | 18.98 MB | 18.98 MB | ⚪ 0% |
30000_vertices_to_protobuf/ (allocs/op) | 210,029 allocs | 210,029 allocs | ⚪ 0% |
30000_vertices_from_protobuf/ (ns/op) | 2.00 s | 1.99 s | 🟢 -0.35% |
30000_vertices_from_protobuf/ (B/op) | 3.75 GB | 3.75 GB | ⚪ 0% |
30000_vertices_from_protobuf/ (allocs/op) | 870,147 allocs | 870,054 allocs | 🟢 -0.01% |
BenchmarkVersionVector
Benchmark suite | Previous | Current | Change |
---|---|---|---|
clients_10/ (ns/op) | 160.21 ms | 157.36 ms | 🟢 -1.78% |
clients_10/ (1_changepack(bytes)) | 745.00 B | 745.00 B | ⚪ 0% |
clients_10/ (2_snapshot(bytes)) | 379.00 B | 379.00 B | ⚪ 0% |
clients_10/ (3_pushpull(ms)) | 8.00 ms | 7.00 ms | 🟢 -12.50% |
clients_10/ (4_attach(ms)) | 6.00 ms | 6.00 ms | ⚪ 0% |
clients_10/ (5_changepack_after_detach(bytes)) | 805.00 B | 805.00 B | ⚪ 0% |
clients_10/ (6_snapshot_after_detach(bytes)) | 136.00 B | 136.00 B | ⚪ 0% |
clients_10/ (7_pushpull_after_detach(ms)) | 8.00 ms | 8.00 ms | ⚪ 0% |
clients_10/ (B/op) | 19.93 MB | 20.65 MB | 🔴 +3.60% |
clients_10/ (allocs/op) | 83,762 allocs | 83,779 allocs | 🔴 +0.02% |
clients_100/ (ns/op) | 1.41 s | 1.44 s | 🔴 +1.75% |
clients_100/ (1_changepack(bytes)) | 6.14 KB | 6.14 KB | ⚪ 0% |
clients_100/ (2_snapshot(bytes)) | 3.08 KB | 3.08 KB | ⚪ 0% |
clients_100/ (3_pushpull(ms)) | 11.00 ms | 11.00 ms | ⚪ 0% |
clients_100/ (4_attach(ms)) | 11.00 ms | 10.00 ms | 🟢 -9.09% |
clients_100/ (5_changepack_after_detach(bytes)) | 6.21 KB | 6.21 KB | ⚪ 0% |
clients_100/ (6_snapshot_after_detach(bytes)) | 137.00 B | 137.00 B | ⚪ 0% |
clients_100/ (7_pushpull_after_detach(ms)) | 9.00 ms | 9.00 ms | ⚪ 0% |
clients_100/ (B/op) | 230.31 MB | 229.51 MB | 🟢 -0.35% |
clients_100/ (allocs/op) | 1,539,768 allocs | 1,539,234 allocs | 🟢 -0.03% |
clients_1000/ (ns/op) | 60.97 s | 60.23 s | 🟢 -1.21% |
clients_1000/ (1_changepack(bytes)) | 60.16 KB | 60.16 KB | ⚪ 0% |
clients_1000/ (2_snapshot(bytes)) | 30.08 KB | 30.08 KB | ⚪ 0% |
clients_1000/ (3_pushpull(ms)) | 95.00 ms | 94.00 ms | 🟢 -1.05% |
clients_1000/ (4_attach(ms)) | 249.00 ms | 222.00 ms | 🟢 -10.84% |
clients_1000/ (5_changepack_after_detach(bytes)) | 60.22 KB | 60.22 KB | ⚪ 0% |
clients_1000/ (6_snapshot_after_detach(bytes)) | 139.00 B | 139.00 B | ⚪ 0% |
clients_1000/ (7_pushpull_after_detach(ms)) | 26.00 ms | 23.00 ms | 🟢 -11.54% |
clients_1000/ (B/op) | 22.07 GB | 22.07 GB | 🔴 +0.03% |
clients_1000/ (allocs/op) | 111,762,106 allocs | 111,758,327 allocs | ⚪ 0% |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #1166 +/- ##
==========================================
+ Coverage 38.37% 38.45% +0.07%
==========================================
Files 172 173 +1
Lines 25796 25827 +31
==========================================
+ Hits 9900 9931 +31
Misses 15063 15063
Partials 833 833 ☔ View full report in Codecov by Sentry. |
- previous commit only changes directory name
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
pkg/limit/throttler_test.go (1)
218-247
:⚠️ Potential issueUpdate error handling in TestExecuteOrSchedule.
The test needs to be updated to include error handling as suggested in the previous review.
Please refer to the previous review comment for the implementation details.
🧹 Nitpick comments (2)
pkg/limit/throttler_test.go (2)
17-18
: Enhance package documentation.The current package documentation is minimal. Consider expanding it to include:
- The purpose of the package
- Key components and their responsibilities
- Usage examples or common use cases
-// Package limit provide event timing control components +// Package limit provides event timing control components for managing callback execution rates. +// It includes throttling and debouncing mechanisms to control the frequency of operations, +// making it useful for rate-limiting API calls, event handling, and other scenarios where +// execution timing needs to be controlled.
143-158
: Add test coverage for trailing callback errors.While the current test covers immediate callback errors, consider adding test cases for:
- Error propagation in trailing callbacks
- Error handling during concurrent executions
t.Run("Trailing callback error is propagated", func(t *testing.T) { th := New(throttleWindow) var firstCallExecuted bool callback := func() error { if firstCallExecuted { return expectedErr } firstCallExecuted = true return nil } // First call succeeds assert.NoError(t, th.Execute(ctx, callback)) // Second call should fail with expectedErr err := th.Execute(ctx, callback) assert.ErrorIs(t, err, expectedErr) })
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
pkg/limit/throttler.go
(1 hunks)pkg/limit/throttler_test.go
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- pkg/limit/throttler.go
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: build
- GitHub Check: bench
🔇 Additional comments (3)
pkg/limit/throttler_test.go (3)
31-63
: Well-structured test cases!The test function effectively validates synchronous execution behavior with good coverage of single and multiple call scenarios. The use of atomic operations ensures thread safety.
65-141
: Excellent concurrent testing implementation!The test function provides comprehensive coverage of concurrent scenarios with:
- Clear documentation of test objectives
- Proper synchronization using WaitGroup
- Thorough validation of throttling behavior under continuous load
160-216
: Great context cancellation test coverage!The test function effectively validates both context deadline and cancellation scenarios with proper verification of execution counts.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Go Benchmark Analysis 📊
This is a comparison result between the previous(e687d61) and the current commit(b298ecc).
Significant Changes (≥20% difference)
Benchmark suite | Previous | Current | Change |
---|---|---|---|
BenchmarkRWLocker/RWLock_rate_100/ (B/op) | 2.00 B | 1.00 B | 🟢 -50.00% |
Key Observations 🔍
-
In the
BenchmarkRWLocker
suite, theRWLock_rate_100/
benchmark showed a significant improvement with a decrease of 50.00% in bytes per operation (B/op) from 2.00 B to 1.00 B. -
Across various benchmarks, there were several cases of slight improvements (🟢) in performance:
BenchmarkLockerParallel
suite showed a decrease of 1.42% in ns/op.BenchmarkSync
suite exhibited reductions ranging from 0.55% to 4.68% in ns/op.BenchmarkSnapshot
suite showed improvements in ns/op ranging from 1.68% to 6.09%.
-
Some benchmarks experienced minor increases in performance (🔴):
- Under
BenchmarkRPC
,attach_large_document/
showed an increase of 0.60% in B/op. - In the
BenchmarkChange
suite,Push_100_Changes/
andPush_1000_Changes/
exhibited increases in ns/op by 1.02% and 1.78% respectively. BenchmarkTree
suite showed increases from 2.85% to 7.06% in ns/op for different benchmarks.
- Under
Overall, the data reflects a mixture of improvements and minor deteriorations, with the majority of benchmarks showing positive trends in performance.
Detailed Test Results
BenchmarkDocument
Benchmark suite | Previous | Current | Change |
---|---|---|---|
constructor_test/ (ns/op) | 1439.00 ns | 1480.00 ns | 🔴 +2.85% |
constructor_test/ (B/op) | 1.39 KB | 1.39 KB | ⚪ 0% |
constructor_test/ (allocs/op) | 24 allocs | 24 allocs | ⚪ 0% |
status_test/ (ns/op) | 1028.00 ns | 1019.00 ns | 🟢 -0.88% |
status_test/ (B/op) | 1.35 KB | 1.35 KB | ⚪ 0% |
status_test/ (allocs/op) | 22 allocs | 22 allocs | ⚪ 0% |
equals_test/ (ns/op) | 7864.00 ns | 8464.00 ns | 🔴 +7.63% |
equals_test/ (B/op) | 7.56 KB | 7.56 KB | ⚪ 0% |
equals_test/ (allocs/op) | 129 allocs | 129 allocs | ⚪ 0% |
nested_update_test/ (ns/op) | 17079.00 ns | 17791.00 ns | 🔴 +4.17% |
nested_update_test/ (B/op) | 12.31 KB | 12.31 KB | ⚪ 0% |
nested_update_test/ (allocs/op) | 258 allocs | 258 allocs | ⚪ 0% |
delete_test/ (ns/op) | 27313.00 ns | 23107.00 ns | 🟢 -15.40% |
delete_test/ (B/op) | 15.79 KB | 15.79 KB | ⚪ 0% |
delete_test/ (allocs/op) | 339 allocs | 339 allocs | ⚪ 0% |
object_test/ (ns/op) | 8546.00 ns | 8542.00 ns | 🟢 -0.05% |
object_test/ (B/op) | 7.03 KB | 7.03 KB | 🔴 +0.01% |
object_test/ (allocs/op) | 118 allocs | 118 allocs | ⚪ 0% |
array_test/ (ns/op) | 28984.00 ns | 28313.00 ns | 🟢 -2.32% |
array_test/ (B/op) | 12.14 KB | 12.14 KB | ⚪ 0% |
array_test/ (allocs/op) | 273 allocs | 273 allocs | ⚪ 0% |
text_test/ (ns/op) | 32155.00 ns | 32211.00 ns | 🔴 +0.17% |
text_test/ (B/op) | 15.19 KB | 15.19 KB | ⚪ 0% |
text_test/ (allocs/op) | 484 allocs | 484 allocs | ⚪ 0% |
text_composition_test/ (ns/op) | 31674.00 ns | 31450.00 ns | 🟢 -0.71% |
text_composition_test/ (B/op) | 18.70 KB | 18.70 KB | ⚪ 0% |
text_composition_test/ (allocs/op) | 501 allocs | 501 allocs | ⚪ 0% |
rich_text_test/ (ns/op) | 87424.00 ns | 85471.00 ns | 🟢 -2.23% |
rich_text_test/ (B/op) | 39.36 KB | 39.36 KB | ⚪ 0% |
rich_text_test/ (allocs/op) | 1,146 allocs | 1,146 allocs | ⚪ 0% |
counter_test/ (ns/op) | 18201.00 ns | 17965.00 ns | 🟢 -1.30% |
counter_test/ (B/op) | 11.81 KB | 11.81 KB | ⚪ 0% |
counter_test/ (allocs/op) | 253 allocs | 253 allocs | ⚪ 0% |
text_edit_gc_100/ (ns/op) | 1.39 ms | 1.39 ms | 🟢 -0.16% |
text_edit_gc_100/ (B/op) | 864.90 KB | 864.92 KB | ⚪ 0% |
text_edit_gc_100/ (allocs/op) | 17,281 allocs | 17,282 allocs | ⚪ 0% |
text_edit_gc_1000/ (ns/op) | 53.39 ms | 52.16 ms | 🟢 -2.30% |
text_edit_gc_1000/ (B/op) | 46.84 MB | 46.84 MB | ⚪ 0% |
text_edit_gc_1000/ (allocs/op) | 185,598 allocs | 185,590 allocs | ⚪ 0% |
text_split_gc_100/ (ns/op) | 2.12 ms | 2.10 ms | 🟢 -1.09% |
text_split_gc_100/ (B/op) | 1.58 MB | 1.58 MB | ⚪ 0% |
text_split_gc_100/ (allocs/op) | 15,950 allocs | 15,951 allocs | ⚪ 0% |
text_split_gc_1000/ (ns/op) | 128.25 ms | 126.29 ms | 🟢 -1.53% |
text_split_gc_1000/ (B/op) | 137.79 MB | 137.79 MB | ⚪ 0% |
text_split_gc_1000/ (allocs/op) | 185,000 allocs | 184,990 allocs | ⚪ 0% |
text_delete_all_10000/ (ns/op) | 18.43 ms | 16.46 ms | 🟢 -10.70% |
text_delete_all_10000/ (B/op) | 10.58 MB | 10.58 MB | ⚪ 0% |
text_delete_all_10000/ (allocs/op) | 56,134 allocs | 56,132 allocs | ⚪ 0% |
text_delete_all_100000/ (ns/op) | 312.31 ms | 287.17 ms | 🟢 -8.05% |
text_delete_all_100000/ (B/op) | 105.54 MB | 105.50 MB | 🟢 -0.04% |
text_delete_all_100000/ (allocs/op) | 566,133 allocs | 565,990 allocs | 🟢 -0.03% |
text_100/ (ns/op) | 234634.00 ns | 230544.00 ns | 🟢 -1.74% |
text_100/ (B/op) | 120.94 KB | 120.94 KB | ⚪ 0% |
text_100/ (allocs/op) | 5,181 allocs | 5,181 allocs | ⚪ 0% |
text_1000/ (ns/op) | 2.46 ms | 2.46 ms | 🟢 -0.08% |
text_1000/ (B/op) | 1.16 MB | 1.16 MB | ⚪ 0% |
text_1000/ (allocs/op) | 51,084 allocs | 51,084 allocs | ⚪ 0% |
array_1000/ (ns/op) | 1.24 ms | 1.25 ms | 🔴 +0.70% |
array_1000/ (B/op) | 1.09 MB | 1.09 MB | ⚪ 0% |
array_1000/ (allocs/op) | 11,879 allocs | 11,879 allocs | ⚪ 0% |
array_10000/ (ns/op) | 13.33 ms | 13.40 ms | 🔴 +0.50% |
array_10000/ (B/op) | 9.89 MB | 9.89 MB | ⚪ 0% |
array_10000/ (allocs/op) | 120,735 allocs | 120,732 allocs | ⚪ 0% |
array_gc_100/ (ns/op) | 131750.00 ns | 134574.00 ns | 🔴 +2.14% |
array_gc_100/ (B/op) | 99.89 KB | 99.87 KB | 🟢 -0.02% |
array_gc_100/ (allocs/op) | 1,266 allocs | 1,266 allocs | ⚪ 0% |
array_gc_1000/ (ns/op) | 1.42 ms | 1.45 ms | 🔴 +2.07% |
array_gc_1000/ (B/op) | 1.14 MB | 1.14 MB | ⚪ 0% |
array_gc_1000/ (allocs/op) | 12,926 allocs | 12,926 allocs | ⚪ 0% |
counter_1000/ (ns/op) | 202098.00 ns | 207534.00 ns | 🔴 +2.69% |
counter_1000/ (B/op) | 178.13 KB | 178.13 KB | ⚪ 0% |
counter_1000/ (allocs/op) | 5,771 allocs | 5,771 allocs | ⚪ 0% |
counter_10000/ (ns/op) | 2.17 ms | 2.16 ms | 🟢 -0.49% |
counter_10000/ (B/op) | 2.07 MB | 2.07 MB | ⚪ 0% |
counter_10000/ (allocs/op) | 59,778 allocs | 59,778 allocs | ⚪ 0% |
object_1000/ (ns/op) | 1.39 ms | 1.42 ms | 🔴 +2.10% |
object_1000/ (B/op) | 1.44 MB | 1.44 MB | 🔴 +0.01% |
object_1000/ (allocs/op) | 9,925 allocs | 9,925 allocs | ⚪ 0% |
object_10000/ (ns/op) | 14.82 ms | 14.79 ms | 🟢 -0.20% |
object_10000/ (B/op) | 12.35 MB | 12.35 MB | ⚪ 0% |
object_10000/ (allocs/op) | 101,232 allocs | 101,231 allocs | ⚪ 0% |
tree_100/ (ns/op) | 1.02 ms | 1.03 ms | 🔴 +1.26% |
tree_100/ (B/op) | 951.02 KB | 951.03 KB | ⚪ 0% |
tree_100/ (allocs/op) | 6,102 allocs | 6,102 allocs | ⚪ 0% |
tree_1000/ (ns/op) | 74.23 ms | 74.49 ms | 🔴 +0.35% |
tree_1000/ (B/op) | 86.58 MB | 86.58 MB | ⚪ 0% |
tree_1000/ (allocs/op) | 60,111 allocs | 60,112 allocs | ⚪ 0% |
tree_10000/ (ns/op) | 9.68 s | 9.50 s | 🟢 -1.89% |
tree_10000/ (B/op) | 8.58 GB | 8.58 GB | ⚪ 0% |
tree_10000/ (allocs/op) | 600,173 allocs | 600,181 allocs | ⚪ 0% |
tree_delete_all_1000/ (ns/op) | 78.41 ms | 76.14 ms | 🟢 -2.89% |
tree_delete_all_1000/ (B/op) | 87.57 MB | 87.57 MB | ⚪ 0% |
tree_delete_all_1000/ (allocs/op) | 75,289 allocs | 75,289 allocs | ⚪ 0% |
tree_edit_gc_100/ (ns/op) | 3.96 ms | 3.91 ms | 🟢 -1.18% |
tree_edit_gc_100/ (B/op) | 4.15 MB | 4.15 MB | ⚪ 0% |
tree_edit_gc_100/ (allocs/op) | 15,147 allocs | 15,146 allocs | ⚪ 0% |
tree_edit_gc_1000/ (ns/op) | 332.75 ms | 313.84 ms | 🟢 -5.68% |
tree_edit_gc_1000/ (B/op) | 384.04 MB | 384.04 MB | ⚪ 0% |
tree_edit_gc_1000/ (allocs/op) | 154,952 allocs | 154,941 allocs | ⚪ 0% |
tree_split_gc_100/ (ns/op) | 2.67 ms | 2.61 ms | 🟢 -2.16% |
tree_split_gc_100/ (B/op) | 2.41 MB | 2.41 MB | ⚪ 0% |
tree_split_gc_100/ (allocs/op) | 11,131 allocs | 11,131 allocs | ⚪ 0% |
tree_split_gc_1000/ (ns/op) | 197.74 ms | 190.84 ms | 🟢 -3.49% |
tree_split_gc_1000/ (B/op) | 222.50 MB | 222.50 MB | ⚪ 0% |
tree_split_gc_1000/ (allocs/op) | 122,053 allocs | 122,070 allocs | 🔴 +0.01% |
BenchmarkRPC
Benchmark suite | Previous | Current | Change |
---|---|---|---|
client_to_server/ (ns/op) | 431.85 ms | 415.81 ms | 🟢 -3.71% |
client_to_server/ (B/op) | 16.13 MB | 16.13 MB | 🔴 +0.01% |
client_to_server/ (allocs/op) | 223,674 allocs | 223,566 allocs | 🟢 -0.05% |
client_to_client_via_server/ (ns/op) | 788.62 ms | 770.96 ms | 🟢 -2.24% |
client_to_client_via_server/ (B/op) | 37.20 MB | 34.25 MB | 🟢 -7.93% |
client_to_client_via_server/ (allocs/op) | 478,656 allocs | 476,728 allocs | 🟢 -0.40% |
attach_large_document/ (ns/op) | 1.32 s | 1.29 s | 🟢 -2.69% |
attach_large_document/ (B/op) | 1.89 GB | 1.90 GB | 🔴 +0.60% |
attach_large_document/ (allocs/op) | 12,321 allocs | 12,510 allocs | 🔴 +1.53% |
adminCli_to_server/ (ns/op) | 542.08 ms | 537.25 ms | 🟢 -0.89% |
adminCli_to_server/ (B/op) | 21.76 MB | 21.47 MB | 🟢 -1.31% |
adminCli_to_server/ (allocs/op) | 291,952 allocs | 316,700 allocs | 🔴 +8.48% |
BenchmarkLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 82.86 ns | 82.29 ns | 🟢 -0.69% |
(B/op) | 32.00 B | 32.00 B | ⚪ 0% |
(allocs/op) | 1 allocs | 1 allocs | ⚪ 0% |
BenchmarkLockerParallel
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 45.80 ns | 45.15 ns | 🟢 -1.42% |
(B/op) | 0.00 B | 0.00 B | ⚪ 0% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkLockerMoreKeys
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 180.50 ns | 171.20 ns | 🟢 -5.15% |
(B/op) | 31.00 B | 31.00 B | ⚪ 0% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkRWLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
RWLock_rate_2/ (ns/op) | 50.25 ns | 49.20 ns | 🟢 -2.09% |
RWLock_rate_2/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_2/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_10/ (ns/op) | 44.88 ns | 43.78 ns | 🟢 -2.45% |
RWLock_rate_10/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_10/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_100/ (ns/op) | 63.08 ns | 57.85 ns | 🟢 -8.29% |
RWLock_rate_100/ (B/op) | 2.00 B | 1.00 B | 🟢 -50.00% |
RWLock_rate_100/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_1000/ (ns/op) | 91.91 ns | 86.53 ns | 🟢 -5.85% |
RWLock_rate_1000/ (B/op) | 8.00 B | 8.00 B | ⚪ 0% |
RWLock_rate_1000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkChange
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_10_Changes/ (ns/op) | 4.54 ms | 4.48 ms | 🟢 -1.20% |
Push_10_Changes/ (B/op) | 150.42 KB | 150.32 KB | 🟢 -0.06% |
Push_10_Changes/ (allocs/op) | 1,623 allocs | 1,622 allocs | 🟢 -0.06% |
Push_100_Changes/ (ns/op) | 16.52 ms | 16.68 ms | 🔴 +1.02% |
Push_100_Changes/ (B/op) | 770.59 KB | 771.00 KB | 🔴 +0.05% |
Push_100_Changes/ (allocs/op) | 8,509 allocs | 8,508 allocs | 🟢 -0.01% |
Push_1000_Changes/ (ns/op) | 129.20 ms | 131.50 ms | 🔴 +1.78% |
Push_1000_Changes/ (B/op) | 7.22 MB | 7.16 MB | 🟢 -0.85% |
Push_1000_Changes/ (allocs/op) | 79,325 allocs | 79,324 allocs | ⚪ 0% |
Pull_10_Changes/ (ns/op) | 3.70 ms | 3.65 ms | 🟢 -1.39% |
Pull_10_Changes/ (B/op) | 124.59 KB | 125.05 KB | 🔴 +0.37% |
Pull_10_Changes/ (allocs/op) | 1,456 allocs | 1,456 allocs | ⚪ 0% |
Pull_100_Changes/ (ns/op) | 5.32 ms | 5.24 ms | 🟢 -1.57% |
Pull_100_Changes/ (B/op) | 354.61 KB | 355.33 KB | 🔴 +0.20% |
Pull_100_Changes/ (allocs/op) | 5,182 allocs | 5,183 allocs | 🔴 +0.02% |
Pull_1000_Changes/ (ns/op) | 10.88 ms | 10.62 ms | 🟢 -2.33% |
Pull_1000_Changes/ (B/op) | 2.20 MB | 2.20 MB | ⚪ 0% |
Pull_1000_Changes/ (allocs/op) | 44,681 allocs | 44,683 allocs | ⚪ 0% |
BenchmarkSnapshot
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_3KB_snapshot/ (ns/op) | 19.55 ms | 18.71 ms | 🟢 -4.31% |
Push_3KB_snapshot/ (B/op) | 905.58 KB | 895.97 KB | 🟢 -1.06% |
Push_3KB_snapshot/ (allocs/op) | 8,516 allocs | 8,513 allocs | 🟢 -0.04% |
Push_30KB_snapshot/ (ns/op) | 132.18 ms | 135.94 ms | 🔴 +2.85% |
Push_30KB_snapshot/ (B/op) | 8.24 MB | 8.39 MB | 🔴 +1.78% |
Push_30KB_snapshot/ (allocs/op) | 89,008 allocs | 90,491 allocs | 🔴 +1.67% |
Pull_3KB_snapshot/ (ns/op) | 7.80 ms | 7.33 ms | 🟢 -6.09% |
Pull_3KB_snapshot/ (B/op) | 1.12 MB | 1.12 MB | 🔴 +0.06% |
Pull_3KB_snapshot/ (allocs/op) | 20,064 allocs | 20,065 allocs | ⚪ 0% |
Pull_30KB_snapshot/ (ns/op) | 19.91 ms | 19.10 ms | 🟢 -4.07% |
Pull_30KB_snapshot/ (B/op) | 9.31 MB | 9.31 MB | 🔴 +0.02% |
Pull_30KB_snapshot/ (allocs/op) | 193,610 allocs | 193,607 allocs | ⚪ 0% |
BenchmarkSplayTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
stress_test_100000/ (ns/op) | 0.19 ns | 0.19 ns | 🟢 -3.41% |
stress_test_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_200000/ (ns/op) | 0.40 ns | 0.40 ns | 🔴 +0.56% |
stress_test_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_300000/ (ns/op) | 0.57 ns | 0.59 ns | 🔴 +3.17% |
stress_test_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_100000/ (ns/op) | 0.01 ns | 0.01 ns | 🟢 -2.05% |
random_access_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_200000/ (ns/op) | 0.03 ns | 0.03 ns | 🔴 +4.53% |
random_access_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_300000/ (ns/op) | 0.04 ns | 0.05 ns | 🔴 +2.17% |
random_access_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
editing_trace_bench/ (ns/op) | 0.00 ns | 0.00 ns | 🟢 -3.40% |
editing_trace_bench/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
editing_trace_bench/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkSync
Benchmark suite | Previous | Current | Change |
---|---|---|---|
memory_sync_10_test/ (ns/op) | 7288.00 ns | 7248.00 ns | 🟢 -0.55% |
memory_sync_10_test/ (B/op) | 1.34 KB | 1.34 KB | ⚪ 0% |
memory_sync_10_test/ (allocs/op) | 35 allocs | 35 allocs | ⚪ 0% |
memory_sync_100_test/ (ns/op) | 55353.00 ns | 54288.00 ns | 🟢 -1.92% |
memory_sync_100_test/ (B/op) | 9.51 KB | 9.52 KB | 🔴 +0.18% |
memory_sync_100_test/ (allocs/op) | 268 allocs | 268 allocs | ⚪ 0% |
memory_sync_1000_test/ (ns/op) | 616285.00 ns | 621608.00 ns | 🔴 +0.86% |
memory_sync_1000_test/ (B/op) | 75.92 KB | 75.36 KB | 🟢 -0.74% |
memory_sync_1000_test/ (allocs/op) | 2,111 allocs | 2,095 allocs | 🟢 -0.76% |
memory_sync_10000_test/ (ns/op) | 7.47 ms | 7.82 ms | 🔴 +4.68% |
memory_sync_10000_test/ (B/op) | 761.49 KB | 756.11 KB | 🟢 -0.71% |
memory_sync_10000_test/ (allocs/op) | 20,475 allocs | 20,459 allocs | 🟢 -0.08% |
BenchmarkTextEditing
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 5.18 s | 5.28 s | 🔴 +2.00% |
(B/op) | 3.92 GB | 3.92 GB | ⚪ 0% |
(allocs/op) | 20,619,777 allocs | 20,619,653 allocs | ⚪ 0% |
BenchmarkTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
10000_vertices_to_protobuf/ (ns/op) | 4.17 ms | 4.31 ms | 🔴 +3.35% |
10000_vertices_to_protobuf/ (B/op) | 6.36 MB | 6.36 MB | ⚪ 0% |
10000_vertices_to_protobuf/ (allocs/op) | 70,025 allocs | 70,025 allocs | ⚪ 0% |
10000_vertices_from_protobuf/ (ns/op) | 217.30 ms | 224.15 ms | 🔴 +3.15% |
10000_vertices_from_protobuf/ (B/op) | 442.30 MB | 442.30 MB | ⚪ 0% |
10000_vertices_from_protobuf/ (allocs/op) | 290,038 allocs | 290,039 allocs | ⚪ 0% |
20000_vertices_to_protobuf/ (ns/op) | 8.84 ms | 9.46 ms | 🔴 +7.06% |
20000_vertices_to_protobuf/ (B/op) | 12.89 MB | 12.89 MB | ⚪ 0% |
20000_vertices_to_protobuf/ (allocs/op) | 140,028 allocs | 140,028 allocs | ⚪ 0% |
20000_vertices_from_protobuf/ (ns/op) | 884.61 ms | 878.60 ms | 🟢 -0.68% |
20000_vertices_from_protobuf/ (B/op) | 1.70 GB | 1.70 GB | ⚪ 0% |
20000_vertices_from_protobuf/ (allocs/op) | 580,043 allocs | 580,044 allocs | ⚪ 0% |
30000_vertices_to_protobuf/ (ns/op) | 14.26 ms | 14.02 ms | 🟢 -1.68% |
30000_vertices_to_protobuf/ (B/op) | 18.98 MB | 18.98 MB | ⚪ 0% |
30000_vertices_to_protobuf/ (allocs/op) | 210,029 allocs | 210,029 allocs | ⚪ 0% |
30000_vertices_from_protobuf/ (ns/op) | 2.00 s | 2.02 s | 🔴 +1.07% |
30000_vertices_from_protobuf/ (B/op) | 3.75 GB | 3.75 GB | ⚪ 0% |
30000_vertices_from_protobuf/ (allocs/op) | 870,147 allocs | 870,141 allocs | ⚪ 0% |
BenchmarkVersionVector
Benchmark suite | Previous | Current | Change |
---|---|---|---|
clients_10/ (ns/op) | 160.21 ms | 157.63 ms | 🟢 -1.61% |
clients_10/ (1_changepack(bytes)) | 745.00 B | 745.00 B | ⚪ 0% |
clients_10/ (2_snapshot(bytes)) | 379.00 B | 379.00 B | ⚪ 0% |
clients_10/ (3_pushpull(ms)) | 8.00 ms | 8.00 ms | ⚪ 0% |
clients_10/ (4_attach(ms)) | 6.00 ms | 6.00 ms | ⚪ 0% |
clients_10/ (5_changepack_after_detach(bytes)) | 805.00 B | 805.00 B | ⚪ 0% |
clients_10/ (6_snapshot_after_detach(bytes)) | 136.00 B | 136.00 B | ⚪ 0% |
clients_10/ (7_pushpull_after_detach(ms)) | 8.00 ms | 8.00 ms | ⚪ 0% |
clients_10/ (B/op) | 19.93 MB | 19.62 MB | 🟢 -1.57% |
clients_10/ (allocs/op) | 83,762 allocs | 83,765 allocs | ⚪ 0% |
clients_100/ (ns/op) | 1.41 s | 1.40 s | 🟢 -0.55% |
clients_100/ (1_changepack(bytes)) | 6.14 KB | 6.14 KB | ⚪ 0% |
clients_100/ (2_snapshot(bytes)) | 3.08 KB | 3.08 KB | ⚪ 0% |
clients_100/ (3_pushpull(ms)) | 11.00 ms | 10.00 ms | 🟢 -9.09% |
clients_100/ (4_attach(ms)) | 11.00 ms | 11.00 ms | ⚪ 0% |
clients_100/ (5_changepack_after_detach(bytes)) | 6.21 KB | 6.21 KB | ⚪ 0% |
clients_100/ (6_snapshot_after_detach(bytes)) | 137.00 B | 137.00 B | ⚪ 0% |
clients_100/ (7_pushpull_after_detach(ms)) | 9.00 ms | 9.00 ms | ⚪ 0% |
clients_100/ (B/op) | 230.31 MB | 230.31 MB | ⚪ 0% |
clients_100/ (allocs/op) | 1,539,768 allocs | 1,539,776 allocs | ⚪ 0% |
clients_1000/ (ns/op) | 60.97 s | 60.53 s | 🟢 -0.72% |
clients_1000/ (1_changepack(bytes)) | 60.16 KB | 60.16 KB | ⚪ 0% |
clients_1000/ (2_snapshot(bytes)) | 30.08 KB | 30.08 KB | ⚪ 0% |
clients_1000/ (3_pushpull(ms)) | 95.00 ms | 94.00 ms | 🟢 -1.05% |
clients_1000/ (4_attach(ms)) | 249.00 ms | 239.00 ms | 🟢 -4.02% |
clients_1000/ (5_changepack_after_detach(bytes)) | 60.22 KB | 60.22 KB | ⚪ 0% |
clients_1000/ (6_snapshot_after_detach(bytes)) | 139.00 B | 139.00 B | ⚪ 0% |
clients_1000/ (7_pushpull_after_detach(ms)) | 26.00 ms | 24.00 ms | 🟢 -7.69% |
clients_1000/ (B/op) | 22.07 GB | 22.06 GB | 🟢 -0.03% |
clients_1000/ (allocs/op) | 111,762,106 allocs | 111,758,279 allocs | ⚪ 0% |
- `pending` -> `debouncing` - `ExecuteOrSchedule` -> `Schedule`
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Go Benchmark Analysis 📊
This is a comparison result between the previous(e687d61) and the current commit(e0b2922).
Significant Changes (≥20% difference)
Benchmark suite | Previous | Current | Change |
---|---|---|---|
BenchmarkVersionVector/clients_1000/ (B/op) | 22.07 GB | 6.43 GB | 🟢 -70.86% |
BenchmarkVersionVector/clients_1000/ (4_attach(ms)) | 249.00 ms | 100.00 ms | 🟢 -59.84% |
BenchmarkRPC/client_to_client_via_server/ (allocs/op) | 478,656 allocs | 297,639 allocs | 🟢 -37.82% |
BenchmarkRPC/client_to_client_via_server/ (B/op) | 37.20 MB | 24.03 MB | 🟢 -35.39% |
BenchmarkRPC/client_to_client_via_server/ (ns/op) | 788.62 ms | 560.24 ms | 🟢 -28.96% |
BenchmarkVersionVector/clients_1000/ (ns/op) | 60.97 s | 45.07 s | 🟢 -26.08% |
BenchmarkVersionVector/clients_10/ (7_pushpull_after_detach(ms)) | 8.00 ms | 10.00 ms | 🔴 +25.00% |
Key Observations 🔍
-
The most significant change observed is in the
BenchmarkVersionVector/clients_1000/
suite, showing a remarkable decrease across various metrics:- Bytes operated decreased from 22.07 GB to 6.43 GB, a reduction of 70.86%.
- Attach time went down from 249.00 ms to 100.00 ms, marking a 59.84% decrease.
- The number of allocations per operation dropped by 16.47%.
-
The
BenchmarkRPC/client_to_client_via_server/
suite also exhibited notable improvements:- Allocations per operation decreased by 37.82%.
- Bytes operated dropped from 37.20 MB to 24.03 MB, marking a 35.39% reduction.
- Nanoseconds per operation decreased by 28.96%.
-
Overall, several benchmarks showed varying degrees of improvement (🟢) or degradation (🔴) in performance metrics. Notably, some tests saw marginal changes or remained relatively constant (⚪).
-
Specific attention should be paid to the
BenchmarkTree
suite, where noticeable increases in time for converting vertices to protobuf were observed, ranging from 2.87% to 6.77%. -
It is important to highlight the
BenchmarkSync
suite, where memory synchronization tests displayed decreases in time, with noteworthy reductions in operations involving 1000 and 10000 units. -
The data from different suites showcases a mix of positive and negative trends, emphasizing the importance of detailed analysis to understand performance changes accurately.
Clock Analysis
Lamport (v0.5.2)
Metric | 10 clients | 100 clients | 1000 clients |
---|---|---|---|
Total Operation Time | 84.96 ms | 793.94 ms | 34.79 s |
Memory Allocations | 35.11 MB | 219.92 MB | 4.91 GB |
Number of Allocations (allocs/op) | 69,271 | 1,246,728 | 81,485,288 |
ChangePack Size | 138.0 B | 137.0 B | 141.0 B |
Snapshot Size | 379.0 B | 3.08 KB | 30.08 KB |
Push-Pull Time | 2.0 ms | 1.5 ms | 4.0 ms |
Attach Time | 4.5 ms | 11.0 ms | 31.0 ms |
ChangePack After Detach | 138.0 B | 140.0 B | 141.0 B |
Snapshot After Detach | 136.0 B | 137.0 B | 139.0 B |
Push-Pull After Detach | 2.5 ms | 5.0 ms | 9.5 ms |
VV (current)
Metric | 10 clients | 100 clients | 1000 clients |
---|---|---|---|
Total Operation Time | 158.60 ms | 1.41 s | 45.07 s |
Memory Allocations | 20.03 MB | 223.58 MB | 6.43 GB |
Number of Allocations (allocs/op) | 83,230 | 1,481,585 | 93,354,307 |
ChangePack Size | 745.00 B | 6.14 KB | 60.16 KB |
Snapshot Size | 379.00 B | 3.08 KB | 30.08 KB |
Push-Pull Time | 7.00 ms | 1.5 ms | 91.00 ms |
Attach Time | 6.00 ms | 9.0 ms | 100.00 ms |
ChangePack After Detach | 805.00 B | 6.21 KB | 60.22 KB |
Snapshot After Detach | 136.00 B | 137.00 B | 139.00 B |
Push-Pull After Detach | 10.00 ms | 9.00 ms | 21.00 ms |
Summary
- Total operation time is generally faster with Version Vector for all client counts.
- Memory allocations are higher for Version Vector compared to Lamport for all client counts.
- Lamport clock has a significantly higher number of allocations per operation compared to Version Vector.
- ChangePack and Snapshot sizes are relatively similar between the two clock types.
- Push-Pull and Attach times vary between the clocks, with Version Vector performing better for some metrics.
- Version Vector shows improved performance in terms of changepack after detach, except for 100 clients.
- Version Vector has higher push-pull time after detach compared to Lamport.
Detailed Test Results
BenchmarkDocument
Benchmark suite | Previous | Current | Change |
---|---|---|---|
constructor_test/ (ns/op) | 1439.00 ns | 1493.00 ns | 🔴 +3.75% |
constructor_test/ (B/op) | 1.39 KB | 1.43 KB | 🔴 +3.47% |
constructor_test/ (allocs/op) | 24 allocs | 25 allocs | 🔴 +4.17% |
status_test/ (ns/op) | 1028.00 ns | 1065.00 ns | 🔴 +3.60% |
status_test/ (B/op) | 1.35 KB | 1.40 KB | 🔴 +3.55% |
status_test/ (allocs/op) | 22 allocs | 23 allocs | 🔴 +4.55% |
equals_test/ (ns/op) | 7864.00 ns | 7914.00 ns | 🔴 +0.64% |
equals_test/ (B/op) | 7.56 KB | 7.71 KB | 🔴 +1.90% |
equals_test/ (allocs/op) | 129 allocs | 132 allocs | 🔴 +2.33% |
nested_update_test/ (ns/op) | 17079.00 ns | 16901.00 ns | 🟢 -1.04% |
nested_update_test/ (B/op) | 12.31 KB | 12.36 KB | 🔴 +0.39% |
nested_update_test/ (allocs/op) | 258 allocs | 259 allocs | 🔴 +0.39% |
delete_test/ (ns/op) | 27313.00 ns | 27058.00 ns | 🟢 -0.93% |
delete_test/ (B/op) | 15.79 KB | 15.84 KB | 🔴 +0.30% |
delete_test/ (allocs/op) | 339 allocs | 340 allocs | 🔴 +0.29% |
object_test/ (ns/op) | 8546.00 ns | 8569.00 ns | 🔴 +0.27% |
object_test/ (B/op) | 7.03 KB | 7.08 KB | 🔴 +0.68% |
object_test/ (allocs/op) | 118 allocs | 119 allocs | 🔴 +0.85% |
array_test/ (ns/op) | 28984.00 ns | 28242.00 ns | 🟢 -2.56% |
array_test/ (B/op) | 12.14 KB | 12.19 KB | 🔴 +0.40% |
array_test/ (allocs/op) | 273 allocs | 274 allocs | 🔴 +0.37% |
text_test/ (ns/op) | 32155.00 ns | 32360.00 ns | 🔴 +0.64% |
text_test/ (B/op) | 15.19 KB | 15.24 KB | 🔴 +0.32% |
text_test/ (allocs/op) | 484 allocs | 485 allocs | 🔴 +0.21% |
text_composition_test/ (ns/op) | 31674.00 ns | 31684.00 ns | 🔴 +0.03% |
text_composition_test/ (B/op) | 18.70 KB | 18.75 KB | 🔴 +0.26% |
text_composition_test/ (allocs/op) | 501 allocs | 502 allocs | 🔴 +0.20% |
rich_text_test/ (ns/op) | 87424.00 ns | 85742.00 ns | 🟢 -1.92% |
rich_text_test/ (B/op) | 39.36 KB | 39.41 KB | 🔴 +0.12% |
rich_text_test/ (allocs/op) | 1,146 allocs | 1,147 allocs | 🔴 +0.09% |
counter_test/ (ns/op) | 18201.00 ns | 18429.00 ns | 🔴 +1.25% |
counter_test/ (B/op) | 11.81 KB | 11.86 KB | 🔴 +0.41% |
counter_test/ (allocs/op) | 253 allocs | 254 allocs | 🔴 +0.40% |
text_edit_gc_100/ (ns/op) | 1.39 ms | 1.39 ms | 🟢 -0.14% |
text_edit_gc_100/ (B/op) | 864.90 KB | 864.94 KB | ⚪ 0% |
text_edit_gc_100/ (allocs/op) | 17,281 allocs | 17,282 allocs | ⚪ 0% |
text_edit_gc_1000/ (ns/op) | 53.39 ms | 53.16 ms | 🟢 -0.43% |
text_edit_gc_1000/ (B/op) | 46.84 MB | 46.84 MB | ⚪ 0% |
text_edit_gc_1000/ (allocs/op) | 185,598 allocs | 185,595 allocs | ⚪ 0% |
text_split_gc_100/ (ns/op) | 2.12 ms | 2.11 ms | 🟢 -0.49% |
text_split_gc_100/ (B/op) | 1.58 MB | 1.58 MB | ⚪ 0% |
text_split_gc_100/ (allocs/op) | 15,950 allocs | 15,952 allocs | 🔴 +0.01% |
text_split_gc_1000/ (ns/op) | 128.25 ms | 128.42 ms | 🔴 +0.14% |
text_split_gc_1000/ (B/op) | 137.79 MB | 137.79 MB | ⚪ 0% |
text_split_gc_1000/ (allocs/op) | 185,000 allocs | 185,002 allocs | ⚪ 0% |
text_delete_all_10000/ (ns/op) | 18.43 ms | 16.31 ms | 🟢 -11.54% |
text_delete_all_10000/ (B/op) | 10.58 MB | 10.58 MB | ⚪ 0% |
text_delete_all_10000/ (allocs/op) | 56,134 allocs | 56,135 allocs | ⚪ 0% |
text_delete_all_100000/ (ns/op) | 312.31 ms | 295.13 ms | 🟢 -5.50% |
text_delete_all_100000/ (B/op) | 105.54 MB | 105.52 MB | 🟢 -0.02% |
text_delete_all_100000/ (allocs/op) | 566,133 allocs | 566,072 allocs | 🟢 -0.01% |
text_100/ (ns/op) | 234634.00 ns | 236405.00 ns | 🔴 +0.75% |
text_100/ (B/op) | 120.94 KB | 120.95 KB | 🔴 +0.01% |
text_100/ (allocs/op) | 5,181 allocs | 5,182 allocs | 🔴 +0.02% |
text_1000/ (ns/op) | 2.46 ms | 2.49 ms | 🔴 +1.16% |
text_1000/ (B/op) | 1.16 MB | 1.16 MB | 🔴 +0.03% |
text_1000/ (allocs/op) | 51,084 allocs | 51,085 allocs | ⚪ 0% |
array_1000/ (ns/op) | 1.24 ms | 1.43 ms | 🔴 +15.26% |
array_1000/ (B/op) | 1.09 MB | 1.09 MB | 🔴 +0.01% |
array_1000/ (allocs/op) | 11,879 allocs | 11,881 allocs | 🔴 +0.02% |
array_10000/ (ns/op) | 13.33 ms | 13.37 ms | 🔴 +0.24% |
array_10000/ (B/op) | 9.89 MB | 9.89 MB | ⚪ 0% |
array_10000/ (allocs/op) | 120,735 allocs | 120,736 allocs | ⚪ 0% |
array_gc_100/ (ns/op) | 131750.00 ns | 134808.00 ns | 🔴 +2.32% |
array_gc_100/ (B/op) | 99.89 KB | 99.93 KB | 🔴 +0.03% |
array_gc_100/ (allocs/op) | 1,266 allocs | 1,267 allocs | 🔴 +0.08% |
array_gc_1000/ (ns/op) | 1.42 ms | 1.45 ms | 🔴 +1.81% |
array_gc_1000/ (B/op) | 1.14 MB | 1.14 MB | ⚪ 0% |
array_gc_1000/ (allocs/op) | 12,926 allocs | 12,927 allocs | ⚪ 0% |
counter_1000/ (ns/op) | 202098.00 ns | 207303.00 ns | 🔴 +2.58% |
counter_1000/ (B/op) | 178.13 KB | 178.18 KB | 🔴 +0.03% |
counter_1000/ (allocs/op) | 5,771 allocs | 5,772 allocs | 🔴 +0.02% |
counter_10000/ (ns/op) | 2.17 ms | 2.24 ms | 🔴 +3.31% |
counter_10000/ (B/op) | 2.07 MB | 2.07 MB | ⚪ 0% |
counter_10000/ (allocs/op) | 59,778 allocs | 59,779 allocs | ⚪ 0% |
object_1000/ (ns/op) | 1.39 ms | 1.44 ms | 🔴 +3.72% |
object_1000/ (B/op) | 1.44 MB | 1.44 MB | ⚪ 0% |
object_1000/ (allocs/op) | 9,925 allocs | 9,926 allocs | 🔴 +0.01% |
object_10000/ (ns/op) | 14.82 ms | 14.79 ms | 🟢 -0.17% |
object_10000/ (B/op) | 12.35 MB | 12.35 MB | ⚪ 0% |
object_10000/ (allocs/op) | 101,232 allocs | 101,231 allocs | ⚪ 0% |
tree_100/ (ns/op) | 1.02 ms | 1.08 ms | 🔴 +5.80% |
tree_100/ (B/op) | 951.02 KB | 951.08 KB | ⚪ 0% |
tree_100/ (allocs/op) | 6,102 allocs | 6,103 allocs | 🔴 +0.02% |
tree_1000/ (ns/op) | 74.23 ms | 79.26 ms | 🔴 +6.77% |
tree_1000/ (B/op) | 86.58 MB | 86.58 MB | ⚪ 0% |
tree_1000/ (allocs/op) | 60,111 allocs | 60,113 allocs | ⚪ 0% |
tree_10000/ (ns/op) | 9.68 s | 9.48 s | 🟢 -2.08% |
tree_10000/ (B/op) | 8.58 GB | 8.58 GB | ⚪ 0% |
tree_10000/ (allocs/op) | 600,173 allocs | 600,193 allocs | ⚪ 0% |
tree_delete_all_1000/ (ns/op) | 78.41 ms | 78.64 ms | 🔴 +0.30% |
tree_delete_all_1000/ (B/op) | 87.57 MB | 87.57 MB | ⚪ 0% |
tree_delete_all_1000/ (allocs/op) | 75,289 allocs | 75,291 allocs | ⚪ 0% |
tree_edit_gc_100/ (ns/op) | 3.96 ms | 3.88 ms | 🟢 -2.14% |
tree_edit_gc_100/ (B/op) | 4.15 MB | 4.15 MB | ⚪ 0% |
tree_edit_gc_100/ (allocs/op) | 15,147 allocs | 15,147 allocs | ⚪ 0% |
tree_edit_gc_1000/ (ns/op) | 332.75 ms | 318.99 ms | 🟢 -4.13% |
tree_edit_gc_1000/ (B/op) | 384.04 MB | 384.05 MB | ⚪ 0% |
tree_edit_gc_1000/ (allocs/op) | 154,952 allocs | 154,943 allocs | ⚪ 0% |
tree_split_gc_100/ (ns/op) | 2.67 ms | 2.66 ms | 🟢 -0.41% |
tree_split_gc_100/ (B/op) | 2.41 MB | 2.41 MB | ⚪ 0% |
tree_split_gc_100/ (allocs/op) | 11,131 allocs | 11,132 allocs | ⚪ 0% |
tree_split_gc_1000/ (ns/op) | 197.74 ms | 198.10 ms | 🔴 +0.18% |
tree_split_gc_1000/ (B/op) | 222.50 MB | 222.50 MB | ⚪ 0% |
tree_split_gc_1000/ (allocs/op) | 122,053 allocs | 122,075 allocs | 🔴 +0.02% |
BenchmarkRPC
Benchmark suite | Previous | Current | Change |
---|---|---|---|
client_to_server/ (ns/op) | 431.85 ms | 418.93 ms | 🟢 -2.99% |
client_to_server/ (B/op) | 16.13 MB | 16.15 MB | 🔴 +0.11% |
client_to_server/ (allocs/op) | 223,674 allocs | 223,148 allocs | 🟢 -0.24% |
client_to_client_via_server/ (ns/op) | 788.62 ms | 560.24 ms | 🟢 -28.96% |
client_to_client_via_server/ (B/op) | 37.20 MB | 24.03 MB | 🟢 -35.39% |
client_to_client_via_server/ (allocs/op) | 478,656 allocs | 297,639 allocs | 🟢 -37.82% |
attach_large_document/ (ns/op) | 1.32 s | 1.23 s | 🟢 -6.99% |
attach_large_document/ (B/op) | 1.89 GB | 1.89 GB | 🔴 +0.04% |
attach_large_document/ (allocs/op) | 12,321 allocs | 12,401 allocs | 🔴 +0.65% |
adminCli_to_server/ (ns/op) | 542.08 ms | 543.70 ms | 🔴 +0.30% |
adminCli_to_server/ (B/op) | 21.76 MB | 21.33 MB | 🟢 -1.97% |
adminCli_to_server/ (allocs/op) | 291,952 allocs | 316,691 allocs | 🔴 +8.47% |
BenchmarkLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 82.86 ns | 94.46 ns | 🔴 +14.00% |
(B/op) | 32.00 B | 32.00 B | ⚪ 0% |
(allocs/op) | 1 allocs | 1 allocs | ⚪ 0% |
BenchmarkLockerParallel
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 45.80 ns | 44.56 ns | 🟢 -2.71% |
(B/op) | 0.00 B | 0.00 B | ⚪ 0% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkLockerMoreKeys
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 180.50 ns | 179.60 ns | 🟢 -0.50% |
(B/op) | 31.00 B | 31.00 B | ⚪ 0% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkRWLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
RWLock_rate_2/ (ns/op) | 50.25 ns | 49.90 ns | 🟢 -0.70% |
RWLock_rate_2/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_2/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_10/ (ns/op) | 44.88 ns | 44.72 ns | 🟢 -0.36% |
RWLock_rate_10/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_10/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_100/ (ns/op) | 63.08 ns | 60.76 ns | 🟢 -3.68% |
RWLock_rate_100/ (B/op) | 2.00 B | 2.00 B | ⚪ 0% |
RWLock_rate_100/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_1000/ (ns/op) | 91.91 ns | 89.97 ns | 🟢 -2.11% |
RWLock_rate_1000/ (B/op) | 8.00 B | 8.00 B | ⚪ 0% |
RWLock_rate_1000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkChange
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_10_Changes/ (ns/op) | 4.54 ms | 4.52 ms | 🟢 -0.50% |
Push_10_Changes/ (B/op) | 150.42 KB | 150.87 KB | 🔴 +0.30% |
Push_10_Changes/ (allocs/op) | 1,623 allocs | 1,624 allocs | 🔴 +0.06% |
Push_100_Changes/ (ns/op) | 16.52 ms | 16.06 ms | 🟢 -2.73% |
Push_100_Changes/ (B/op) | 770.59 KB | 771.55 KB | 🔴 +0.13% |
Push_100_Changes/ (allocs/op) | 8,509 allocs | 8,509 allocs | ⚪ 0% |
Push_1000_Changes/ (ns/op) | 129.20 ms | 129.04 ms | 🟢 -0.12% |
Push_1000_Changes/ (B/op) | 7.22 MB | 7.38 MB | 🔴 +2.23% |
Push_1000_Changes/ (allocs/op) | 79,325 allocs | 79,328 allocs | ⚪ 0% |
Pull_10_Changes/ (ns/op) | 3.70 ms | 3.66 ms | 🟢 -1.12% |
Pull_10_Changes/ (B/op) | 124.59 KB | 124.40 KB | 🟢 -0.15% |
Pull_10_Changes/ (allocs/op) | 1,456 allocs | 1,454 allocs | 🟢 -0.14% |
Pull_100_Changes/ (ns/op) | 5.32 ms | 5.24 ms | 🟢 -1.57% |
Pull_100_Changes/ (B/op) | 354.61 KB | 354.98 KB | 🔴 +0.11% |
Pull_100_Changes/ (allocs/op) | 5,182 allocs | 5,182 allocs | ⚪ 0% |
Pull_1000_Changes/ (ns/op) | 10.88 ms | 10.46 ms | 🟢 -3.82% |
Pull_1000_Changes/ (B/op) | 2.20 MB | 2.20 MB | 🟢 -0.02% |
Pull_1000_Changes/ (allocs/op) | 44,681 allocs | 44,680 allocs | ⚪ 0% |
BenchmarkSnapshot
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_3KB_snapshot/ (ns/op) | 19.55 ms | 18.61 ms | 🟢 -4.85% |
Push_3KB_snapshot/ (B/op) | 905.58 KB | 905.98 KB | 🔴 +0.04% |
Push_3KB_snapshot/ (allocs/op) | 8,516 allocs | 8,512 allocs | 🟢 -0.05% |
Push_30KB_snapshot/ (ns/op) | 132.18 ms | 132.66 ms | 🔴 +0.37% |
Push_30KB_snapshot/ (B/op) | 8.24 MB | 8.13 MB | 🟢 -1.35% |
Push_30KB_snapshot/ (allocs/op) | 89,008 allocs | 86,442 allocs | 🟢 -2.88% |
Pull_3KB_snapshot/ (ns/op) | 7.80 ms | 7.39 ms | 🟢 -5.33% |
Pull_3KB_snapshot/ (B/op) | 1.12 MB | 1.06 MB | 🟢 -4.81% |
Pull_3KB_snapshot/ (allocs/op) | 20,064 allocs | 19,260 allocs | 🟢 -4.01% |
Pull_30KB_snapshot/ (ns/op) | 19.91 ms | 19.53 ms | 🟢 -1.93% |
Pull_30KB_snapshot/ (B/op) | 9.31 MB | 8.77 MB | 🟢 -5.81% |
Pull_30KB_snapshot/ (allocs/op) | 193,610 allocs | 185,672 allocs | 🟢 -4.10% |
BenchmarkSplayTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
stress_test_100000/ (ns/op) | 0.19 ns | 0.19 ns | ⚪ 0% |
stress_test_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_200000/ (ns/op) | 0.40 ns | 0.38 ns | 🟢 -4.30% |
stress_test_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_300000/ (ns/op) | 0.57 ns | 0.59 ns | 🔴 +4.01% |
stress_test_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_100000/ (ns/op) | 0.01 ns | 0.01 ns | 🟢 -0.31% |
random_access_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_200000/ (ns/op) | 0.03 ns | 0.03 ns | 🟢 -0.25% |
random_access_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_300000/ (ns/op) | 0.04 ns | 0.05 ns | 🔴 +3.28% |
random_access_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
editing_trace_bench/ (ns/op) | 0.00 ns | 0.00 ns | 🟢 -12.62% |
editing_trace_bench/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
editing_trace_bench/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkSync
Benchmark suite | Previous | Current | Change |
---|---|---|---|
memory_sync_10_test/ (ns/op) | 7288.00 ns | 7191.00 ns | 🟢 -1.33% |
memory_sync_10_test/ (B/op) | 1.34 KB | 1.34 KB | ⚪ 0% |
memory_sync_10_test/ (allocs/op) | 35 allocs | 35 allocs | ⚪ 0% |
memory_sync_100_test/ (ns/op) | 55353.00 ns | 55208.00 ns | 🟢 -0.26% |
memory_sync_100_test/ (B/op) | 9.51 KB | 9.50 KB | 🟢 -0.02% |
memory_sync_100_test/ (allocs/op) | 268 allocs | 268 allocs | ⚪ 0% |
memory_sync_1000_test/ (ns/op) | 616285.00 ns | 611942.00 ns | 🟢 -0.70% |
memory_sync_1000_test/ (B/op) | 75.92 KB | 76.20 KB | 🔴 +0.37% |
memory_sync_1000_test/ (allocs/op) | 2,111 allocs | 2,120 allocs | 🔴 +0.43% |
memory_sync_10000_test/ (ns/op) | 7.47 ms | 7.85 ms | 🔴 +4.99% |
memory_sync_10000_test/ (B/op) | 761.49 KB | 762.83 KB | 🔴 +0.18% |
memory_sync_10000_test/ (allocs/op) | 20,475 allocs | 20,493 allocs | 🔴 +0.09% |
BenchmarkTextEditing
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 5.18 s | 5.19 s | 🔴 +0.20% |
(B/op) | 3.92 GB | 3.92 GB | ⚪ 0% |
(allocs/op) | 20,619,777 allocs | 20,619,738 allocs | ⚪ 0% |
BenchmarkTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
10000_vertices_to_protobuf/ (ns/op) | 4.17 ms | 4.29 ms | 🔴 +2.94% |
10000_vertices_to_protobuf/ (B/op) | 6.36 MB | 6.36 MB | ⚪ 0% |
10000_vertices_to_protobuf/ (allocs/op) | 70,025 allocs | 70,025 allocs | ⚪ 0% |
10000_vertices_from_protobuf/ (ns/op) | 217.30 ms | 223.55 ms | 🔴 +2.87% |
10000_vertices_from_protobuf/ (B/op) | 442.30 MB | 442.30 MB | ⚪ 0% |
10000_vertices_from_protobuf/ (allocs/op) | 290,038 allocs | 290,039 allocs | ⚪ 0% |
20000_vertices_to_protobuf/ (ns/op) | 8.84 ms | 9.33 ms | 🔴 +5.55% |
20000_vertices_to_protobuf/ (B/op) | 12.89 MB | 12.89 MB | ⚪ 0% |
20000_vertices_to_protobuf/ (allocs/op) | 140,028 allocs | 140,028 allocs | ⚪ 0% |
20000_vertices_from_protobuf/ (ns/op) | 884.61 ms | 866.04 ms | 🟢 -2.10% |
20000_vertices_from_protobuf/ (B/op) | 1.70 GB | 1.70 GB | ⚪ 0% |
20000_vertices_from_protobuf/ (allocs/op) | 580,043 allocs | 580,088 allocs | ⚪ 0% |
30000_vertices_to_protobuf/ (ns/op) | 14.26 ms | 13.28 ms | 🟢 -6.89% |
30000_vertices_to_protobuf/ (B/op) | 18.98 MB | 18.98 MB | ⚪ 0% |
30000_vertices_to_protobuf/ (allocs/op) | 210,029 allocs | 210,029 allocs | ⚪ 0% |
30000_vertices_from_protobuf/ (ns/op) | 2.00 s | 2.01 s | 🔴 +0.42% |
30000_vertices_from_protobuf/ (B/op) | 3.75 GB | 3.75 GB | ⚪ 0% |
30000_vertices_from_protobuf/ (allocs/op) | 870,147 allocs | 870,142 allocs | ⚪ 0% |
BenchmarkVersionVector
Benchmark suite | Previous | Current | Change |
---|---|---|---|
clients_10/ (ns/op) | 160.21 ms | 158.60 ms | 🟢 -1.00% |
clients_10/ (1_changepack(bytes)) | 745.00 B | 745.00 B | ⚪ 0% |
clients_10/ (2_snapshot(bytes)) | 379.00 B | 379.00 B | ⚪ 0% |
clients_10/ (3_pushpull(ms)) | 8.00 ms | 7.00 ms | 🟢 -12.50% |
clients_10/ (4_attach(ms)) | 6.00 ms | 6.00 ms | ⚪ 0% |
clients_10/ (5_changepack_after_detach(bytes)) | 805.00 B | 805.00 B | ⚪ 0% |
clients_10/ (6_snapshot_after_detach(bytes)) | 136.00 B | 136.00 B | ⚪ 0% |
clients_10/ (7_pushpull_after_detach(ms)) | 8.00 ms | 10.00 ms | 🔴 +25.00% |
clients_10/ (B/op) | 19.93 MB | 20.03 MB | 🔴 +0.49% |
clients_10/ (allocs/op) | 83,762 allocs | 83,230 allocs | 🟢 -0.64% |
clients_100/ (ns/op) | 1.41 s | 1.41 s | 🟢 -0.41% |
clients_100/ (1_changepack(bytes)) | 6.14 KB | 6.14 KB | ⚪ 0% |
clients_100/ (2_snapshot(bytes)) | 3.08 KB | 3.08 KB | ⚪ 0% |
clients_100/ (3_pushpull(ms)) | 11.00 ms | 11.00 ms | ⚪ 0% |
clients_100/ (4_attach(ms)) | 11.00 ms | 9.00 ms | 🟢 -18.18% |
clients_100/ (5_changepack_after_detach(bytes)) | 6.21 KB | 6.21 KB | ⚪ 0% |
clients_100/ (6_snapshot_after_detach(bytes)) | 137.00 B | 137.00 B | ⚪ 0% |
clients_100/ (7_pushpull_after_detach(ms)) | 9.00 ms | 9.00 ms | ⚪ 0% |
clients_100/ (B/op) | 230.31 MB | 223.58 MB | 🟢 -2.92% |
clients_100/ (allocs/op) | 1,539,768 allocs | 1,481,585 allocs | 🟢 -3.78% |
clients_1000/ (ns/op) | 60.97 s | 45.07 s | 🟢 -26.08% |
clients_1000/ (1_changepack(bytes)) | 60.16 KB | 60.16 KB | ⚪ 0% |
clients_1000/ (2_snapshot(bytes)) | 30.08 KB | 30.08 KB | ⚪ 0% |
clients_1000/ (3_pushpull(ms)) | 95.00 ms | 91.00 ms | 🟢 -4.21% |
clients_1000/ (4_attach(ms)) | 249.00 ms | 100.00 ms | 🟢 -59.84% |
clients_1000/ (5_changepack_after_detach(bytes)) | 60.22 KB | 60.22 KB | ⚪ 0% |
clients_1000/ (6_snapshot_after_detach(bytes)) | 139.00 B | 139.00 B | ⚪ 0% |
clients_1000/ (7_pushpull_after_detach(ms)) | 26.00 ms | 21.00 ms | 🟢 -19.23% |
clients_1000/ (B/op) | 22.07 GB | 6.43 GB | 🟢 -70.86% |
clients_1000/ (allocs/op) | 111,762,106 allocs | 93,354,307 allocs | 🟢 -16.47% |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Go Benchmark Analysis 📊
This is a comparison result between the previous(c7797cf) and the current commit(ebc525a).
Significant Changes (≥20% difference)
Benchmark suite | Previous | Current | Change |
---|---|---|---|
BenchmarkRPC/client_to_client_via_server/ (B/op) | 39.09 MB | 24.58 MB | 🟢 -37.13% |
BenchmarkRPC/client_to_client_via_server/ (allocs/op) | 470,568 allocs | 300,624 allocs | 🟢 -36.11% |
BenchmarkRPC/client_to_client_via_server/ (ns/op) | 771.40 ms | 569.97 ms | 🟢 -26.11% |
BenchmarkSplayTree/random_access_200000/ (ns/op) | 0.03 ns | 0.03 ns | 🔴 +20.81% |
Key Observations 🔍
-
BenchmarkRPC:
- BenchmarkRPC
client_to_client_via_server
demonstrated significant improvements across different metrics:- Bytes per operation reduced by 37.13%.
- Allocations per operation decreased by 36.11%.
- Nanoseconds per operation improved by 26.11%.
- In contrast, a slight increase of 1.46% was observed in the
client_to_server
operation in terms of nanoseconds per operation.
- BenchmarkRPC
-
BenchmarkTextEditing:
- The benchmark suite for text editing showed a notable increase of 1.79% in nanoseconds per operation, indicating a slight performance degradation.
-
BenchmarkTree:
- The
10000_vertices_to_protobuf
operation experienced a 4.47% increase in nanoseconds per operation, while the20000_vertices_from_protobuf
operation showed a 2.95% increase in the same metric. - Conversely, the
30000_vertices_from_protobuf
operation saw a minimal improvement of 0.36% in nanoseconds per operation.
- The
-
Overall Trend:
- Several benchmarks displayed minor fluctuations, with some operations showcasing improvements and others having slight deteriorations.
- Across the various benchmark suites, improvements were more prevalent than deteriorations, indicating overall positive performance trends.
In this analysis, noticeable optimizations were observed in certain benchmark suites, contributing to enhanced performance metrics.
Detailed Test Results
BenchmarkDocument
Benchmark suite | Previous | Current | Change |
---|---|---|---|
constructor_test/ (ns/op) | 1472.00 ns | 1487.00 ns | 🔴 +1.02% |
constructor_test/ (B/op) | 1.43 KB | 1.43 KB | ⚪ 0% |
constructor_test/ (allocs/op) | 25 allocs | 25 allocs | ⚪ 0% |
status_test/ (ns/op) | 1334.00 ns | 1068.00 ns | 🟢 -19.94% |
status_test/ (B/op) | 1.40 KB | 1.40 KB | ⚪ 0% |
status_test/ (allocs/op) | 23 allocs | 23 allocs | ⚪ 0% |
equals_test/ (ns/op) | 7938.00 ns | 7953.00 ns | 🔴 +0.19% |
equals_test/ (B/op) | 7.71 KB | 7.71 KB | ⚪ 0% |
equals_test/ (allocs/op) | 132 allocs | 132 allocs | ⚪ 0% |
nested_update_test/ (ns/op) | 17081.00 ns | 16958.00 ns | 🟢 -0.72% |
nested_update_test/ (B/op) | 12.36 KB | 12.36 KB | ⚪ 0% |
nested_update_test/ (allocs/op) | 259 allocs | 259 allocs | ⚪ 0% |
delete_test/ (ns/op) | 22790.00 ns | 22875.00 ns | 🔴 +0.37% |
delete_test/ (B/op) | 15.84 KB | 15.84 KB | ⚪ 0% |
delete_test/ (allocs/op) | 340 allocs | 340 allocs | ⚪ 0% |
object_test/ (ns/op) | 8539.00 ns | 8553.00 ns | 🔴 +0.16% |
object_test/ (B/op) | 7.08 KB | 7.08 KB | 🔴 +0.01% |
object_test/ (allocs/op) | 119 allocs | 119 allocs | ⚪ 0% |
array_test/ (ns/op) | 28405.00 ns | 28866.00 ns | 🔴 +1.62% |
array_test/ (B/op) | 12.19 KB | 12.19 KB | ⚪ 0% |
array_test/ (allocs/op) | 274 allocs | 274 allocs | ⚪ 0% |
text_test/ (ns/op) | 31656.00 ns | 33568.00 ns | 🔴 +6.04% |
text_test/ (B/op) | 15.24 KB | 15.24 KB | ⚪ 0% |
text_test/ (allocs/op) | 485 allocs | 485 allocs | ⚪ 0% |
text_composition_test/ (ns/op) | 31389.00 ns | 31614.00 ns | 🔴 +0.72% |
text_composition_test/ (B/op) | 18.75 KB | 18.75 KB | ⚪ 0% |
text_composition_test/ (allocs/op) | 502 allocs | 502 allocs | ⚪ 0% |
rich_text_test/ (ns/op) | 86962.00 ns | 85130.00 ns | 🟢 -2.11% |
rich_text_test/ (B/op) | 39.41 KB | 39.40 KB | 🟢 -0.02% |
rich_text_test/ (allocs/op) | 1,147 allocs | 1,147 allocs | ⚪ 0% |
counter_test/ (ns/op) | 18075.00 ns | 18613.00 ns | 🔴 +2.98% |
counter_test/ (B/op) | 11.86 KB | 11.86 KB | ⚪ 0% |
counter_test/ (allocs/op) | 254 allocs | 254 allocs | ⚪ 0% |
text_edit_gc_100/ (ns/op) | 1.38 ms | 1.39 ms | 🔴 +0.70% |
text_edit_gc_100/ (B/op) | 864.90 KB | 864.90 KB | ⚪ 0% |
text_edit_gc_100/ (allocs/op) | 17,282 allocs | 17,282 allocs | ⚪ 0% |
text_edit_gc_1000/ (ns/op) | 52.51 ms | 53.03 ms | 🔴 +1.00% |
text_edit_gc_1000/ (B/op) | 46.84 MB | 46.84 MB | ⚪ 0% |
text_edit_gc_1000/ (allocs/op) | 185,593 allocs | 185,590 allocs | ⚪ 0% |
text_split_gc_100/ (ns/op) | 2.09 ms | 2.10 ms | 🔴 +0.54% |
text_split_gc_100/ (B/op) | 1.58 MB | 1.58 MB | ⚪ 0% |
text_split_gc_100/ (allocs/op) | 15,952 allocs | 15,951 allocs | ⚪ 0% |
text_split_gc_1000/ (ns/op) | 127.97 ms | 129.64 ms | 🔴 +1.31% |
text_split_gc_1000/ (B/op) | 137.79 MB | 137.79 MB | ⚪ 0% |
text_split_gc_1000/ (allocs/op) | 184,998 allocs | 184,991 allocs | ⚪ 0% |
text_delete_all_10000/ (ns/op) | 16.81 ms | 17.41 ms | 🔴 +3.54% |
text_delete_all_10000/ (B/op) | 10.58 MB | 10.58 MB | ⚪ 0% |
text_delete_all_10000/ (allocs/op) | 56,138 allocs | 56,138 allocs | ⚪ 0% |
text_delete_all_100000/ (ns/op) | 290.19 ms | 293.08 ms | 🔴 +1.00% |
text_delete_all_100000/ (B/op) | 105.54 MB | 105.53 MB | ⚪ 0% |
text_delete_all_100000/ (allocs/op) | 566,122 allocs | 566,115 allocs | ⚪ 0% |
text_100/ (ns/op) | 228221.00 ns | 239975.00 ns | 🔴 +5.15% |
text_100/ (B/op) | 120.95 KB | 120.99 KB | 🔴 +0.03% |
text_100/ (allocs/op) | 5,182 allocs | 5,182 allocs | ⚪ 0% |
text_1000/ (ns/op) | 2.43 ms | 2.50 ms | 🔴 +2.73% |
text_1000/ (B/op) | 1.16 MB | 1.16 MB | ⚪ 0% |
text_1000/ (allocs/op) | 51,085 allocs | 51,085 allocs | ⚪ 0% |
array_1000/ (ns/op) | 1.24 ms | 1.27 ms | 🔴 +2.66% |
array_1000/ (B/op) | 1.09 MB | 1.09 MB | 🔴 +0.02% |
array_1000/ (allocs/op) | 11,880 allocs | 11,880 allocs | ⚪ 0% |
array_10000/ (ns/op) | 13.36 ms | 13.43 ms | 🔴 +0.59% |
array_10000/ (B/op) | 9.89 MB | 9.89 MB | ⚪ 0% |
array_10000/ (allocs/op) | 120,736 allocs | 120,735 allocs | ⚪ 0% |
array_gc_100/ (ns/op) | 131033.00 ns | 137279.00 ns | 🔴 +4.77% |
array_gc_100/ (B/op) | 99.93 KB | 99.93 KB | ⚪ 0% |
array_gc_100/ (allocs/op) | 1,267 allocs | 1,267 allocs | ⚪ 0% |
array_gc_1000/ (ns/op) | 1.41 ms | 1.45 ms | 🔴 +3.25% |
array_gc_1000/ (B/op) | 1.14 MB | 1.14 MB | ⚪ 0% |
array_gc_1000/ (allocs/op) | 12,927 allocs | 12,928 allocs | ⚪ 0% |
counter_1000/ (ns/op) | 199973.00 ns | 207772.00 ns | 🔴 +3.90% |
counter_1000/ (B/op) | 178.18 KB | 178.19 KB | ⚪ 0% |
counter_1000/ (allocs/op) | 5,772 allocs | 5,772 allocs | ⚪ 0% |
counter_10000/ (ns/op) | 2.14 ms | 2.18 ms | 🔴 +1.68% |
counter_10000/ (B/op) | 2.07 MB | 2.07 MB | ⚪ 0% |
counter_10000/ (allocs/op) | 59,779 allocs | 59,779 allocs | ⚪ 0% |
object_1000/ (ns/op) | 1.41 ms | 1.46 ms | 🔴 +3.56% |
object_1000/ (B/op) | 1.44 MB | 1.44 MB | ⚪ 0% |
object_1000/ (allocs/op) | 9,926 allocs | 9,926 allocs | ⚪ 0% |
object_10000/ (ns/op) | 14.97 ms | 15.18 ms | 🔴 +1.38% |
object_10000/ (B/op) | 12.35 MB | 12.35 MB | ⚪ 0% |
object_10000/ (allocs/op) | 101,232 allocs | 101,230 allocs | ⚪ 0% |
tree_100/ (ns/op) | 1.04 ms | 1.08 ms | 🔴 +4.09% |
tree_100/ (B/op) | 951.08 KB | 951.08 KB | ⚪ 0% |
tree_100/ (allocs/op) | 6,103 allocs | 6,103 allocs | ⚪ 0% |
tree_1000/ (ns/op) | 74.45 ms | 79.89 ms | 🔴 +7.31% |
tree_1000/ (B/op) | 86.58 MB | 86.58 MB | ⚪ 0% |
tree_1000/ (allocs/op) | 60,113 allocs | 60,113 allocs | ⚪ 0% |
tree_10000/ (ns/op) | 9.39 s | 9.61 s | 🔴 +2.35% |
tree_10000/ (B/op) | 8.58 GB | 8.58 GB | ⚪ 0% |
tree_10000/ (allocs/op) | 600,205 allocs | 600,187 allocs | ⚪ 0% |
tree_delete_all_1000/ (ns/op) | 77.01 ms | 79.83 ms | 🔴 +3.66% |
tree_delete_all_1000/ (B/op) | 87.57 MB | 87.57 MB | ⚪ 0% |
tree_delete_all_1000/ (allocs/op) | 75,291 allocs | 75,291 allocs | ⚪ 0% |
tree_edit_gc_100/ (ns/op) | 3.83 ms | 3.96 ms | 🔴 +3.27% |
tree_edit_gc_100/ (B/op) | 4.15 MB | 4.15 MB | ⚪ 0% |
tree_edit_gc_100/ (allocs/op) | 15,147 allocs | 15,147 allocs | ⚪ 0% |
tree_edit_gc_1000/ (ns/op) | 314.96 ms | 328.08 ms | 🔴 +4.16% |
tree_edit_gc_1000/ (B/op) | 384.04 MB | 384.04 MB | ⚪ 0% |
tree_edit_gc_1000/ (allocs/op) | 154,937 allocs | 154,932 allocs | ⚪ 0% |
tree_split_gc_100/ (ns/op) | 2.59 ms | 2.71 ms | 🔴 +4.26% |
tree_split_gc_100/ (B/op) | 2.41 MB | 2.41 MB | ⚪ 0% |
tree_split_gc_100/ (allocs/op) | 11,132 allocs | 11,132 allocs | ⚪ 0% |
tree_split_gc_1000/ (ns/op) | 189.14 ms | 204.39 ms | 🔴 +8.06% |
tree_split_gc_1000/ (B/op) | 222.50 MB | 222.50 MB | ⚪ 0% |
tree_split_gc_1000/ (allocs/op) | 122,064 allocs | 122,068 allocs | ⚪ 0% |
BenchmarkRPC
Benchmark suite | Previous | Current | Change |
---|---|---|---|
client_to_server/ (ns/op) | 420.53 ms | 426.69 ms | 🔴 +1.46% |
client_to_server/ (B/op) | 17.87 MB | 16.14 MB | 🟢 -9.69% |
client_to_server/ (allocs/op) | 223,725 allocs | 223,812 allocs | 🔴 +0.04% |
client_to_client_via_server/ (ns/op) | 771.40 ms | 569.97 ms | 🟢 -26.11% |
client_to_client_via_server/ (B/op) | 39.09 MB | 24.58 MB | 🟢 -37.13% |
client_to_client_via_server/ (allocs/op) | 470,568 allocs | 300,624 allocs | 🟢 -36.11% |
attach_large_document/ (ns/op) | 1.26 s | 1.23 s | 🟢 -2.06% |
attach_large_document/ (B/op) | 1.90 GB | 1.90 GB | 🟢 -0.02% |
attach_large_document/ (allocs/op) | 12,439 allocs | 12,451 allocs | 🔴 +0.10% |
adminCli_to_server/ (ns/op) | 543.02 ms | 553.35 ms | 🔴 +1.90% |
adminCli_to_server/ (B/op) | 21.30 MB | 21.33 MB | 🔴 +0.11% |
adminCli_to_server/ (allocs/op) | 316,652 allocs | 316,721 allocs | 🔴 +0.02% |
BenchmarkLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 85.81 ns | 84.27 ns | 🟢 -1.79% |
(B/op) | 32.00 B | 32.00 B | ⚪ 0% |
(allocs/op) | 1 allocs | 1 allocs | ⚪ 0% |
BenchmarkLockerParallel
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 45.89 ns | 45.67 ns | 🟢 -0.48% |
(B/op) | 0.00 B | 0.00 B | ⚪ 0% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkLockerMoreKeys
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 187.90 ns | 175.20 ns | 🟢 -6.76% |
(B/op) | 30.00 B | 31.00 B | 🔴 +3.33% |
(allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkRWLocker
Benchmark suite | Previous | Current | Change |
---|---|---|---|
RWLock_rate_2/ (ns/op) | 50.93 ns | 50.59 ns | 🟢 -0.67% |
RWLock_rate_2/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_2/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_10/ (ns/op) | 45.77 ns | 43.76 ns | 🟢 -4.39% |
RWLock_rate_10/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
RWLock_rate_10/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_100/ (ns/op) | 61.23 ns | 58.79 ns | 🟢 -3.98% |
RWLock_rate_100/ (B/op) | 2.00 B | 2.00 B | ⚪ 0% |
RWLock_rate_100/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
RWLock_rate_1000/ (ns/op) | 89.26 ns | 86.90 ns | 🟢 -2.64% |
RWLock_rate_1000/ (B/op) | 8.00 B | 8.00 B | ⚪ 0% |
RWLock_rate_1000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkChange
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_10_Changes/ (ns/op) | 4.49 ms | 4.52 ms | 🔴 +0.81% |
Push_10_Changes/ (B/op) | 150.94 KB | 150.40 KB | 🟢 -0.36% |
Push_10_Changes/ (allocs/op) | 1,625 allocs | 1,624 allocs | 🟢 -0.06% |
Push_100_Changes/ (ns/op) | 16.40 ms | 16.81 ms | 🔴 +2.49% |
Push_100_Changes/ (B/op) | 776.10 KB | 773.33 KB | 🟢 -0.36% |
Push_100_Changes/ (allocs/op) | 8,511 allocs | 8,514 allocs | 🔴 +0.04% |
Push_1000_Changes/ (ns/op) | 131.30 ms | 133.03 ms | 🔴 +1.32% |
Push_1000_Changes/ (B/op) | 7.18 MB | 7.17 MB | 🟢 -0.11% |
Push_1000_Changes/ (allocs/op) | 79,325 allocs | 79,326 allocs | ⚪ 0% |
Pull_10_Changes/ (ns/op) | 3.69 ms | 3.69 ms | 🟢 -0.08% |
Pull_10_Changes/ (B/op) | 124.60 KB | 124.36 KB | 🟢 -0.19% |
Pull_10_Changes/ (allocs/op) | 1,454 allocs | 1,454 allocs | ⚪ 0% |
Pull_100_Changes/ (ns/op) | 5.26 ms | 5.25 ms | 🟢 -0.13% |
Pull_100_Changes/ (B/op) | 354.65 KB | 354.35 KB | 🟢 -0.09% |
Pull_100_Changes/ (allocs/op) | 5,180 allocs | 5,180 allocs | ⚪ 0% |
Pull_1000_Changes/ (ns/op) | 10.49 ms | 10.80 ms | 🔴 +2.94% |
Pull_1000_Changes/ (B/op) | 2.20 MB | 2.20 MB | 🔴 +0.01% |
Pull_1000_Changes/ (allocs/op) | 44,680 allocs | 44,681 allocs | ⚪ 0% |
BenchmarkSnapshot
Benchmark suite | Previous | Current | Change |
---|---|---|---|
Push_3KB_snapshot/ (ns/op) | 18.53 ms | 18.89 ms | 🔴 +1.96% |
Push_3KB_snapshot/ (B/op) | 902.00 KB | 906.62 KB | 🔴 +0.51% |
Push_3KB_snapshot/ (allocs/op) | 8,514 allocs | 8,515 allocs | 🔴 +0.01% |
Push_30KB_snapshot/ (ns/op) | 132.49 ms | 134.84 ms | 🔴 +1.77% |
Push_30KB_snapshot/ (B/op) | 8.01 MB | 8.13 MB | 🔴 +1.49% |
Push_30KB_snapshot/ (allocs/op) | 86,458 allocs | 87,783 allocs | 🔴 +1.53% |
Pull_3KB_snapshot/ (ns/op) | 7.36 ms | 7.42 ms | 🔴 +0.82% |
Pull_3KB_snapshot/ (B/op) | 1.06 MB | 1.06 MB | ⚪ 0% |
Pull_3KB_snapshot/ (allocs/op) | 19,256 allocs | 19,261 allocs | 🔴 +0.03% |
Pull_30KB_snapshot/ (ns/op) | 19.29 ms | 19.33 ms | 🔴 +0.18% |
Pull_30KB_snapshot/ (B/op) | 8.77 MB | 8.77 MB | 🔴 +0.03% |
Pull_30KB_snapshot/ (allocs/op) | 185,629 allocs | 185,674 allocs | 🔴 +0.02% |
BenchmarkSplayTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
stress_test_100000/ (ns/op) | 0.20 ns | 0.20 ns | 🔴 +0.05% |
stress_test_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_200000/ (ns/op) | 0.38 ns | 0.39 ns | 🔴 +2.65% |
stress_test_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
stress_test_300000/ (ns/op) | 0.60 ns | 0.57 ns | 🟢 -5.47% |
stress_test_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
stress_test_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_100000/ (ns/op) | 0.01 ns | 0.01 ns | 🟢 -1.82% |
random_access_100000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_100000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_200000/ (ns/op) | 0.03 ns | 0.03 ns | 🔴 +20.81% |
random_access_200000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_200000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
random_access_300000/ (ns/op) | 0.04 ns | 0.04 ns | 🔴 +1.67% |
random_access_300000/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
random_access_300000/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
editing_trace_bench/ (ns/op) | 0.00 ns | 0.00 ns | 🔴 +5.54% |
editing_trace_bench/ (B/op) | 0.00 B | 0.00 B | ⚪ 0% |
editing_trace_bench/ (allocs/op) | 0 allocs | 0 allocs | ⚪ 0% |
BenchmarkSync
Benchmark suite | Previous | Current | Change |
---|---|---|---|
memory_sync_10_test/ (ns/op) | 7057.00 ns | 7372.00 ns | 🔴 +4.46% |
memory_sync_10_test/ (B/op) | 1.34 KB | 1.34 KB | ⚪ 0% |
memory_sync_10_test/ (allocs/op) | 35 allocs | 35 allocs | ⚪ 0% |
memory_sync_100_test/ (ns/op) | 54760.00 ns | 55597.00 ns | 🔴 +1.53% |
memory_sync_100_test/ (B/op) | 9.53 KB | 9.51 KB | 🟢 -0.28% |
memory_sync_100_test/ (allocs/op) | 269 allocs | 268 allocs | 🟢 -0.37% |
memory_sync_1000_test/ (ns/op) | 617621.00 ns | 605178.00 ns | 🟢 -2.01% |
memory_sync_1000_test/ (B/op) | 75.63 KB | 76.69 KB | 🔴 +1.40% |
memory_sync_1000_test/ (allocs/op) | 2,103 allocs | 2,135 allocs | 🔴 +1.52% |
memory_sync_10000_test/ (ns/op) | 7.83 ms | 7.77 ms | 🟢 -0.75% |
memory_sync_10000_test/ (B/op) | 752.23 KB | 763.57 KB | 🔴 +1.51% |
memory_sync_10000_test/ (allocs/op) | 20,417 allocs | 20,501 allocs | 🔴 +0.41% |
BenchmarkTextEditing
Benchmark suite | Previous | Current | Change |
---|---|---|---|
(ns/op) | 5.20 s | 5.29 s | 🔴 +1.79% |
(B/op) | 3.92 GB | 3.92 GB | ⚪ 0% |
(allocs/op) | 20,619,784 allocs | 20,619,755 allocs | ⚪ 0% |
BenchmarkTree
Benchmark suite | Previous | Current | Change |
---|---|---|---|
10000_vertices_to_protobuf/ (ns/op) | 4.29 ms | 4.48 ms | 🔴 +4.47% |
10000_vertices_to_protobuf/ (B/op) | 6.36 MB | 6.36 MB | ⚪ 0% |
10000_vertices_to_protobuf/ (allocs/op) | 70,025 allocs | 70,025 allocs | ⚪ 0% |
10000_vertices_from_protobuf/ (ns/op) | 222.46 ms | 229.02 ms | 🔴 +2.95% |
10000_vertices_from_protobuf/ (B/op) | 442.31 MB | 442.30 MB | ⚪ 0% |
10000_vertices_from_protobuf/ (allocs/op) | 290,039 allocs | 290,039 allocs | ⚪ 0% |
20000_vertices_to_protobuf/ (ns/op) | 9.14 ms | 9.34 ms | 🔴 +2.19% |
20000_vertices_to_protobuf/ (B/op) | 12.89 MB | 12.89 MB | ⚪ 0% |
20000_vertices_to_protobuf/ (allocs/op) | 140,028 allocs | 140,028 allocs | ⚪ 0% |
20000_vertices_from_protobuf/ (ns/op) | 877.37 ms | 877.92 ms | 🔴 +0.06% |
20000_vertices_from_protobuf/ (B/op) | 1.70 GB | 1.70 GB | ⚪ 0% |
20000_vertices_from_protobuf/ (allocs/op) | 580,090 allocs | 580,044 allocs | ⚪ 0% |
30000_vertices_to_protobuf/ (ns/op) | 13.15 ms | 14.20 ms | 🔴 +7.98% |
30000_vertices_to_protobuf/ (B/op) | 18.98 MB | 18.98 MB | ⚪ 0% |
30000_vertices_to_protobuf/ (allocs/op) | 210,029 allocs | 210,029 allocs | ⚪ 0% |
30000_vertices_from_protobuf/ (ns/op) | 2.02 s | 2.01 s | 🟢 -0.36% |
30000_vertices_from_protobuf/ (B/op) | 3.75 GB | 3.75 GB | ⚪ 0% |
30000_vertices_from_protobuf/ (allocs/op) | 870,086 allocs | 870,142 allocs | ⚪ 0% |
BenchmarkVersionVector
Benchmark suite | Previous | Current | Change |
---|---|---|---|
clients_10/ (ns/op) | 157.85 ms | 160.23 ms | 🔴 +1.51% |
clients_10/ (1_changepack(bytes)) | 745.00 B | 745.00 B | ⚪ 0% |
clients_10/ (2_snapshot(bytes)) | 379.00 B | 379.00 B | ⚪ 0% |
clients_10/ (3_pushpull(ms)) | 7.00 ms | 8.00 ms | 🔴 +14.29% |
clients_10/ (4_attach(ms)) | 6.00 ms | 6.00 ms | ⚪ 0% |
clients_10/ (5_changepack_after_detach(bytes)) | 805.00 B | 805.00 B | ⚪ 0% |
clients_10/ (6_snapshot_after_detach(bytes)) | 136.00 B | 136.00 B | ⚪ 0% |
clients_10/ (7_pushpull_after_detach(ms)) | 8.00 ms | 8.00 ms | ⚪ 0% |
clients_10/ (B/op) | 20.71 MB | 18.86 MB | 🟢 -8.93% |
clients_10/ (allocs/op) | 83,248 allocs | 83,206 allocs | 🟢 -0.05% |
clients_100/ (ns/op) | 1.39 s | 1.43 s | 🔴 +2.98% |
clients_100/ (1_changepack(bytes)) | 6.14 KB | 6.14 KB | ⚪ 0% |
clients_100/ (2_snapshot(bytes)) | 3.08 KB | 3.08 KB | ⚪ 0% |
clients_100/ (3_pushpull(ms)) | 11.00 ms | 12.00 ms | 🔴 +9.09% |
clients_100/ (4_attach(ms)) | 9.00 ms | 10.00 ms | 🔴 +11.11% |
clients_100/ (5_changepack_after_detach(bytes)) | 6.21 KB | 6.21 KB | ⚪ 0% |
clients_100/ (6_snapshot_after_detach(bytes)) | 137.00 B | 137.00 B | ⚪ 0% |
clients_100/ (7_pushpull_after_detach(ms)) | 9.00 ms | 10.00 ms | 🔴 +11.11% |
clients_100/ (B/op) | 213.58 MB | 215.21 MB | 🔴 +0.76% |
clients_100/ (allocs/op) | 1,481,342 allocs | 1,481,377 allocs | ⚪ 0% |
clients_1000/ (ns/op) | 42.35 s | 43.72 s | 🔴 +3.23% |
clients_1000/ (1_changepack(bytes)) | 60.16 KB | 60.16 KB | ⚪ 0% |
clients_1000/ (2_snapshot(bytes)) | 30.08 KB | 30.08 KB | ⚪ 0% |
clients_1000/ (3_pushpull(ms)) | 116.00 ms | 113.00 ms | 🟢 -2.59% |
clients_1000/ (4_attach(ms)) | 72.00 ms | 73.00 ms | 🔴 +1.39% |
clients_1000/ (5_changepack_after_detach(bytes)) | 60.22 KB | 60.22 KB | ⚪ 0% |
clients_1000/ (6_snapshot_after_detach(bytes)) | 139.00 B | 139.00 B | ⚪ 0% |
clients_1000/ (7_pushpull_after_detach(ms)) | 27.00 ms | 23.00 ms | 🟢 -14.81% |
clients_1000/ (B/op) | 6.43 GB | 6.43 GB | ⚪ 0% |
clients_1000/ (allocs/op) | 93,354,528 allocs | 93,355,099 allocs | ⚪ 0% |
This PR introduces a new rate-limiter component that implements both throttling and debouncing mechanisms. The key functionality of this component is to ensure that a provided callback function is executed at most once within a defined time window.
Key Behaviors:
Immediate Execution:
The
Execute()
method attempts to run the provided callback immediately if the rate limiter allows it.Delayed Execution:
If immediate execution is not possible (i.e., if a token is not available), the function blocks until the next token is available, then executes the callback.
Debouncing:
If there is already a pending callback,
Execute()
returns immediately without scheduling a new callback. This guarantees that after the final event, the callback will eventually be executed, ensuring eventual consistency.For a visual explanation of how the component works, see the diagram below:

1.Execute(synchronous version)
Which issue(s) this PR fixes:
Addresses #1165
Special notes for your reviewer:
Intended Usage:
Execute()
method is ideal for scenarios likeevent-webhook
where immediate execution is preferred.ExecuteOrSchedule()
method is targeted for use inpubsub
'sDocChangedEvent
.Implementation Considerations:
event-webhook
, a challenge arises in storing the rate limiter in memory.Does this PR introduce a user-facing change?:
Additional documentation:
Checklist:
Summary by CodeRabbit
New Features
Tests