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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/net/network_stats.h ('k') | chrome/browser/net/network_stats_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/net/network_stats.h" 5 #include "chrome/browser/net/network_stats.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "base/rand_util.h" 12 #include "base/rand_util.h"
13 #include "base/stringprintf.h" 13 #include "base/stringprintf.h"
14 #include "base/threading/platform_thread.h" 14 #include "base/threading/platform_thread.h"
15 #include "base/time.h" 15 #include "base/time.h"
16 #include "base/tuple.h" 16 #include "base/tuple.h"
17 #include "chrome/common/chrome_version_info.h" 17 #include "chrome/common/chrome_version_info.h"
18 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
19 #include "googleurl/src/gurl.h"
19 #include "net/base/net_errors.h" 20 #include "net/base/net_errors.h"
20 #include "net/base/net_util.h" 21 #include "net/base/net_util.h"
21 #include "net/base/network_change_notifier.h" 22 #include "net/base/network_change_notifier.h"
22 #include "net/base/sys_addrinfo.h" 23 #include "net/base/sys_addrinfo.h"
23 #include "net/base/test_completion_callback.h" 24 #include "net/base/test_completion_callback.h"
25 #include "net/proxy/proxy_service.h"
24 #include "net/socket/tcp_client_socket.h" 26 #include "net/socket/tcp_client_socket.h"
25 #include "net/udp/udp_client_socket.h" 27 #include "net/udp/udp_client_socket.h"
26 #include "net/udp/udp_server_socket.h" 28 #include "net/udp/udp_server_socket.h"
27 29
28 using content::BrowserThread; 30 using content::BrowserThread;
29 31
30 namespace chrome_browser_net { 32 namespace chrome_browser_net {
31 33
32 // This specifies the number of bytes to be sent to the TCP/UDP servers as part 34 // This specifies the number of bytes to be sent to the TCP/UDP servers as part
33 // of small packet size test. 35 // of small packet size test.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 80
79 // HistogramPortSelector and kPorts should be kept in sync. 81 // HistogramPortSelector and kPorts should be kept in sync.
80 static const int32 kPorts[] = {53, 80, 587, 6121, 8080, 999999}; 82 static const int32 kPorts[] = {53, 80, 587, 6121, 8080, 999999};
81 83
82 // NetworkStats methods and members. 84 // NetworkStats methods and members.
83 NetworkStats::NetworkStats() 85 NetworkStats::NetworkStats()
84 : load_size_(0), 86 : load_size_(0),
85 bytes_to_read_(0), 87 bytes_to_read_(0),
86 bytes_to_send_(0), 88 bytes_to_send_(0),
87 encoded_message_(""), 89 encoded_message_(""),
90 has_no_proxy_server_(true),
88 start_time_(base::TimeTicks::Now()), 91 start_time_(base::TimeTicks::Now()),
89 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { 92 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
90 } 93 }
91 94
92 NetworkStats::~NetworkStats() { 95 NetworkStats::~NetworkStats() {
93 socket_.reset(); 96 socket_.reset();
94 } 97 }
95 98
96 bool NetworkStats::Start(net::HostResolver* host_resolver, 99 bool NetworkStats::Start(net::HostResolver* host_resolver,
97 const net::HostPortPair& server_host_port_pair, 100 const net::HostPortPair& server_host_port_pair,
98 HistogramPortSelector histogram_port, 101 HistogramPortSelector histogram_port,
102 bool has_no_proxy_server,
99 uint32 bytes_to_send, 103 uint32 bytes_to_send,
100 const net::CompletionCallback& finished_callback) { 104 const net::CompletionCallback& finished_callback) {
101 DCHECK(bytes_to_send); // We should have data to send. 105 DCHECK(bytes_to_send); // We should have data to send.
102 106
103 Initialize(bytes_to_send, histogram_port, finished_callback); 107 Initialize(
108 bytes_to_send, histogram_port, has_no_proxy_server, finished_callback);
104 109
105 net::HostResolver::RequestInfo request(server_host_port_pair); 110 net::HostResolver::RequestInfo request(server_host_port_pair);
106 int rv = host_resolver->Resolve( 111 int rv = host_resolver->Resolve(
107 request, &addresses_, 112 request, &addresses_,
108 base::Bind(&NetworkStats::OnResolveComplete, 113 base::Bind(&NetworkStats::OnResolveComplete,
109 base::Unretained(this)), 114 base::Unretained(this)),
110 NULL, net::BoundNetLog()); 115 NULL, net::BoundNetLog());
111 if (rv == net::ERR_IO_PENDING) 116 if (rv == net::ERR_IO_PENDING)
112 return true; 117 return true;
113 return DoConnect(rv); 118 return DoConnect(rv);
114 } 119 }
115 120
116 void NetworkStats::Initialize( 121 void NetworkStats::Initialize(
117 uint32 bytes_to_send, 122 uint32 bytes_to_send,
118 HistogramPortSelector histogram_port, 123 HistogramPortSelector histogram_port,
124 bool has_no_proxy_server,
119 const net::CompletionCallback& finished_callback) { 125 const net::CompletionCallback& finished_callback) {
120 DCHECK(bytes_to_send); // We should have data to send. 126 DCHECK(bytes_to_send); // We should have data to send.
121 DCHECK_LE(bytes_to_send, kLargeTestBytesToSend); 127 DCHECK_LE(bytes_to_send, kLargeTestBytesToSend);
122 128
123 load_size_ = bytes_to_send; 129 load_size_ = bytes_to_send;
124 bytes_to_send_ = kVersionLength + kChecksumLength + kPayloadSizeLength + 130 bytes_to_send_ = kVersionLength + kChecksumLength + kPayloadSizeLength +
125 load_size_; 131 load_size_;
126 bytes_to_read_ = kVersionLength + kChecksumLength + kPayloadSizeLength + 132 bytes_to_read_ = kVersionLength + kChecksumLength + kPayloadSizeLength +
127 kKeyLength + load_size_; 133 kKeyLength + load_size_;
128 134
129 histogram_port_ = histogram_port; 135 histogram_port_ = histogram_port;
136 has_no_proxy_server_ = has_no_proxy_server;
130 finished_callback_ = finished_callback; 137 finished_callback_ = finished_callback;
131 } 138 }
132 139
133 bool NetworkStats::ConnectComplete(int result) { 140 bool NetworkStats::ConnectComplete(int result) {
134 if (result < 0) { 141 if (result < 0) {
135 Finish(CONNECT_FAILED, result); 142 Finish(CONNECT_FAILED, result);
136 return false; 143 return false;
137 } 144 }
138 145
139 DCHECK(bytes_to_send_); // We should have data to send. 146 DCHECK(bytes_to_send_); // We should have data to send.
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 return INVALID_CHECKSUM; 409 return INVALID_CHECKSUM;
403 410
404 stream_.Reset(); 411 stream_.Reset();
405 if (!stream_.VerifyBytes(decoded_data, message_length)) 412 if (!stream_.VerifyBytes(decoded_data, message_length))
406 return PATTERN_CHANGED; 413 return PATTERN_CHANGED;
407 414
408 return SUCCESS; 415 return SUCCESS;
409 } 416 }
410 417
411 // static 418 // static
412 void NetworkStats::GetHistogramNames(const ProtocolValue& protocol, 419 void NetworkStats::GetHistogramNames(
413 HistogramPortSelector port, 420 const ProtocolValue& protocol,
414 uint32 load_size, 421 HistogramPortSelector histogram_port,
415 int result, 422 bool has_no_proxy_server,
416 std::string* rtt_histogram_name, 423 uint32 load_size,
417 std::string* status_histogram_name) { 424 int result,
418 CHECK_GE(port, PORT_53); 425 std::string* rtt_histogram_name,
419 CHECK_LE(port, HISTOGRAM_PORT_MAX); 426 std::string* rtt_no_proxy_histogram_name,
427 std::string* status_histogram_name,
428 std::string* status_no_proxy_histogram_name) {
429 CHECK_GE(histogram_port, PORT_53);
430 CHECK_LE(histogram_port, HISTOGRAM_PORT_MAX);
420 431
421 // Build <protocol> string. 432 // Build <protocol> string.
422 const char* kTcpString = "TCP"; 433 const char* kTcpString = "TCP";
423 const char* kUdpString = "UDP"; 434 const char* kUdpString = "UDP";
424 const char* protocol_string; 435 const char* protocol_string;
425 if (protocol == PROTOCOL_TCP) 436 if (protocol == PROTOCOL_TCP)
426 protocol_string = kTcpString; 437 protocol_string = kTcpString;
427 else 438 else
428 protocol_string = kUdpString; 439 protocol_string = kUdpString;
429 440
430 // Build <load_size> string. 441 // Build <load_size> string.
431 const char* kSmallLoadString = "100B"; 442 const char* kSmallLoadString = "100B";
432 const char* kLargeLoadString = "1K"; 443 const char* kLargeLoadString = "1K";
433 const char* load_size_string; 444 const char* load_size_string;
434 if (load_size == kSmallTestBytesToSend) 445 if (load_size == kSmallTestBytesToSend)
435 load_size_string = kSmallLoadString; 446 load_size_string = kSmallLoadString;
436 else 447 else
437 load_size_string = kLargeLoadString; 448 load_size_string = kLargeLoadString;
438 449
439 // Build "NetConnectivity.<protocol>.Success.<port>.<load_size>.RTT" 450 // Build "NetConnectivity.<protocol>.Success.<port>.<load_size>.RTT"
440 // histogram name. Total number of histograms are 2*5*2. 451 // and "NetConnectivity.<protocol>.NoProxy.Success.<port>.<load_size>.RTT"
452 // histogram names. Total number of histograms are 2*5*2*2.
441 if (result == net::OK) { 453 if (result == net::OK) {
442 *rtt_histogram_name = base::StringPrintf( 454 *rtt_histogram_name = base::StringPrintf(
443 "NetConnectivity.%s.Success.%d.%s.RTT", 455 "NetConnectivity.%s.Success.%d.%s.RTT",
444 protocol_string, 456 protocol_string,
445 kPorts[port], 457 kPorts[histogram_port],
446 load_size_string); 458 load_size_string);
459 if (has_no_proxy_server) {
460 *rtt_no_proxy_histogram_name = base::StringPrintf(
461 "NetConnectivity.%s.NoProxy.Success.%d.%s.RTT",
462 protocol_string,
463 kPorts[histogram_port],
464 load_size_string);
465 } else {
466 rtt_no_proxy_histogram_name->clear();
467 }
468 } else {
469 rtt_histogram_name->clear();
Ryan Sleevi 2012/04/28 02:06:32 random drive by: Since much of our error handling
ramant (doing other things) 2012/04/30 17:17:00 Done.
447 } 470 }
448 471
449 // Build "NetConnectivity.<protocol>.Status.<port>.<load_size>" histogram 472 // Build "NetConnectivity.<protocol>.Status.<port>.<load_size>" and
450 // name. Total number of histograms are 2*5*2. 473 // "NetConnectivity.<protocol>.NoProxy.Status.<port>.<load_size>" histogram
474 // name. Total number of histograms are 2*2*5*2.
451 *status_histogram_name = base::StringPrintf( 475 *status_histogram_name = base::StringPrintf(
452 "NetConnectivity.%s.Status.%d.%s", 476 "NetConnectivity.%s.Status.%d.%s",
453 protocol_string, 477 protocol_string,
454 kPorts[port], 478 kPorts[histogram_port],
455 load_size_string); 479 load_size_string);
480 if (has_no_proxy_server) {
481 *status_no_proxy_histogram_name = base::StringPrintf(
482 "NetConnectivity.%s.NoProxy.Status.%d.%s",
483 protocol_string,
484 kPorts[histogram_port],
485 load_size_string);
486 } else {
487 status_no_proxy_histogram_name->clear();
488 }
456 } 489 }
457 490
458 void NetworkStats::RecordHistograms(const ProtocolValue& protocol, 491 void NetworkStats::RecordHistograms(const ProtocolValue& protocol,
459 const Status& status, 492 const Status& status,
460 int result) { 493 int result) {
461 base::TimeDelta duration = base::TimeTicks::Now() - start_time(); 494 base::TimeDelta duration = base::TimeTicks::Now() - start_time();
462 495
463 std::string rtt_histogram_name; 496 std::string rtt_histogram_name;
497 std::string rtt_no_proxy_histogram_name;
464 std::string status_histogram_name; 498 std::string status_histogram_name;
499 std::string status_no_proxy_histogram_name;
465 GetHistogramNames(protocol, 500 GetHistogramNames(protocol,
466 histogram_port_, 501 histogram_port_,
502 has_no_proxy_server_,
467 load_size_, 503 load_size_,
468 result, 504 result,
469 &rtt_histogram_name, 505 &rtt_histogram_name,
470 &status_histogram_name); 506 &rtt_no_proxy_histogram_name,
507 &status_histogram_name,
508 &status_no_proxy_histogram_name);
471 509
472 if (result == net::OK) { 510 if (result == net::OK) {
473 base::Histogram* rtt_histogram = base::Histogram::FactoryTimeGet( 511 base::Histogram* rtt_histogram = base::Histogram::FactoryTimeGet(
474 rtt_histogram_name, 512 rtt_histogram_name,
475 base::TimeDelta::FromMilliseconds(10), 513 base::TimeDelta::FromMilliseconds(10),
476 base::TimeDelta::FromSeconds(60), 50, 514 base::TimeDelta::FromSeconds(60), 50,
477 base::Histogram::kUmaTargetedHistogramFlag); 515 base::Histogram::kUmaTargetedHistogramFlag);
478 rtt_histogram->AddTime(duration); 516 rtt_histogram->AddTime(duration);
517
518 if (has_no_proxy_server_) {
519 base::Histogram* rtt_no_proxy_histogram = base::Histogram::FactoryTimeGet(
520 rtt_no_proxy_histogram_name,
521 base::TimeDelta::FromMilliseconds(10),
522 base::TimeDelta::FromSeconds(60), 50,
523 base::Histogram::kUmaTargetedHistogramFlag);
524 rtt_no_proxy_histogram->AddTime(duration);
525 }
479 } 526 }
480 527
481 base::Histogram* status_histogram = base::LinearHistogram::FactoryGet( 528 base::Histogram* status_histogram = base::LinearHistogram::FactoryGet(
482 status_histogram_name, 1, STATUS_MAX, STATUS_MAX+1, 529 status_histogram_name, 1, STATUS_MAX, STATUS_MAX+1,
483 base::Histogram::kUmaTargetedHistogramFlag); 530 base::Histogram::kUmaTargetedHistogramFlag);
484 status_histogram->Add(status); 531 status_histogram->Add(status);
532 if (has_no_proxy_server_) {
533 base::Histogram* status_no_proxy_histogram =
534 base::LinearHistogram::FactoryGet(
535 status_no_proxy_histogram_name, 1, STATUS_MAX, STATUS_MAX+1,
536 base::Histogram::kUmaTargetedHistogramFlag);
537 status_no_proxy_histogram->Add(status);
538 }
485 } 539 }
486 540
487 // UDPStatsClient methods and members. 541 // UDPStatsClient methods and members.
488 UDPStatsClient::UDPStatsClient() 542 UDPStatsClient::UDPStatsClient()
489 : NetworkStats() { 543 : NetworkStats() {
490 } 544 }
491 545
492 UDPStatsClient::~UDPStatsClient() { 546 UDPStatsClient::~UDPStatsClient() {
493 } 547 }
494 548
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 651
598 // Disconnect the socket so that there are no more IO operations. 652 // Disconnect the socket so that there are no more IO operations.
599 net::TCPClientSocket* tcp_socket = 653 net::TCPClientSocket* tcp_socket =
600 static_cast<net::TCPClientSocket*>(socket()); 654 static_cast<net::TCPClientSocket*>(socket());
601 if (tcp_socket) 655 if (tcp_socket)
602 tcp_socket->Disconnect(); 656 tcp_socket->Disconnect();
603 657
604 delete this; 658 delete this;
605 } 659 }
606 660
661 // ProxyClient methods and members.
662 ProxyClient::ProxyClient(const std::string& network_stats_server,
663 NetworkStats::HistogramPortSelector histogram_port,
664 IOThread* io_thread)
665 : network_stats_server_(network_stats_server),
666 histogram_port_(histogram_port),
667 io_thread_(io_thread) {
668 }
669
670 ProxyClient::~ProxyClient() {
671 }
672
673 void ProxyClient::ResolveProxy() {
674 std::string url = base::StringPrintf("http://%s:%d",
675 network_stats_server_.c_str(),
676 kPorts[histogram_port_]);
Ryan Sleevi 2012/04/28 02:06:32 Would it make more sense to check for HTTPS here?
ramant (doing other things) 2012/04/30 17:17:00 Done.
677 GURL gurl(url);
678 net::ProxyService* service =
679 io_thread_->globals()->system_proxy_service.get();
680
681 int rv = service->ResolveProxy(
682 gurl,
683 &proxy_info_,
684 base::Bind(&ProxyClient::OnResolveProxyComplete,
685 base::Unretained(this)),
686 NULL,
687 net::BoundNetLog());
688 if (rv == net::OK)
689 OnResolveProxyComplete(rv);
690 }
691
692 void ProxyClient::OnResolveProxyComplete(int result) {
693 bool no_proxy_server = (!proxy_info_.proxy_server().is_valid() ||
694 proxy_info_.proxy_server().is_direct());
695
696 net::HostResolver* host_resolver = io_thread_->globals()->host_resolver.get();
697 DCHECK(host_resolver);
698
699 DCHECK_GE(histogram_port_, NetworkStats::PORT_53);
700 DCHECK_LE(histogram_port_, NetworkStats::PORT_8080);
701 net::HostPortPair server_address(network_stats_server_,
702 kPorts[histogram_port_]);
703
704 UDPStatsClient* small_udp_stats = new UDPStatsClient();
Ryan Sleevi 2012/04/28 02:06:32 Might be worth mentioning either here or in networ
ramant (doing other things) 2012/04/30 17:17:00 Done.
705 small_udp_stats->Start(
706 host_resolver, server_address, histogram_port_, no_proxy_server,
707 kSmallTestBytesToSend, net::CompletionCallback());
708
709 UDPStatsClient* large_udp_stats = new UDPStatsClient();
710 large_udp_stats->Start(
711 host_resolver, server_address, histogram_port_, no_proxy_server,
712 kLargeTestBytesToSend, net::CompletionCallback());
713
714 TCPStatsClient* small_tcp_client = new TCPStatsClient();
715 small_tcp_client->Start(
716 host_resolver, server_address, histogram_port_, no_proxy_server,
717 kSmallTestBytesToSend, net::CompletionCallback());
718
719 TCPStatsClient* large_tcp_client = new TCPStatsClient();
720 large_tcp_client->Start(
721 host_resolver, server_address, histogram_port_, no_proxy_server,
722 kLargeTestBytesToSend, net::CompletionCallback());
723 }
724
607 // static 725 // static
608 void CollectNetworkStats(const std::string& network_stats_server, 726 void CollectNetworkStats(const std::string& network_stats_server,
609 IOThread* io_thread) { 727 IOThread* io_thread) {
610 if (network_stats_server.empty()) 728 if (network_stats_server.empty())
611 return; 729 return;
612 730
613 // If we are not on IO Thread, then post a task to call CollectNetworkStats on 731 // If we are not on IO Thread, then post a task to call CollectNetworkStats on
614 // IO Thread. 732 // IO Thread.
615 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 733 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
616 BrowserThread::PostTask( 734 BrowserThread::PostTask(
617 BrowserThread::IO, 735 BrowserThread::IO,
618 FROM_HERE, 736 FROM_HERE,
619 base::Bind( 737 base::Bind(
620 &CollectNetworkStats, network_stats_server, io_thread)); 738 &CollectNetworkStats, network_stats_server, io_thread));
621 return; 739 return;
622 } 740 }
623 741
624 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 742 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
625 743
626 // Check that there is a network connection. We get called only if UMA upload 744 // Check that there is a network connection. We get called only if UMA upload
627 // to the server has succeeded. 745 // to the server has succeeded.
628 DCHECK(!net::NetworkChangeNotifier::IsOffline()); 746 DCHECK(!net::NetworkChangeNotifier::IsOffline());
629 747
630 CR_DEFINE_STATIC_LOCAL(scoped_refptr<base::FieldTrial>, trial, ()); 748 CR_DEFINE_STATIC_LOCAL(scoped_refptr<base::FieldTrial>, trial, ());
631 static bool collect_stats = false; 749 static bool collect_stats = false;
632 750
633 static uint32 kTCPTestingPort;
634 static uint32 kUDPTestingPort;
635 static NetworkStats::HistogramPortSelector histogram_port; 751 static NetworkStats::HistogramPortSelector histogram_port;
636 752
637 if (!trial.get()) { 753 if (!trial.get()) {
638 // Set up a field trial to collect network stats for UDP and TCP. 754 // Set up a field trial to collect network stats for UDP and TCP.
639 const base::FieldTrial::Probability kDivisor = 1000; 755 const base::FieldTrial::Probability kDivisor = 1000;
640 756
641 // Enable the connectivity testing for 0.5% of the users in stable channel. 757 // Enable the connectivity testing for 0.5% of the users in stable channel.
642 base::FieldTrial::Probability probability_per_group = 5; 758 base::FieldTrial::Probability probability_per_group = 5;
643 759
644 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 760 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
(...skipping 18 matching lines...) Expand all
663 if (trial->group() == collect_stats_group) 779 if (trial->group() == collect_stats_group)
664 collect_stats = true; 780 collect_stats = true;
665 781
666 if (collect_stats) { 782 if (collect_stats) {
667 // Pick a port randomly from the set of TCP/UDP echo server ports 783 // Pick a port randomly from the set of TCP/UDP echo server ports
668 // specified in |kPorts|. 784 // specified in |kPorts|.
669 histogram_port = static_cast<NetworkStats::HistogramPortSelector>( 785 histogram_port = static_cast<NetworkStats::HistogramPortSelector>(
670 base::RandInt(NetworkStats::PORT_53, NetworkStats::PORT_8080)); 786 base::RandInt(NetworkStats::PORT_53, NetworkStats::PORT_8080));
671 DCHECK_GE(histogram_port, NetworkStats::PORT_53); 787 DCHECK_GE(histogram_port, NetworkStats::PORT_53);
672 DCHECK_LE(histogram_port, NetworkStats::PORT_8080); 788 DCHECK_LE(histogram_port, NetworkStats::PORT_8080);
673 kTCPTestingPort = kPorts[histogram_port];
674 kUDPTestingPort = kPorts[histogram_port];
675 } 789 }
676 } 790 }
677 791
678 if (!collect_stats) 792 if (!collect_stats)
679 return; 793 return;
680 794
681 // Run test kMaxNumberOfTests times. 795 // Run test kMaxNumberOfTests times.
682 const size_t kMaxNumberOfTests = INT_MAX; 796 const size_t kMaxNumberOfTests = INT_MAX;
683 static size_t number_of_tests_done = 0; 797 static size_t number_of_tests_done = 0;
684 if (number_of_tests_done > kMaxNumberOfTests) 798 if (number_of_tests_done > kMaxNumberOfTests)
685 return; 799 return;
686 800
687 ++number_of_tests_done; 801 ++number_of_tests_done;
688 802
689 net::HostResolver* host_resolver = io_thread->globals()->host_resolver.get(); 803 ProxyClient* proxy_client = new ProxyClient(
690 DCHECK(host_resolver); 804 network_stats_server, histogram_port, io_thread);
691 805 proxy_client->ResolveProxy();
692 net::HostPortPair udp_server_address(network_stats_server, kUDPTestingPort);
693
694 UDPStatsClient* small_udp_stats = new UDPStatsClient();
695 small_udp_stats->Start(
696 host_resolver, udp_server_address, histogram_port,
697 kSmallTestBytesToSend, net::CompletionCallback());
698
699 UDPStatsClient* large_udp_stats = new UDPStatsClient();
700 large_udp_stats->Start(
701 host_resolver, udp_server_address, histogram_port,
702 kLargeTestBytesToSend, net::CompletionCallback());
703
704 net::HostPortPair tcp_server_address(network_stats_server, kTCPTestingPort);
705
706 TCPStatsClient* small_tcp_client = new TCPStatsClient();
707 small_tcp_client->Start(
708 host_resolver, tcp_server_address, histogram_port,
709 kSmallTestBytesToSend, net::CompletionCallback());
710
711 TCPStatsClient* large_tcp_client = new TCPStatsClient();
712 large_tcp_client->Start(
713 host_resolver, tcp_server_address, histogram_port,
714 kLargeTestBytesToSend, net::CompletionCallback());
715 } 806 }
716 807
717 } // namespace chrome_browser_net 808 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/net/network_stats.h ('k') | chrome/browser/net/network_stats_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698