Commit 14073bd2 authored by Yoichi Osato's avatar Yoichi Osato Committed by Commit Bot

[WebSocket] Add --websocket-read-buffer-size command line flag.

This patch adds the flag that overrides default read buffer size
(32k Bytes) for WebSocket.
The buffer is the first pool to receive date from network socket.
This flag will be used to investigate the performance issue.

You can use this flag both on chrome and content_shell:
$ ./chrome.exe --websocket-read-buffer-size=3000000
This flag sets the buffer size 300k Bytes.

Bug: 865001
Change-Id: I57aeb9e2feb9b249f1265596d6da5524a63f801a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1635079Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarYutaka Hirano <yhirano@chromium.org>
Reviewed-by: default avatarAdam Rice <ricea@chromium.org>
Commit-Queue: Yoichi Osato <yoichio@chromium.org>
Cr-Commit-Position: refs/heads/master@{#665867}
parent c292f86c
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
#include "content/public/common/sandboxed_process_launcher_delegate.h" #include "content/public/common/sandboxed_process_launcher_delegate.h"
#include "content/public/common/service_manager_connection.h" #include "content/public/common/service_manager_connection.h"
#include "mojo/public/cpp/system/platform_handle.h" #include "mojo/public/cpp/system/platform_handle.h"
#include "net/websockets/websocket_basic_stream.h"
#include "services/service_manager/embedder/switches.h" #include "services/service_manager/embedder/switches.h"
#include "services/service_manager/public/cpp/constants.h" #include "services/service_manager/public/cpp/constants.h"
...@@ -312,6 +313,7 @@ void BrowserChildProcessHostImpl::LaunchWithoutExtraCommandLineSwitches( ...@@ -312,6 +313,7 @@ void BrowserChildProcessHostImpl::LaunchWithoutExtraCommandLineSwitches(
const base::CommandLine& browser_command_line = const base::CommandLine& browser_command_line =
*base::CommandLine::ForCurrentProcess(); *base::CommandLine::ForCurrentProcess();
static const char* const kForwardSwitches[] = { static const char* const kForwardSwitches[] = {
net::kWebSocketReadBufferSize,
service_manager::switches::kDisableInProcessStackTraces, service_manager::switches::kDisableInProcessStackTraces,
switches::kDisableBestEffortTasks, switches::kDisableBestEffortTasks,
switches::kDisableLogging, switches::kDisableLogging,
......
...@@ -11,9 +11,11 @@ ...@@ -11,9 +11,11 @@
#include <utility> #include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/command_line.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/numerics/safe_conversions.h" #include "base/numerics/safe_conversions.h"
#include "base/strings/string_number_conversions.h"
#include "net/base/io_buffer.h" #include "net/base/io_buffer.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
#include "net/socket/client_socket_handle.h" #include "net/socket/client_socket_handle.h"
...@@ -94,13 +96,17 @@ int CalculateSerializedSizeAndTurnOnMaskBit( ...@@ -94,13 +96,17 @@ int CalculateSerializedSizeAndTurnOnMaskBit(
} // namespace } // namespace
// Overrides default read buffer size for WebSocket. This flag will be used to
// investigate the performance issue of crbug.com/865001 and be deleted later
// on.
const char kWebSocketReadBufferSize[] = "websocket-read-buffer-size";
WebSocketBasicStream::WebSocketBasicStream( WebSocketBasicStream::WebSocketBasicStream(
std::unique_ptr<Adapter> connection, std::unique_ptr<Adapter> connection,
const scoped_refptr<GrowableIOBuffer>& http_read_buffer, const scoped_refptr<GrowableIOBuffer>& http_read_buffer,
const std::string& sub_protocol, const std::string& sub_protocol,
const std::string& extensions) const std::string& extensions)
: read_buffer_(base::MakeRefCounted<IOBufferWithSize>(kReadBufferSize)), : connection_(std::move(connection)),
connection_(std::move(connection)),
http_read_buffer_(http_read_buffer), http_read_buffer_(http_read_buffer),
sub_protocol_(sub_protocol), sub_protocol_(sub_protocol),
extensions_(extensions), extensions_(extensions),
...@@ -109,6 +115,21 @@ WebSocketBasicStream::WebSocketBasicStream( ...@@ -109,6 +115,21 @@ WebSocketBasicStream::WebSocketBasicStream(
if (http_read_buffer_.get() && http_read_buffer_->offset() == 0) if (http_read_buffer_.get() && http_read_buffer_->offset() == 0)
http_read_buffer_ = nullptr; http_read_buffer_ = nullptr;
DCHECK(connection_->is_initialized()); DCHECK(connection_->is_initialized());
base::CommandLine* const command_line =
base::CommandLine::ForCurrentProcess();
DCHECK(command_line);
int websocket_buffer_size = kReadBufferSize;
if (command_line->HasSwitch(kWebSocketReadBufferSize)) {
std::string size_string =
command_line->GetSwitchValueASCII(kWebSocketReadBufferSize);
if (!base::StringToInt(size_string, &websocket_buffer_size) ||
websocket_buffer_size <= 0) {
websocket_buffer_size = kReadBufferSize;
}
}
DVLOG(1) << "WebSocketReadBufferSize is " << websocket_buffer_size;
read_buffer_ =
(base::MakeRefCounted<IOBufferWithSize>(websocket_buffer_size));
} }
WebSocketBasicStream::~WebSocketBasicStream() { Close(); } WebSocketBasicStream::~WebSocketBasicStream() { Close(); }
......
...@@ -194,6 +194,8 @@ class NET_EXPORT_PRIVATE WebSocketBasicStream : public WebSocketStream { ...@@ -194,6 +194,8 @@ class NET_EXPORT_PRIVATE WebSocketBasicStream : public WebSocketStream {
CompletionOnceCallback read_callback_; CompletionOnceCallback read_callback_;
}; };
NET_EXPORT extern const char kWebSocketReadBufferSize[];
} // namespace net } // namespace net
#endif // NET_WEBSOCKETS_WEBSOCKET_BASIC_STREAM_H_ #endif // NET_WEBSOCKETS_WEBSOCKET_BASIC_STREAM_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment