Skip to content

Commit 771542a

Browse files
[PR #9635/23d2966b backport][3.10] Add benchmark for sending large WebSocket messages (#9638)
Co-authored-by: J. Nick Koston <[email protected]>
1 parent 0550d8f commit 771542a

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

tests/test_benchmarks_http_websocket.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
"""codspeed benchmarks for http websocket."""
22

33
import asyncio
4+
from typing import Union
45

56
from pytest_codspeed import BenchmarkFixture # type: ignore[import-untyped]
67

78
from aiohttp import DataQueue
89
from aiohttp.base_protocol import BaseProtocol
910
from aiohttp.http_websocket import (
11+
MSG_SIZE,
1012
WebSocketReader,
1113
WebSocketWriter,
1214
WSMessage,
@@ -41,7 +43,7 @@ def is_closing(self) -> bool:
4143
"""Swallow is_closing."""
4244
return False
4345

44-
def write(self, data: bytes) -> None:
46+
def write(self, data: Union[bytes, bytearray, memoryview]) -> None:
4547
"""Swallow writes."""
4648

4749

@@ -67,6 +69,22 @@ def _run() -> None:
6769
loop.run_until_complete(_send_one_hundred_websocket_text_messages())
6870

6971

72+
def test_send_one_hundred_large_websocket_text_messages(
73+
loop: asyncio.AbstractEventLoop, benchmark: BenchmarkFixture
74+
) -> None:
75+
"""Benchmark sending 100 WebSocket text messages."""
76+
writer = WebSocketWriter(MockProtocol(loop=loop), MockTransport())
77+
raw_message = b"x" * MSG_SIZE * 4
78+
79+
async def _send_one_hundred_websocket_text_messages() -> None:
80+
for _ in range(100):
81+
await writer._send_frame(raw_message, WSMsgType.TEXT)
82+
83+
@benchmark
84+
def _run() -> None:
85+
loop.run_until_complete(_send_one_hundred_websocket_text_messages())
86+
87+
7088
def test_send_one_hundred_websocket_text_messages_with_mask(
7189
loop: asyncio.AbstractEventLoop, benchmark: BenchmarkFixture
7290
) -> None:

0 commit comments

Comments
 (0)