Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(253)

Unified Diff: content/browser/renderer_host/websocket_dispatcher_host.cc

Issue 1009303002: Revert of Per-renderer WebSocket throttling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/websocket_dispatcher_host.cc
diff --git a/content/browser/renderer_host/websocket_dispatcher_host.cc b/content/browser/renderer_host/websocket_dispatcher_host.cc
index ab4e68b76c1c17a6e722d2e38ae2438f14478bb0..9aa7a5e2d3c64f22374cad9430d120d3e44a4aea 100644
--- a/content/browser/renderer_host/websocket_dispatcher_host.cc
+++ b/content/browser/renderer_host/websocket_dispatcher_host.cc
@@ -9,8 +9,6 @@
#include "base/callback.h"
#include "base/logging.h"
-#include "base/numerics/safe_conversions.h"
-#include "base/rand_util.h"
#include "base/stl_util.h"
#include "content/browser/child_process_security_policy_impl.h"
#include "content/browser/renderer_host/websocket_host.h"
@@ -25,10 +23,6 @@
// fully-qualified every time.
typedef WebSocketDispatcherHost::WebSocketHostState WebSocketHostState;
-// Max number of pending connections per WebSocketDispatcherHost
-// used for per-renderer WebSocket throttling.
-const int kMaxPendingWebSocketConnections = 255;
-
} // namespace
WebSocketDispatcherHost::WebSocketDispatcherHost(
@@ -39,12 +33,7 @@
get_context_callback_(get_context_callback),
websocket_host_factory_(
base::Bind(&WebSocketDispatcherHost::CreateWebSocketHost,
- base::Unretained(this))),
- num_pending_connections_(0),
- num_current_succeeded_connections_(0),
- num_previous_succeeded_connections_(0),
- num_current_failed_connections_(0),
- num_previous_failed_connections_(0) {}
+ base::Unretained(this))) {}
WebSocketDispatcherHost::WebSocketDispatcherHost(
int process_id,
@@ -53,18 +42,10 @@
: BrowserMessageFilter(WebSocketMsgStart),
process_id_(process_id),
get_context_callback_(get_context_callback),
- websocket_host_factory_(websocket_host_factory),
- num_pending_connections_(0),
- num_current_succeeded_connections_(0),
- num_previous_succeeded_connections_(0),
- num_current_failed_connections_(0),
- num_previous_failed_connections_(0) {}
+ websocket_host_factory_(websocket_host_factory) {}
-WebSocketHost* WebSocketDispatcherHost::CreateWebSocketHost(
- int routing_id,
- base::TimeDelta delay) {
- return new WebSocketHost(
- routing_id, this, get_context_callback_.Run(), delay);
+WebSocketHost* WebSocketDispatcherHost::CreateWebSocketHost(int routing_id) {
+ return new WebSocketHost(routing_id, this, get_context_callback_.Run());
}
bool WebSocketDispatcherHost::OnMessageReceived(const IPC::Message& message) {
@@ -92,24 +73,8 @@
// little extreme. So for now just ignore the bogus request.
return true; // We handled the message (by ignoring it).
}
- if (num_pending_connections_ >= kMaxPendingWebSocketConnections) {
- if(!Send(new WebSocketMsg_NotifyFailure(routing_id,
- "Error in connection establishment: net::ERR_INSUFFICIENT_RESOURCES"
- ))) {
- DVLOG(1) << "Sending of message type "
- << "WebSocketMsg_NotifyFailure failed.";
- }
- return true;
- }
- host = websocket_host_factory_.Run(routing_id, CalculateDelay());
+ host = websocket_host_factory_.Run(routing_id);
hosts_.insert(WebSocketHostTable::value_type(routing_id, host));
- ++num_pending_connections_;
- if (!throttling_period_timer_.IsRunning())
- throttling_period_timer_.Start(
- FROM_HERE,
- base::TimeDelta::FromMinutes(2),
- this,
- &WebSocketDispatcherHost::ThrottlingPeriodTimerCallback);
}
if (!host) {
DVLOG(1) << "Received invalid routing ID " << routing_id
@@ -147,14 +112,6 @@
int routing_id,
const std::string& selected_protocol,
const std::string& extensions) {
- // Update throttling counters (success).
- WebSocketHost* host = GetHost(routing_id);
- DCHECK(host);
- host->OnHandshakeSucceeded();
- --num_pending_connections_;
- DCHECK_GE(num_pending_connections_, 0);
- ++num_current_succeeded_connections_;
-
return SendOrDrop(new WebSocketMsg_AddChannelResponse(
routing_id, selected_protocol, extensions));
}
@@ -235,55 +192,8 @@
void WebSocketDispatcherHost::DeleteWebSocketHost(int routing_id) {
WebSocketHostTable::iterator it = hosts_.find(routing_id);
DCHECK(it != hosts_.end());
- DCHECK(it->second);
- if (!it->second->handshake_succeeded()) {
- // Update throttling counters (failure).
- --num_pending_connections_;
- DCHECK_GE(num_pending_connections_, 0);
- ++num_current_failed_connections_;
- }
-
delete it->second;
hosts_.erase(it);
-
- DCHECK_LE(base::checked_cast<size_t>(num_pending_connections_),
- hosts_.size());
-}
-
-int64_t WebSocketDispatcherHost::num_failed_connections() const {
- return num_previous_failed_connections_ +
- num_current_failed_connections_;
-}
-
-int64_t WebSocketDispatcherHost::num_succeeded_connections() const {
- return num_previous_succeeded_connections_ +
- num_current_succeeded_connections_;
-}
-
-// Calculate delay as described in
-// the per-renderer WebSocket throttling design doc:
-// https://docs.google.com/document/d/1aw2oN5PKfk-1gLnBrlv1OwLA8K3-ykM2ckwX2lubTg4/edit?usp=sharing
-base::TimeDelta WebSocketDispatcherHost::CalculateDelay() const {
- int64_t f = num_failed_connections();
- int64_t s = num_succeeded_connections();
- int p = num_pending_connections();
- return base::TimeDelta::FromMilliseconds(
- base::RandInt(1000, 5000) *
- (1 << std::min(p + f / (s + 1), INT64_C(16))) / 65536);
-}
-
-void WebSocketDispatcherHost::ThrottlingPeriodTimerCallback() {
- num_previous_failed_connections_ = num_current_failed_connections_;
- num_current_failed_connections_ = 0;
-
- num_previous_succeeded_connections_ = num_current_succeeded_connections_;
- num_current_succeeded_connections_ = 0;
-
- if (num_pending_connections_ == 0 &&
- num_previous_failed_connections_ == 0 &&
- num_previous_succeeded_connections_ == 0) {
- throttling_period_timer_.Stop();
- }
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698