Skip to content

Commit

Permalink
Merge branch 'main' into add-broadcast
Browse files Browse the repository at this point in the history
  • Loading branch information
sejongk committed Sep 13, 2023
2 parents 7d70752 + 940941a commit dcdd8f9
Show file tree
Hide file tree
Showing 13 changed files with 309 additions and 22 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/base-docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Set up Go 1.19.2
uses: actions/setup-go@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/chart-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
github_token: ${{ github.token }}

- name: Check out code
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Get tools dependencies
run: make tools
Expand Down
7 changes: 7 additions & 0 deletions api/converter/from_pb.go
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,12 @@ func fromStyle(pbStyle *api.Operation_Style) (*operations.Style, error) {
if err != nil {
return nil, err
}
createdAtMapByActor, err := fromCreatedAtMapByActor(
pbStyle.CreatedAtMapByActor,
)
if err != nil {
return nil, err
}
executedAt, err := fromTimeTicket(pbStyle.ExecutedAt)
if err != nil {
return nil, err
Expand All @@ -450,6 +456,7 @@ func fromStyle(pbStyle *api.Operation_Style) (*operations.Style, error) {
parentCreatedAt,
from,
to,
createdAtMapByActor,
pbStyle.Attributes,
executedAt,
), nil
Expand Down
11 changes: 6 additions & 5 deletions api/converter/to_pb.go
Original file line number Diff line number Diff line change
Expand Up @@ -356,11 +356,12 @@ func toEdit(e *operations.Edit) (*api.Operation_Edit_, error) {
func toStyle(style *operations.Style) (*api.Operation_Style_, error) {
return &api.Operation_Style_{
Style: &api.Operation_Style{
ParentCreatedAt: ToTimeTicket(style.ParentCreatedAt()),
From: toTextNodePos(style.From()),
To: toTextNodePos(style.To()),
Attributes: style.Attributes(),
ExecutedAt: ToTimeTicket(style.ExecutedAt()),
ParentCreatedAt: ToTimeTicket(style.ParentCreatedAt()),
From: toTextNodePos(style.From()),
To: toTextNodePos(style.To()),
CreatedAtMapByActor: toCreatedAtMapByActor(style.CreatedAtMapByActor()),
Attributes: style.Attributes(),
ExecutedAt: ToTimeTicket(style.ExecutedAt()),
},
}, nil
}
Expand Down
2 changes: 1 addition & 1 deletion design/retention.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ In conclusion, when a snapshot is created, it should not simply delete the chang
This can be expressed as a picture above(when SnapshotInterval=10, SnapshotThreshold=5).
Assuming that there are a series of C (changes) in chronological order (ServerSeq), S (snapshots) are being created at intervals of 10 and the synchronized ServerSeq is being recorded in SyncedSeq. At this time, there may be a situation where Client A's synchronization is delayed for some reason.

In this situation, if all previous Cs are deleted when S2 is created, Client A must pull C19 and C20 for synchronization, but it is already deleted and does not exist. This is the reason why the previous changes are deleted based on the minimum synced ServerSeq in the actual implementation.
In this situation, if all previous Cs are deleted when S3 is created, Client A must pull C19 and C20 for synchronization, but it is already deleted and does not exist. This is the reason why the previous changes are deleted based on the minimum synced ServerSeq in the actual implementation.

### How it was implemented as code

Expand Down
6 changes: 6 additions & 0 deletions pkg/document/crdt/rga_tree_split.go
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,12 @@ func (s *RGATreeSplitNode[V]) Remove(removedAt *time.Ticket, latestCreatedAt *ti
return false
}

// canStyle checks if node is able to set style.
func (s *RGATreeSplitNode[V]) canStyle(editedAt *time.Ticket, latestCreatedAt *time.Ticket) bool {
return !s.createdAt().After(latestCreatedAt) &&
(s.removedAt == nil || editedAt.After(s.removedAt))
}

// Value returns the value of this node.
func (s *RGATreeSplitNode[V]) Value() V {
return s.value
Expand Down
38 changes: 34 additions & 4 deletions pkg/document/crdt/text.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,28 +250,58 @@ func (t *Text) Edit(
func (t *Text) Style(
from,
to *RGATreeSplitNodePos,
latestCreatedAtMapByActor map[string]*time.Ticket,
attributes map[string]string,
executedAt *time.Ticket,
) error {
) (map[string]*time.Ticket, error) {
// 01. Split nodes with from and to
_, toRight, err := t.rgaTreeSplit.findNodeWithSplit(to, executedAt)
if err != nil {
return err
return nil, err
}
_, fromRight, err := t.rgaTreeSplit.findNodeWithSplit(from, executedAt)
if err != nil {
return err
return nil, err
}

// 02. style nodes between from and to
nodes := t.rgaTreeSplit.findBetween(fromRight, toRight)
createdAtMapByActor := make(map[string]*time.Ticket)
var toBeStyled []*RGATreeSplitNode[*TextValue]

for _, node := range nodes {
actorIDHex := node.id.createdAt.ActorIDHex()

var latestCreatedAt *time.Ticket
if len(latestCreatedAtMapByActor) == 0 {
latestCreatedAt = time.MaxTicket
} else {
createdAt, ok := latestCreatedAtMapByActor[actorIDHex]
if ok {
latestCreatedAt = createdAt
} else {
latestCreatedAt = time.InitialTicket
}
}

if node.canStyle(executedAt, latestCreatedAt) {
latestCreatedAt = createdAtMapByActor[actorIDHex]
createdAt := node.id.createdAt
if latestCreatedAt == nil || createdAt.After(latestCreatedAt) {
createdAtMapByActor[actorIDHex] = createdAt
}
toBeStyled = append(toBeStyled, node)
}
}

for _, node := range toBeStyled {
val := node.value
for key, value := range attributes {
val.attrs.Set(key, value, executedAt)
}
}
return nil

return createdAtMapByActor, nil
}

// Nodes returns the internal nodes of this Text.
Expand Down
2 changes: 1 addition & 1 deletion pkg/document/crdt/text_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ func TestText(t *testing.T) {
assert.Equal(t, `[{"val":"Hello "},{"val":"Yorkie"}]`, text.Marshal())

fromPos, toPos, _ = text.CreateRange(0, 1)
err = text.Style(fromPos, toPos, map[string]string{"b": "1"}, ctx.IssueTimeTicket())
_, err = text.Style(fromPos, toPos, nil, map[string]string{"b": "1"}, ctx.IssueTimeTicket())
assert.NoError(t, err)
assert.Equal(
t,
Expand Down
7 changes: 5 additions & 2 deletions pkg/document/json/text.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,19 +103,22 @@ func (p *Text) Style(from, to int, attributes map[string]string) *Text {
}

ticket := p.context.IssueTimeTicket()
if err := p.Text.Style(
maxCreationMapByActor, err := p.Text.Style(
fromPos,
toPos,
nil,
attributes,
ticket,
); err != nil {
)
if err != nil {
panic(err)
}

p.context.Push(operations.NewStyle(
p.CreatedAt(),
fromPos,
toPos,
maxCreationMapByActor,
attributes,
ticket,
))
Expand Down
25 changes: 19 additions & 6 deletions pkg/document/operations/style.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ type Style struct {
// to is the end point of the range to apply the style to.
to *crdt.RGATreeSplitNodePos

// latestCreatedAtMapByActor is a map that stores the latest creation time
// by actor for the nodes included in the range to apply the style to.
latestCreatedAtMapByActor map[string]*time.Ticket

// attributes represents the text style.
attributes map[string]string

Expand All @@ -44,15 +48,17 @@ func NewStyle(
parentCreatedAt *time.Ticket,
from *crdt.RGATreeSplitNodePos,
to *crdt.RGATreeSplitNodePos,
latestCreatedAtMapByActor map[string]*time.Ticket,
attributes map[string]string,
executedAt *time.Ticket,
) *Style {
return &Style{
parentCreatedAt: parentCreatedAt,
from: from,
to: to,
attributes: attributes,
executedAt: executedAt,
parentCreatedAt: parentCreatedAt,
from: from,
to: to,
latestCreatedAtMapByActor: latestCreatedAtMapByActor,
attributes: attributes,
executedAt: executedAt,
}
}

Expand All @@ -64,7 +70,8 @@ func (e *Style) Execute(root *crdt.Root) error {
return ErrNotApplicableDataType
}

return obj.Style(e.from, e.to, e.attributes, e.executedAt)
_, err := obj.Style(e.from, e.to, e.latestCreatedAtMapByActor, e.attributes, e.executedAt)
return err
}

// From returns the start point of the editing range.
Expand Down Expand Up @@ -96,3 +103,9 @@ func (e *Style) ParentCreatedAt() *time.Ticket {
func (e *Style) Attributes() map[string]string {
return e.attributes
}

// CreatedAtMapByActor returns the map that stores the latest creation time
// by actor for the nodes included in the range to apply the style to.
func (e *Style) CreatedAtMapByActor() map[string]*time.Ticket {
return e.latestCreatedAtMapByActor
}
149 changes: 149 additions & 0 deletions test/bench/document_bench_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,155 @@ func BenchmarkDocument(b *testing.B) {
b.Run("object 10000", func(b *testing.B) {
benchmarkObject(10000, b)
})

b.Run("tree 100", func(b *testing.B) {
benchmarkTree(100, b)
})

b.Run("tree 1000", func(b *testing.B) {
benchmarkTree(1000, b)
})

b.Run("tree 10000", func(b *testing.B) {
benchmarkTree(10000, b)
})

b.Run("tree delete all 1000", func(b *testing.B) {
benchmarkTreeDeleteAll(1000, b)
})

b.Run("tree edit gc 100", func(b *testing.B) {
benchmarkTreeEditGC(100, b)
})

b.Run("tree edit gc 1000", func(b *testing.B) {
benchmarkTreeEditGC(1000, b)
})

b.Run("tree split gc 100", func(b *testing.B) {
benchmarkTreeSplitGC(100, b)
})

b.Run("tree split gc 1000", func(b *testing.B) {
benchmarkTreeSplitGC(1000, b)
})

}

func benchmarkTree(cnt int, b *testing.B) {
for i := 0; i < b.N; i++ {
doc := document.New("d1")

err := doc.Update(func(root *json.Object, p *presence.Presence) error {
tree := root.SetNewTree("t", &json.TreeNode{
Type: "root",
Children: []json.TreeNode{{
Type: "p",
Children: []json.TreeNode{},
}},
})
for c := 1; c <= cnt; c++ {
tree.Edit(c, c, &json.TreeNode{Type: "text", Value: "a"})
}
return nil
})
assert.NoError(b, err)
}
}

func benchmarkTreeDeleteAll(cnt int, b *testing.B) {
for i := 0; i < b.N; i++ {
doc := document.New("d1")

err := doc.Update(func(root *json.Object, p *presence.Presence) error {
tree := root.SetNewTree("t", &json.TreeNode{
Type: "root",
Children: []json.TreeNode{{
Type: "p",
Children: []json.TreeNode{},
}},
})
for c := 1; c <= cnt; c++ {
tree.Edit(c, c, &json.TreeNode{Type: "text", Value: "a"})
}
return nil
})

err = doc.Update(func(root *json.Object, p *presence.Presence) error {
tree := root.GetTree("t")
tree.Edit(1, cnt+1)

return nil
})
assert.NoError(b, err)
}
}

func benchmarkTreeEditGC(cnt int, b *testing.B) {
for i := 0; i < b.N; i++ {
doc := document.New("d1")

err := doc.Update(func(root *json.Object, p *presence.Presence) error {
tree := root.SetNewTree("t", &json.TreeNode{
Type: "root",
Children: []json.TreeNode{{
Type: "p",
Children: []json.TreeNode{},
}},
})
for c := 1; c <= cnt; c++ {
tree.Edit(c, c, &json.TreeNode{Type: "text", Value: "a"})
}
return nil
})

err = doc.Update(func(root *json.Object, p *presence.Presence) error {
tree := root.GetTree("t")
for c := 1; c <= cnt; c++ {
tree.Edit(c, c+1, &json.TreeNode{Type: "text", Value: "b"})
}

return nil
})
assert.NoError(b, err)
assert.Equal(b, cnt, doc.GarbageLen())
assert.Equal(b, cnt, doc.GarbageCollect(time.MaxTicket))
}
}

func benchmarkTreeSplitGC(cnt int, b *testing.B) {
for i := 0; i < b.N; i++ {
doc := document.New("d1")

var builder strings.Builder
for i := 0; i < cnt; i++ {
builder.WriteString("a")
}
err := doc.Update(func(root *json.Object, p *presence.Presence) error {
tree := root.SetNewTree("t", &json.TreeNode{
Type: "root",
Children: []json.TreeNode{{
Type: "p",
Children: []json.TreeNode{},
}},
})
tree.Edit(1, 1, &json.TreeNode{Type: "text", Value: builder.String()})

return nil
})

err = doc.Update(func(root *json.Object, p *presence.Presence) error {
tree := root.GetTree("t")
for c := 1; c <= cnt; c++ {
tree.Edit(c, c+1, &json.TreeNode{Type: "text", Value: "b"})
}

return nil
})
assert.NoError(b, err)
assert.Equal(b, cnt, doc.GarbageLen())
assert.Equal(b, cnt, doc.GarbageCollect(time.MaxTicket))
}
}

func benchmarkText(cnt int, b *testing.B) {
Expand Down
Loading

1 comment on commit dcdd8f9

@github-actions
Copy link

Choose a reason for hiding this comment

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

Go Benchmark

Benchmark suite Current: dcdd8f9 Previous: 8b2a9a7 Ratio
BenchmarkDocument/constructor_test - ns/op 1739 ns/op 1645 ns/op 1.06
BenchmarkDocument/constructor_test - B/op 1240 B/op 1144 B/op 1.08
BenchmarkDocument/constructor_test - allocs/op 20 allocs/op 18 allocs/op 1.11
BenchmarkDocument/status_test - ns/op 1085 ns/op 1036 ns/op 1.05
BenchmarkDocument/status_test - B/op 1208 B/op 1112 B/op 1.09
BenchmarkDocument/status_test - allocs/op 18 allocs/op 16 allocs/op 1.13
BenchmarkDocument/equals_test - ns/op 9346 ns/op 9056 ns/op 1.03
BenchmarkDocument/equals_test - B/op 7008 B/op 6720 B/op 1.04
BenchmarkDocument/equals_test - allocs/op 119 allocs/op 113 allocs/op 1.05
BenchmarkDocument/nested_update_test - ns/op 21883 ns/op 23725 ns/op 0.92
BenchmarkDocument/nested_update_test - B/op 11993 B/op 11897 B/op 1.01
BenchmarkDocument/nested_update_test - allocs/op 253 allocs/op 251 allocs/op 1.01
BenchmarkDocument/delete_test - ns/op 29141 ns/op 29089 ns/op 1.00
BenchmarkDocument/delete_test - B/op 15219 B/op 15122 B/op 1.01
BenchmarkDocument/delete_test - allocs/op 332 allocs/op 330 allocs/op 1.01
BenchmarkDocument/object_test - ns/op 14094 ns/op 10382 ns/op 1.36
BenchmarkDocument/object_test - B/op 6752 B/op 6657 B/op 1.01
BenchmarkDocument/object_test - allocs/op 115 allocs/op 113 allocs/op 1.02
BenchmarkDocument/array_test - ns/op 35178 ns/op 34925 ns/op 1.01
BenchmarkDocument/array_test - B/op 11849 B/op 11754 B/op 1.01
BenchmarkDocument/array_test - allocs/op 269 allocs/op 267 allocs/op 1.01
BenchmarkDocument/text_test - ns/op 38554 ns/op 38657 ns/op 1.00
BenchmarkDocument/text_test - B/op 14922 B/op 14826 B/op 1.01
BenchmarkDocument/text_test - allocs/op 475 allocs/op 473 allocs/op 1.00
BenchmarkDocument/text_composition_test - ns/op 39587 ns/op 38208 ns/op 1.04
BenchmarkDocument/text_composition_test - B/op 18307 B/op 18210 B/op 1.01
BenchmarkDocument/text_composition_test - allocs/op 476 allocs/op 474 allocs/op 1.00
BenchmarkDocument/rich_text_test - ns/op 103905 ns/op 102400 ns/op 1.01
BenchmarkDocument/rich_text_test - B/op 38694 B/op 37016 B/op 1.05
BenchmarkDocument/rich_text_test - allocs/op 1154 allocs/op 1134 allocs/op 1.02
BenchmarkDocument/counter_test - ns/op 21495 ns/op 21823 ns/op 0.98
BenchmarkDocument/counter_test - B/op 10274 B/op 10178 B/op 1.01
BenchmarkDocument/counter_test - allocs/op 240 allocs/op 238 allocs/op 1.01
BenchmarkDocument/text_edit_gc_100 - ns/op 4046722 ns/op 3919058 ns/op 1.03
BenchmarkDocument/text_edit_gc_100 - B/op 1553645 B/op 1553500 B/op 1.00
BenchmarkDocument/text_edit_gc_100 - allocs/op 17167 allocs/op 17166 allocs/op 1.00
BenchmarkDocument/text_edit_gc_1000 - ns/op 336882879 ns/op 305822693 ns/op 1.10
BenchmarkDocument/text_edit_gc_1000 - B/op 136649580 B/op 136666284 B/op 1.00
BenchmarkDocument/text_edit_gc_1000 - allocs/op 210773 allocs/op 210879 allocs/op 1.00
BenchmarkDocument/text_split_gc_100 - ns/op 4602622 ns/op 4461948 ns/op 1.03
BenchmarkDocument/text_split_gc_100 - B/op 2217825 B/op 2218207 B/op 1.00
BenchmarkDocument/text_split_gc_100 - allocs/op 16593 allocs/op 16595 allocs/op 1.00
BenchmarkDocument/text_split_gc_1000 - ns/op 368582747 ns/op 357452373 ns/op 1.03
BenchmarkDocument/text_split_gc_1000 - B/op 214883096 B/op 214840861 B/op 1.00
BenchmarkDocument/text_split_gc_1000 - allocs/op 211548 allocs/op 211342 allocs/op 1.00
BenchmarkDocument/text_delete_all_10000 - ns/op 18119929 ns/op 17519738 ns/op 1.03
BenchmarkDocument/text_delete_all_10000 - B/op 5903470 B/op 5905240 B/op 1.00
BenchmarkDocument/text_delete_all_10000 - allocs/op 41123 allocs/op 41131 allocs/op 1.00
BenchmarkDocument/text_delete_all_100000 - ns/op 259265614 ns/op 239749099 ns/op 1.08
BenchmarkDocument/text_delete_all_100000 - B/op 53857076 B/op 53858656 B/op 1.00
BenchmarkDocument/text_delete_all_100000 - allocs/op 416066 allocs/op 416083 allocs/op 1.00
BenchmarkDocument/text_100 - ns/op 312762 ns/op 313643 ns/op 1.00
BenchmarkDocument/text_100 - B/op 118516 B/op 118421 B/op 1.00
BenchmarkDocument/text_100 - allocs/op 5079 allocs/op 5077 allocs/op 1.00
BenchmarkDocument/text_1000 - ns/op 3435292 ns/op 3457317 ns/op 0.99
BenchmarkDocument/text_1000 - B/op 1153119 B/op 1153025 B/op 1.00
BenchmarkDocument/text_1000 - allocs/op 50083 allocs/op 50081 allocs/op 1.00
BenchmarkDocument/array_1000 - ns/op 1705306 ns/op 1713545 ns/op 1.00
BenchmarkDocument/array_1000 - B/op 1103172 B/op 1103084 B/op 1.00
BenchmarkDocument/array_1000 - allocs/op 11873 allocs/op 11871 allocs/op 1.00
BenchmarkDocument/array_10000 - ns/op 19028122 ns/op 19152387 ns/op 0.99
BenchmarkDocument/array_10000 - B/op 9908238 B/op 9906093 B/op 1.00
BenchmarkDocument/array_10000 - allocs/op 120728 allocs/op 120718 allocs/op 1.00
BenchmarkDocument/array_gc_100 - ns/op 178033 ns/op 176825 ns/op 1.01
BenchmarkDocument/array_gc_100 - B/op 98458 B/op 98364 B/op 1.00
BenchmarkDocument/array_gc_100 - allocs/op 1248 allocs/op 1246 allocs/op 1.00
BenchmarkDocument/array_gc_1000 - ns/op 1928692 ns/op 1937102 ns/op 1.00
BenchmarkDocument/array_gc_1000 - B/op 1170709 B/op 1170600 B/op 1.00
BenchmarkDocument/array_gc_1000 - allocs/op 12911 allocs/op 12909 allocs/op 1.00
BenchmarkDocument/counter_1000 - ns/op 282411 ns/op 289151 ns/op 0.98
BenchmarkDocument/counter_1000 - B/op 198839 B/op 198740 B/op 1.00
BenchmarkDocument/counter_1000 - allocs/op 6508 allocs/op 6506 allocs/op 1.00
BenchmarkDocument/counter_10000 - ns/op 2995536 ns/op 3069618 ns/op 0.98
BenchmarkDocument/counter_10000 - B/op 2165759 B/op 2165685 B/op 1.00
BenchmarkDocument/counter_10000 - allocs/op 69515 allocs/op 69513 allocs/op 1.00
BenchmarkDocument/object_1000 - ns/op 1852400 ns/op 1774782 ns/op 1.04
BenchmarkDocument/object_1000 - B/op 1451383 B/op 1451444 B/op 1.00
BenchmarkDocument/object_1000 - allocs/op 9919 allocs/op 9918 allocs/op 1.00
BenchmarkDocument/object_10000 - ns/op 21350931 ns/op 22137040 ns/op 0.96
BenchmarkDocument/object_10000 - B/op 12372976 B/op 12370116 B/op 1.00
BenchmarkDocument/object_10000 - allocs/op 101234 allocs/op 101224 allocs/op 1.00
BenchmarkDocument/tree_100 - ns/op 988983 ns/op
BenchmarkDocument/tree_100 - B/op 442919 B/op
BenchmarkDocument/tree_100 - allocs/op 4505 allocs/op
BenchmarkDocument/tree_1000 - ns/op 65109454 ns/op
BenchmarkDocument/tree_1000 - B/op 35222646 B/op
BenchmarkDocument/tree_1000 - allocs/op 44117 allocs/op
BenchmarkDocument/tree_10000 - ns/op 9038149186 ns/op
BenchmarkDocument/tree_10000 - B/op 3438882576 B/op
BenchmarkDocument/tree_10000 - allocs/op 440158 allocs/op
BenchmarkDocument/tree_delete_all_1000 - ns/op 66492867 ns/op
BenchmarkDocument/tree_delete_all_1000 - B/op 35692860 B/op
BenchmarkDocument/tree_delete_all_1000 - allocs/op 51768 allocs/op
BenchmarkDocument/tree_edit_gc_100 - ns/op 3511015 ns/op
BenchmarkDocument/tree_edit_gc_100 - B/op 2077526 B/op
BenchmarkDocument/tree_edit_gc_100 - allocs/op 11164 allocs/op
BenchmarkDocument/tree_edit_gc_1000 - ns/op 253903458 ns/op
BenchmarkDocument/tree_edit_gc_1000 - B/op 180291082 B/op
BenchmarkDocument/tree_edit_gc_1000 - allocs/op 113380 allocs/op
BenchmarkDocument/tree_split_gc_100 - ns/op 2499847 ns/op
BenchmarkDocument/tree_split_gc_100 - B/op 1347917 B/op
BenchmarkDocument/tree_split_gc_100 - allocs/op 9060 allocs/op
BenchmarkDocument/tree_split_gc_1000 - ns/op 157286116 ns/op
BenchmarkDocument/tree_split_gc_1000 - B/op 113957405 B/op
BenchmarkDocument/tree_split_gc_1000 - allocs/op 93875 allocs/op
BenchmarkRPC/client_to_server - ns/op 402120799 ns/op 403586987 ns/op 1.00
BenchmarkRPC/client_to_server - B/op 12425714 B/op 12224802 B/op 1.02
BenchmarkRPC/client_to_server - allocs/op 177183 allocs/op 176918 allocs/op 1.00
BenchmarkRPC/client_to_client_via_server - ns/op 675230706 ns/op 703134840 ns/op 0.96
BenchmarkRPC/client_to_client_via_server - B/op 22714648 B/op 22618076 B/op 1.00
BenchmarkRPC/client_to_client_via_server - allocs/op 330389 allocs/op 331134 allocs/op 1.00
BenchmarkRPC/attach_large_document - ns/op 1401946644 ns/op 1359748878 ns/op 1.03
BenchmarkRPC/attach_large_document - B/op 1799345160 B/op 1799405880 B/op 1.00
BenchmarkRPC/attach_large_document - allocs/op 9750 allocs/op 9590 allocs/op 1.02
BenchmarkRPC/adminCli_to_server - ns/op 607556514 ns/op 598842152 ns/op 1.01
BenchmarkRPC/adminCli_to_server - B/op 19998660 B/op 21103788 B/op 0.95
BenchmarkRPC/adminCli_to_server - allocs/op 324106 allocs/op 333606 allocs/op 0.97
BenchmarkLocker - ns/op 128.2 ns/op 122.4 ns/op 1.05
BenchmarkLocker - B/op 16 B/op 16 B/op 1
BenchmarkLocker - allocs/op 1 allocs/op 1 allocs/op 1
BenchmarkLockerParallel - ns/op 137.4 ns/op 128.7 ns/op 1.07
BenchmarkLockerParallel - B/op 0 B/op 0 B/op NaN
BenchmarkLockerParallel - allocs/op 0 allocs/op 0 allocs/op NaN
BenchmarkLockerMoreKeys - ns/op 288.8 ns/op 483.6 ns/op 0.60
BenchmarkLockerMoreKeys - B/op 15 B/op 13 B/op 1.15
BenchmarkLockerMoreKeys - allocs/op 0 allocs/op 0 allocs/op NaN
BenchmarkSync/memory_sync_10_test - ns/op 7096 ns/op 7322 ns/op 0.97
BenchmarkSync/memory_sync_10_test - B/op 1284 B/op 1283 B/op 1.00
BenchmarkSync/memory_sync_10_test - allocs/op 38 allocs/op 38 allocs/op 1
BenchmarkSync/memory_sync_100_test - ns/op 65579 ns/op 69765 ns/op 0.94
BenchmarkSync/memory_sync_100_test - B/op 8776 B/op 8737 B/op 1.00
BenchmarkSync/memory_sync_100_test - allocs/op 281 allocs/op 279 allocs/op 1.01
BenchmarkSync/memory_sync_1000_test - ns/op 658230 ns/op 686582 ns/op 0.96
BenchmarkSync/memory_sync_1000_test - B/op 81732 B/op 81819 B/op 1.00
BenchmarkSync/memory_sync_1000_test - allocs/op 2582 allocs/op 2582 allocs/op 1
BenchmarkSync/memory_sync_10000_test - ns/op 6624123 ns/op 7139141 ns/op 0.93
BenchmarkSync/memory_sync_10000_test - B/op 849156 B/op 858288 B/op 0.99
BenchmarkSync/memory_sync_10000_test - allocs/op 26940 allocs/op 26871 allocs/op 1.00
BenchmarkTextEditing - ns/op 27846071728 ns/op 27047402085 ns/op 1.03
BenchmarkTextEditing - B/op 8456785648 B/op 8456806024 B/op 1.00
BenchmarkTextEditing - allocs/op 20615273 allocs/op 20613838 allocs/op 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.