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

Unified Diff: chrome/browser/net/network_stats.cc

Issue 10206035: NetConnectivity - Collect stats for TCP/UDP network (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 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: chrome/browser/net/network_stats.cc
===================================================================
--- chrome/browser/net/network_stats.cc (revision 135283)
+++ chrome/browser/net/network_stats.cc (working copy)
@@ -16,11 +16,13 @@
#include "base/tuple.h"
#include "chrome/common/chrome_version_info.h"
#include "content/public/browser/browser_thread.h"
+#include "googleurl/src/gurl.h"
#include "net/base/net_errors.h"
#include "net/base/net_util.h"
#include "net/base/network_change_notifier.h"
#include "net/base/sys_addrinfo.h"
#include "net/base/test_completion_callback.h"
+#include "net/proxy/proxy_service.h"
#include "net/socket/tcp_client_socket.h"
#include "net/udp/udp_client_socket.h"
#include "net/udp/udp_server_socket.h"
@@ -94,6 +96,7 @@
: load_size_(0),
bytes_to_read_(0),
bytes_to_send_(0),
+ has_proxy_server_(false),
packets_to_send_(0),
packets_sent_(0),
base_packet_number_(0),
@@ -108,13 +111,18 @@
bool NetworkStats::Start(net::HostResolver* host_resolver,
const net::HostPortPair& server_host_port_pair,
HistogramPortSelector histogram_port,
+ bool has_proxy_server,
uint32 bytes_to_send,
uint32 packets_to_send,
const net::CompletionCallback& finished_callback) {
DCHECK(bytes_to_send); // We should have data to send.
DCHECK_LE(packets_to_send, kMaximumPackets);
- Initialize(bytes_to_send, histogram_port, packets_to_send, finished_callback);
+ Initialize(bytes_to_send,
+ histogram_port,
+ has_proxy_server,
+ packets_to_send,
+ finished_callback);
net::HostResolver::RequestInfo request(server_host_port_pair);
int rv = host_resolver->Resolve(
@@ -130,6 +138,7 @@
void NetworkStats::Initialize(
uint32 bytes_to_send,
HistogramPortSelector histogram_port,
+ bool has_proxy_server,
uint32 packets_to_send,
const net::CompletionCallback& finished_callback) {
DCHECK(bytes_to_send); // We should have data to send.
@@ -140,6 +149,7 @@
packets_to_send_ = packets_to_send;
histogram_port_ = histogram_port;
+ has_proxy_server_ = has_proxy_server;
finished_callback_ = finished_callback;
}
@@ -538,7 +548,7 @@
// Build "NetConnectivity.<protocol>.Status.<port>.<load_size>" histogram
// name. Total number of histograms are 2*5*2.
- *status_histogram_name = base::StringPrintf(
+ *status_histogram_name = base::StringPrintf(
"NetConnectivity.%s.Status.%d.%s",
protocol_string,
kPorts[port],
@@ -547,7 +557,7 @@
// Build "NetConnectivity.<protocol>.PacketLoss.<port>.<load_size>" histogram
// name. Total number of histograms are 5 (because we do this test for UDP
// only).
- *packet_loss_histogram_name = base::StringPrintf(
+ *packet_loss_histogram_name = base::StringPrintf(
"NetConnectivity.%s.PacketLoss.%d.%s",
protocol_string,
kPorts[port],
@@ -570,31 +580,37 @@
&status_histogram_name,
&packet_loss_histogram_name);
- // For packet loss test, just record packet loss data.
- if (packets_to_send_ > 1) {
- base::Histogram* packet_loss_histogram = base::LinearHistogram::FactoryGet(
- packet_loss_histogram_name,
- 1,
- 2 << kMaximumPackets,
- (2 << kMaximumPackets) + 1,
- base::Histogram::kUmaTargetedHistogramFlag);
- packet_loss_histogram->Add(packets_received_mask_);
- return;
- }
+ size_t histogram_count = has_proxy_server_ ? 1 : 2;
+ for (size_t i = 0; i < histogram_count; i++) {
+ // For packet loss test, just record packet loss data.
+ if (packets_to_send_ > 1) {
+ base::Histogram* histogram = base::LinearHistogram::FactoryGet(
+ packet_loss_histogram_name,
+ 1,
+ 2 << kMaximumPackets,
+ (2 << kMaximumPackets) + 1,
+ base::Histogram::kUmaTargetedHistogramFlag);
+ histogram->Add(packets_received_mask_);
+ packet_loss_histogram_name.append(".NoProxy");
+ continue;
+ }
- if (result == net::OK) {
- base::Histogram* rtt_histogram = base::Histogram::FactoryTimeGet(
- rtt_histogram_name,
- base::TimeDelta::FromMilliseconds(10),
- base::TimeDelta::FromSeconds(60), 50,
+ if (result == net::OK) {
+ base::Histogram* rtt_histogram = base::Histogram::FactoryTimeGet(
+ rtt_histogram_name,
+ base::TimeDelta::FromMilliseconds(10),
+ base::TimeDelta::FromSeconds(60), 50,
+ base::Histogram::kUmaTargetedHistogramFlag);
+ rtt_histogram->AddTime(duration);
+ rtt_histogram_name.append(".NoProxy");
+ }
+
+ base::Histogram* status_histogram = base::LinearHistogram::FactoryGet(
+ status_histogram_name, 1, STATUS_MAX, STATUS_MAX+1,
base::Histogram::kUmaTargetedHistogramFlag);
- rtt_histogram->AddTime(duration);
+ status_histogram->Add(status);
+ status_histogram_name.append(".NoProxy");
}
-
- base::Histogram* status_histogram = base::LinearHistogram::FactoryGet(
- status_histogram_name, 1, STATUS_MAX, STATUS_MAX+1,
- base::Histogram::kUmaTargetedHistogramFlag);
- status_histogram->Add(status);
}
// UDPStatsClient methods and members.
@@ -717,6 +733,43 @@
delete this;
}
+// ProxyDetector methods and members.
+ProxyDetector::ProxyDetector(const std::string& network_stats_server,
+ NetworkStats::HistogramPortSelector histogram_port,
+ IOThread* io_thread)
+ : network_stats_server_(network_stats_server),
+ histogram_port_(histogram_port),
+ io_thread_(io_thread) {
+}
+
+ProxyDetector::~ProxyDetector() {
eroman 2012/05/04 23:08:48 When is ProxyDetector deleted? Note that if it is
ramant (doing other things) 2012/05/07 23:35:47 Implemented option a). Thanks for the above commen
+}
+
+void ProxyDetector::ResolveProxy() {
+ std::string url = base::StringPrintf(
+ "https://%s:%d", network_stats_server_.c_str(), kPorts[histogram_port_]);
eroman 2012/05/04 23:08:48 Assembling URLs in this fashion is generally not s
ramant (doing other things) 2012/05/07 23:35:47 Implemented option a). Thanks much for the suggest
+ GURL gurl(url);
+ net::ProxyService* service =
+ io_thread_->globals()->system_proxy_service.get();
+
+ int rv = service->ResolveProxy(
+ gurl,
+ &proxy_info_,
+ base::Bind(&ProxyDetector::OnResolveProxyComplete,
+ base::Unretained(this)),
+ NULL,
+ net::BoundNetLog());
+ if (rv == net::OK)
+ OnResolveProxyComplete(rv);
+}
+
+void ProxyDetector::OnResolveProxyComplete(int result) {
+ bool has_proxy_server = (proxy_info_.proxy_server().is_valid() &&
eroman 2012/05/04 23:08:48 One extra check to add is into that list is: re
ramant (doing other things) 2012/05/07 23:35:47 Done.
+ !proxy_info_.proxy_server().is_direct());
+ StartNetworkStatsTest(
eroman 2012/05/04 23:08:48 [optional] I suggest de-coupling this from ProxyDe
ramant (doing other things) 2012/05/07 23:35:47 Done.
+ network_stats_server_, histogram_port_, has_proxy_server, io_thread_);
+}
+
// static
void CollectNetworkStats(const std::string& network_stats_server,
IOThread* io_thread) {
@@ -742,8 +795,6 @@
CR_DEFINE_STATIC_LOCAL(scoped_refptr<base::FieldTrial>, trial, ());
static bool collect_stats = false;
-
- static uint32 port;
static NetworkStats::HistogramPortSelector histogram_port;
if (!trial.get()) {
@@ -782,7 +833,6 @@
base::RandInt(NetworkStats::PORT_53, NetworkStats::PORT_8080));
DCHECK_GE(histogram_port, NetworkStats::PORT_53);
DCHECK_LE(histogram_port, NetworkStats::PORT_8080);
- port = kPorts[histogram_port];
}
}
@@ -797,10 +847,23 @@
++number_of_tests_done;
+ ProxyDetector* proxy_client = new ProxyDetector(
+ network_stats_server, histogram_port, io_thread);
+ proxy_client->ResolveProxy();
+}
+
+// static
+void StartNetworkStatsTest(const std::string& network_stats_server,
+ NetworkStats::HistogramPortSelector histogram_port,
+ bool has_proxy_server,
+ IOThread* io_thread) {
net::HostResolver* host_resolver = io_thread->globals()->host_resolver.get();
DCHECK(host_resolver);
- net::HostPortPair server_address(network_stats_server, port);
+ DCHECK_GE(histogram_port, NetworkStats::PORT_53);
+ DCHECK_LE(histogram_port, NetworkStats::PORT_8080);
+ net::HostPortPair server_address(network_stats_server,
+ kPorts[histogram_port]);
int experiment_to_run = base::RandInt(1, 5);
switch (experiment_to_run) {
@@ -808,7 +871,7 @@
{
UDPStatsClient* small_udp_stats = new UDPStatsClient();
small_udp_stats->Start(
- host_resolver, server_address, histogram_port,
+ host_resolver, server_address, histogram_port, has_proxy_server,
kSmallTestBytesToSend, 1, net::CompletionCallback());
}
break;
@@ -817,7 +880,7 @@
{
UDPStatsClient* large_udp_stats = new UDPStatsClient();
large_udp_stats->Start(
- host_resolver, server_address, histogram_port,
+ host_resolver, server_address, histogram_port, has_proxy_server,
kLargeTestBytesToSend, 1, net::CompletionCallback());
}
break;
@@ -826,7 +889,7 @@
{
TCPStatsClient* small_tcp_client = new TCPStatsClient();
small_tcp_client->Start(
- host_resolver, server_address, histogram_port,
+ host_resolver, server_address, histogram_port, has_proxy_server,
kSmallTestBytesToSend, 1, net::CompletionCallback());
}
break;
@@ -835,7 +898,7 @@
{
TCPStatsClient* large_tcp_client = new TCPStatsClient();
large_tcp_client->Start(
- host_resolver, server_address, histogram_port,
+ host_resolver, server_address, histogram_port, has_proxy_server,
kLargeTestBytesToSend, 1, net::CompletionCallback());
}
break;
@@ -844,7 +907,7 @@
{
UDPStatsClient* packet_loss_udp_stats = new UDPStatsClient();
packet_loss_udp_stats->Start(
- host_resolver, server_address, histogram_port,
+ host_resolver, server_address, histogram_port, has_proxy_server,
kLargeTestBytesToSend, kMaximumPackets, net::CompletionCallback());
}
break;

Powered by Google App Engine
This is Rietveld 408576698