Skip to content

Commit 1ce9953

Browse files
authored
[PR #9784/2f6ff6d backport][3.10] Add benchmark for reading WebSocket payloads larger than 2**16 (#9785)
1 parent 4377d78 commit 1ce9953

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

tests/test_benchmarks_http_websocket.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,35 @@
99
from aiohttp.base_protocol import BaseProtocol
1010
from aiohttp.http_websocket import (
1111
MSG_SIZE,
12+
PACK_LEN3,
1213
WebSocketReader,
1314
WebSocketWriter,
1415
WSMessage,
1516
WSMsgType,
1617
)
1718

1819

20+
def test_read_large_binary_websocket_messages(
21+
loop: asyncio.AbstractEventLoop, benchmark: BenchmarkFixture
22+
) -> None:
23+
"""Read one hundred large binary websocket messages."""
24+
queue: DataQueue[WSMessage] = DataQueue(loop=loop)
25+
reader = WebSocketReader(queue, max_msg_size=2**18)
26+
27+
# PACK3 has a minimum message length of 2**16 bytes.
28+
message = b"x" * ((2**16) + 1)
29+
msg_length = len(message)
30+
first_byte = 0x80 | 0 | WSMsgType.BINARY.value
31+
header = PACK_LEN3(first_byte, 127, msg_length)
32+
raw_message = header + message
33+
feed_data = reader.feed_data
34+
35+
@benchmark
36+
def _run() -> None:
37+
for _ in range(100):
38+
feed_data(raw_message)
39+
40+
1941
def test_read_one_hundred_websocket_text_messages(
2042
loop: asyncio.AbstractEventLoop, benchmark: BenchmarkFixture
2143
) -> None:

0 commit comments

Comments
 (0)