Skip to content

Commit e326c6c

Browse files
authored
Use byte array in message send to avoid some unnecessary encoding (#2749)
1 parent a62b86c commit e326c6c

File tree

5 files changed

+15
-13
lines changed

5 files changed

+15
-13
lines changed

lib/PuppeteerSharp.Tests/PollerInterceptor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ namespace PuppeteerSharp.Tests
66
{
77
public sealed class PollerInterceptor(IConnectionTransport connectionTransport) : IConnectionTransport
88
{
9-
public event EventHandler<string> MessageSent;
9+
public event EventHandler<byte[]> MessageSent;
1010

11-
public Task SendAsync(string message)
11+
public Task SendAsync(byte[] message)
1212
{
1313
var task = connectionTransport.SendAsync(message);
1414
MessageSent?.Invoke(connectionTransport, message);
@@ -41,7 +41,7 @@ public Task<bool> WaitForStartPollingAsync()
4141
// We intercept the poller.start() call to prevent tests from continuing before the polling has started.
4242
MessageSent += (_, message) =>
4343
{
44-
if (message.Contains("poller.start()"))
44+
if (message.AsSpan().IndexOf("poller.start()"u8) != -1)
4545
{
4646
startedPolling.SetResult(true);
4747
}

lib/PuppeteerSharp/Cdp/Connection.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,18 @@ internal static async Task<Connection> Create(string url, IConnectionOptions con
157157

158158
internal int GetMessageId() => Interlocked.Increment(ref _lastId);
159159

160-
internal Task RawSendAsync(string message, CommandOptions options = null)
160+
internal Task RawSendAsync(byte[] message, CommandOptions options = null)
161161
{
162-
_logger.LogTrace("Send ► {Message}", message);
162+
if (_logger.IsEnabled(LogLevel.Trace))
163+
{
164+
_logger.LogTrace("Send ► {Message}", Encoding.UTF8.GetString(message));
165+
}
166+
163167
return Transport.SendAsync(message);
164168
}
165169

166-
internal string GetMessage(int id, string method, object args, string sessionId = null)
167-
=> JsonSerializer.Serialize(
170+
internal byte[] GetMessage(int id, string method, object args, string sessionId = null)
171+
=> JsonSerializer.SerializeToUtf8Bytes(
168172
new ConnectionRequest { Id = id, Method = method, Params = args, SessionId = sessionId },
169173
JsonHelper.DefaultJsonSerializerSettings.Value);
170174

lib/PuppeteerSharp/MessageTask.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace PuppeteerSharp
55
{
66
internal class MessageTask
77
{
8-
internal string Message { get; set; }
8+
internal byte[] Message { get; set; }
99

1010
internal TaskCompletionSource<JsonElement?> TaskWrapper { get; set; }
1111

lib/PuppeteerSharp/Transport/IConnectionTransport.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ public interface IConnectionTransport : IDisposable
3333
/// </summary>
3434
/// <param name="message">Message to send.</param>
3535
/// <returns>The task.</returns>
36-
Task SendAsync(string message);
36+
Task SendAsync(byte[] message);
3737
}
3838
}

lib/PuppeteerSharp/Transport/WebSocketTransport.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,9 @@ private WebSocketTransport(WebSocket client, TransportTaskScheduler scheduler, b
7070
public bool IsClosed { get; private set; }
7171

7272
/// <inheritdoc />
73-
public Task SendAsync(string message)
73+
public Task SendAsync(byte[] message)
7474
{
75-
var encoded = Encoding.UTF8.GetBytes(message);
76-
var buffer = new ArraySegment<byte>(encoded, 0, encoded.Length);
77-
Task SendCoreAsync() => _client.SendAsync(buffer, WebSocketMessageType.Text, true, default);
75+
Task SendCoreAsync() => _client.SendAsync(new ArraySegment<byte>(message), WebSocketMessageType.Text, true, default);
7876

7977
return _queueRequests ? _socketQueue.Enqueue(SendCoreAsync) : SendCoreAsync();
8078
}

0 commit comments

Comments
 (0)