Skip to content

Commit fb22e1e

Browse files
authored
[PR #9784/2f6ff6d backport][3.11] Add benchmark for reading WebSocket payloads larger than 2**16 (#9786)
1 parent e499d55 commit fb22e1e

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

tests/test_benchmarks_http_websocket.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from pytest_codspeed import BenchmarkFixture
77

88
from aiohttp import DataQueue
9-
from aiohttp._websocket.helpers import MSG_SIZE
9+
from aiohttp._websocket.helpers import MSG_SIZE, PACK_LEN3
1010
from aiohttp.base_protocol import BaseProtocol
1111
from aiohttp.http_websocket import (
1212
WebSocketReader,
@@ -16,6 +16,27 @@
1616
)
1717

1818

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

0 commit comments

Comments
 (0)