diff options
author | Chris <ccbrown112@gmail.com> | 2018-02-20 12:50:10 -0600 |
---|---|---|
committer | Christopher Speller <crspeller@gmail.com> | 2018-02-20 10:50:10 -0800 |
commit | 19a5d0047dbe5e4d7f4675893bfee125d3a12312 (patch) | |
tree | 3007bd99e82309f2f03eabe79aad70e1ec25204e /model/websocket_message_test.go | |
parent | babd795d792e95f6e708af6ee8207ef6877e2b32 (diff) | |
download | chat-19a5d0047dbe5e4d7f4675893bfee125d3a12312.tar.gz chat-19a5d0047dbe5e4d7f4675893bfee125d3a12312.tar.bz2 chat-19a5d0047dbe5e4d7f4675893bfee125d3a12312.zip |
MM-8710: Web Hub optimizations (#8293)
* webhub optimizations
* test fix
* minor fix
* big perf improvement to ToJson after precomputing
* fix hub connection count
Diffstat (limited to 'model/websocket_message_test.go')
-rw-r--r-- | model/websocket_message_test.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/model/websocket_message_test.go b/model/websocket_message_test.go index 1b75d0f6e..10404c299 100644 --- a/model/websocket_message_test.go +++ b/model/websocket_message_test.go @@ -6,6 +6,8 @@ package model import ( "strings" "testing" + + "github.com/stretchr/testify/assert" ) func TestWebSocketEvent(t *testing.T) { @@ -54,3 +56,49 @@ func TestWebSocketResponse(t *testing.T) { t.Fatal("Ids do not match") } } + +func TestWebSocketEvent_PrecomputeJSON(t *testing.T) { + event := NewWebSocketEvent(WEBSOCKET_EVENT_POSTED, "foo", "bar", "baz", nil) + event.Sequence = 7 + + before := event.ToJson() + event.PrecomputeJSON() + after := event.ToJson() + + assert.JSONEq(t, before, after) +} + +var stringSink string + +func BenchmarkWebSocketEvent_ToJson(b *testing.B) { + event := NewWebSocketEvent(WEBSOCKET_EVENT_POSTED, "foo", "bar", "baz", nil) + for i := 0; i < 100; i++ { + event.Data[NewId()] = NewId() + } + + b.Run("SerializedNTimes", func(b *testing.B) { + for i := 0; i < b.N; i++ { + stringSink = event.ToJson() + } + }) + + b.Run("PrecomputedNTimes", func(b *testing.B) { + for i := 0; i < b.N; i++ { + event.PrecomputeJSON() + } + }) + + b.Run("PrecomputedAndSerializedNTimes", func(b *testing.B) { + for i := 0; i < b.N; i++ { + event.PrecomputeJSON() + stringSink = event.ToJson() + } + }) + + event.PrecomputeJSON() + b.Run("PrecomputedOnceAndSerializedNTimes", func(b *testing.B) { + for i := 0; i < b.N; i++ { + stringSink = event.ToJson() + } + }) +} |