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

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, 7 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/test_completion_callback.h" 23 #include "net/base/test_completion_callback.h"
24 #include "net/proxy/proxy_service.h"
23 #include "net/socket/tcp_client_socket.h" 25 #include "net/socket/tcp_client_socket.h"
24 #include "net/udp/udp_client_socket.h" 26 #include "net/udp/udp_client_socket.h"
25 #include "net/udp/udp_server_socket.h" 27 #include "net/udp/udp_server_socket.h"
26 28
27 using content::BrowserThread; 29 using content::BrowserThread;
28 30
29 namespace chrome_browser_net { 31 namespace chrome_browser_net {
30 32
31 // This specifies the number of bytes to be sent to the TCP/UDP servers as part 33 // This specifies the number of bytes to be sent to the TCP/UDP servers as part
32 // of small packet size test. 34 // of small packet size test.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 88
87 // Maximum number of packets that can be sent to the server for packet loss 89 // Maximum number of packets that can be sent to the server for packet loss
88 // testing. 90 // testing.
89 static const uint32 kMaximumPackets = 6; 91 static const uint32 kMaximumPackets = 6;
90 92
91 // NetworkStats methods and members. 93 // NetworkStats methods and members.
92 NetworkStats::NetworkStats() 94 NetworkStats::NetworkStats()
93 : load_size_(0), 95 : load_size_(0),
94 bytes_to_read_(0), 96 bytes_to_read_(0),
95 bytes_to_send_(0), 97 bytes_to_send_(0),
98 has_proxy_server_(false),
96 packets_to_send_(0), 99 packets_to_send_(0),
97 packets_sent_(0), 100 packets_sent_(0),
98 base_packet_number_(0), 101 base_packet_number_(0),
99 packets_received_mask_(0), 102 packets_received_mask_(0),
100 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { 103 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
101 } 104 }
102 105
103 NetworkStats::~NetworkStats() { 106 NetworkStats::~NetworkStats() {
104 socket_.reset(); 107 socket_.reset();
105 } 108 }
106 109
107 bool NetworkStats::Start(net::HostResolver* host_resolver, 110 bool NetworkStats::Start(net::HostResolver* host_resolver,
108 const net::HostPortPair& server_host_port_pair, 111 const net::HostPortPair& server_host_port_pair,
109 HistogramPortSelector histogram_port, 112 HistogramPortSelector histogram_port,
113 bool has_proxy_server,
110 uint32 bytes_to_send, 114 uint32 bytes_to_send,
111 uint32 packets_to_send, 115 uint32 packets_to_send,
112 const net::CompletionCallback& finished_callback) { 116 const net::CompletionCallback& finished_callback) {
117 DCHECK(host_resolver);
113 DCHECK(bytes_to_send); // We should have data to send. 118 DCHECK(bytes_to_send); // We should have data to send.
114 DCHECK_LE(packets_to_send, kMaximumPackets); 119 DCHECK_LE(packets_to_send, kMaximumPackets);
115 120
116 Initialize(bytes_to_send, histogram_port, packets_to_send, finished_callback); 121 Initialize(bytes_to_send,
122 histogram_port,
123 has_proxy_server,
124 packets_to_send,
125 finished_callback);
117 126
118 net::HostResolver::RequestInfo request(server_host_port_pair); 127 net::HostResolver::RequestInfo request(server_host_port_pair);
119 int rv = host_resolver->Resolve( 128 int rv = host_resolver->Resolve(
120 request, &addresses_, 129 request, &addresses_,
121 base::Bind(&NetworkStats::OnResolveComplete, 130 base::Bind(&NetworkStats::OnResolveComplete,
122 base::Unretained(this)), 131 base::Unretained(this)),
123 NULL, net::BoundNetLog()); 132 NULL, net::BoundNetLog());
124 if (rv == net::ERR_IO_PENDING) 133 if (rv == net::ERR_IO_PENDING)
125 return true; 134 return true;
126 return DoConnect(rv); 135 return DoConnect(rv);
127 } 136 }
128 137
129 void NetworkStats::Initialize( 138 void NetworkStats::Initialize(
130 uint32 bytes_to_send, 139 uint32 bytes_to_send,
131 HistogramPortSelector histogram_port, 140 HistogramPortSelector histogram_port,
141 bool has_proxy_server,
132 uint32 packets_to_send, 142 uint32 packets_to_send,
133 const net::CompletionCallback& finished_callback) { 143 const net::CompletionCallback& finished_callback) {
134 DCHECK(bytes_to_send); // We should have data to send. 144 DCHECK(bytes_to_send); // We should have data to send.
135 DCHECK(packets_to_send); // We should send at least 1 packet. 145 DCHECK(packets_to_send); // We should send at least 1 packet.
136 DCHECK_LE(bytes_to_send, kLargeTestBytesToSend); 146 DCHECK_LE(bytes_to_send, kLargeTestBytesToSend);
137 147
138 load_size_ = bytes_to_send; 148 load_size_ = bytes_to_send;
139 packets_to_send_ = packets_to_send; 149 packets_to_send_ = packets_to_send;
140 150
141 histogram_port_ = histogram_port; 151 histogram_port_ = histogram_port;
152 has_proxy_server_ = has_proxy_server;
142 finished_callback_ = finished_callback; 153 finished_callback_ = finished_callback;
143 } 154 }
144 155
145 uint32 SendingPacketSize(uint32 load_size) { 156 uint32 SendingPacketSize(uint32 load_size) {
146 return kVersionLength + kChecksumLength + kPayloadSizeLength + load_size; 157 return kVersionLength + kChecksumLength + kPayloadSizeLength + load_size;
147 } 158 }
148 159
149 uint32 ReceivingPacketSize(uint32 load_size) { 160 uint32 ReceivingPacketSize(uint32 load_size) {
150 return kVersionLength + kChecksumLength + kPayloadSizeLength + kKeyLength + 161 return kVersionLength + kChecksumLength + kPayloadSizeLength + kKeyLength +
151 load_size; 162 load_size;
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 if (result == net::OK) { 541 if (result == net::OK) {
531 *rtt_histogram_name = base::StringPrintf( 542 *rtt_histogram_name = base::StringPrintf(
532 "NetConnectivity.%s.Success.%d.%s.RTT", 543 "NetConnectivity.%s.Success.%d.%s.RTT",
533 protocol_string, 544 protocol_string,
534 kPorts[port], 545 kPorts[port],
535 load_size_string); 546 load_size_string);
536 } 547 }
537 548
538 // Build "NetConnectivity.<protocol>.Status.<port>.<load_size>" histogram 549 // Build "NetConnectivity.<protocol>.Status.<port>.<load_size>" histogram
539 // name. Total number of histograms are 2*5*2. 550 // name. Total number of histograms are 2*5*2.
540 *status_histogram_name = base::StringPrintf( 551 *status_histogram_name = base::StringPrintf(
541 "NetConnectivity.%s.Status.%d.%s", 552 "NetConnectivity.%s.Status.%d.%s",
542 protocol_string, 553 protocol_string,
543 kPorts[port], 554 kPorts[port],
544 load_size_string); 555 load_size_string);
545 556
546 // Build "NetConnectivity.<protocol>.PacketLoss.<port>.<load_size>" histogram 557 // Build "NetConnectivity.<protocol>.PacketLoss.<port>.<load_size>" histogram
547 // name. Total number of histograms are 5 (because we do this test for UDP 558 // name. Total number of histograms are 5 (because we do this test for UDP
548 // only). 559 // only).
549 *packet_loss_histogram_name = base::StringPrintf( 560 *packet_loss_histogram_name = base::StringPrintf(
550 "NetConnectivity.%s.PacketLoss6.%d.%s", 561 "NetConnectivity.%s.PacketLoss6.%d.%s",
551 protocol_string, 562 protocol_string,
552 kPorts[port], 563 kPorts[port],
553 load_size_string); 564 load_size_string);
554 } 565 }
555 566
556 void NetworkStats::RecordHistograms(const ProtocolValue& protocol, 567 void NetworkStats::RecordHistograms(const ProtocolValue& protocol,
557 const Status& status, 568 const Status& status,
558 int result) { 569 int result) {
559 base::TimeDelta duration = base::TimeTicks::Now() - start_time(); 570 base::TimeDelta duration = base::TimeTicks::Now() - start_time();
560 571
561 std::string rtt_histogram_name; 572 std::string rtt_histogram_name;
562 std::string status_histogram_name; 573 std::string status_histogram_name;
563 std::string packet_loss_histogram_name; 574 std::string packet_loss_histogram_name;
564 GetHistogramNames(protocol, 575 GetHistogramNames(protocol,
565 histogram_port_, 576 histogram_port_,
566 load_size_, 577 load_size_,
567 result, 578 result,
568 &rtt_histogram_name, 579 &rtt_histogram_name,
569 &status_histogram_name, 580 &status_histogram_name,
570 &packet_loss_histogram_name); 581 &packet_loss_histogram_name);
571 582
572 // For packet loss test, just record packet loss data. 583 size_t histogram_count = has_proxy_server_ ? 1 : 2;
jar (doing other things) 2012/05/10 00:02:02 nit: add comment: // If we are running without a p
ramant (doing other things) 2012/05/10 02:37:35 Done.
573 if (packets_to_send_ > 1) { 584 for (size_t i = 0; i < histogram_count; i++) {
574 base::Histogram* packet_loss_histogram = base::LinearHistogram::FactoryGet( 585 // For packet loss test, just record packet loss data.
575 packet_loss_histogram_name, 586 if (packets_to_send_ > 1) {
576 1, 587 base::Histogram* histogram = base::LinearHistogram::FactoryGet(
577 2 << kMaximumPackets, 588 packet_loss_histogram_name,
578 (2 << kMaximumPackets) + 1, 589 1,
590 2 << kMaximumPackets,
591 (2 << kMaximumPackets) + 1,
592 base::Histogram::kUmaTargetedHistogramFlag);
593 histogram->Add(packets_received_mask_);
594 packet_loss_histogram_name.append(".NoProxy");
595 continue;
jar (doing other things) 2012/05/10 00:02:02 nit: Add comment: Packet loss histograms don't mea
ramant (doing other things) 2012/05/10 02:37:35 Done.
596 }
597
598 if (result == net::OK) {
599 base::Histogram* rtt_histogram = base::Histogram::FactoryTimeGet(
600 rtt_histogram_name,
601 base::TimeDelta::FromMilliseconds(10),
602 base::TimeDelta::FromSeconds(60), 50,
603 base::Histogram::kUmaTargetedHistogramFlag);
604 rtt_histogram->AddTime(duration);
605 rtt_histogram_name.append(".NoProxy");
606 }
607
608 base::Histogram* status_histogram = base::LinearHistogram::FactoryGet(
609 status_histogram_name, 1, STATUS_MAX, STATUS_MAX+1,
579 base::Histogram::kUmaTargetedHistogramFlag); 610 base::Histogram::kUmaTargetedHistogramFlag);
580 packet_loss_histogram->Add(packets_received_mask_); 611 status_histogram->Add(status);
581 return; 612 status_histogram_name.append(".NoProxy");
582 } 613 }
583
584 if (result == net::OK) {
585 base::Histogram* rtt_histogram = base::Histogram::FactoryTimeGet(
586 rtt_histogram_name,
587 base::TimeDelta::FromMilliseconds(10),
588 base::TimeDelta::FromSeconds(60), 50,
589 base::Histogram::kUmaTargetedHistogramFlag);
590 rtt_histogram->AddTime(duration);
591 }
592
593 base::Histogram* status_histogram = base::LinearHistogram::FactoryGet(
594 status_histogram_name, 1, STATUS_MAX, STATUS_MAX+1,
595 base::Histogram::kUmaTargetedHistogramFlag);
596 status_histogram->Add(status);
597 } 614 }
598 615
599 // UDPStatsClient methods and members. 616 // UDPStatsClient methods and members.
600 UDPStatsClient::UDPStatsClient() 617 UDPStatsClient::UDPStatsClient()
601 : NetworkStats() { 618 : NetworkStats() {
602 } 619 }
603 620
604 UDPStatsClient::~UDPStatsClient() { 621 UDPStatsClient::~UDPStatsClient() {
605 } 622 }
606 623
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 724
708 // Disconnect the socket so that there are no more IO operations. 725 // Disconnect the socket so that there are no more IO operations.
709 net::TCPClientSocket* tcp_socket = 726 net::TCPClientSocket* tcp_socket =
710 static_cast<net::TCPClientSocket*>(socket()); 727 static_cast<net::TCPClientSocket*>(socket());
711 if (tcp_socket) 728 if (tcp_socket)
712 tcp_socket->Disconnect(); 729 tcp_socket->Disconnect();
713 730
714 delete this; 731 delete this;
715 } 732 }
716 733
734 // ProxyDetector methods and members.
735 ProxyDetector::ProxyDetector(net::ProxyService* proxy_service,
736 const net::HostPortPair& server_address,
737 OnResolvedCallback callback)
738 : proxy_service_(proxy_service),
739 server_address_(server_address),
740 callback_(callback),
741 has_pending_proxy_resolution_(false) {
742 }
743
744 ProxyDetector::~ProxyDetector() {
745 CHECK(!has_pending_proxy_resolution_);
746 }
747
748 void ProxyDetector::StartResolveProxy() {
749 std::string url =
750 base::StringPrintf("https://%s", server_address_.ToString().c_str());
751 GURL gurl(url);
752
753 has_pending_proxy_resolution_ = true;
754 DCHECK(proxy_service_);
755 int rv = proxy_service_->ResolveProxy(
756 gurl,
757 &proxy_info_,
758 base::Bind(&ProxyDetector::OnResolveProxyComplete,
759 base::Unretained(this)),
760 NULL,
761 net::BoundNetLog());
762 if (rv != net::ERR_IO_PENDING)
763 OnResolveProxyComplete(rv);
764 }
765
766 void ProxyDetector::OnResolveProxyComplete(int result) {
767 has_pending_proxy_resolution_ = false;
768 bool has_proxy_server = (result == net::OK &&
769 proxy_info_.proxy_server().is_valid() &&
770 !proxy_info_.proxy_server().is_direct());
771
772 callback_.Run(has_proxy_server);
jar (doing other things) 2012/05/10 00:02:02 As per your suggestion: Perchance this should be r
ramant (doing other things) 2012/05/10 02:37:35 Done.
773
774 // TODO(rtenneti): Will we leak if ProxtResolve is cancelled (or proxy
jar (doing other things) 2012/05/10 00:02:02 nit: typo: ProxtResolve --> ProxyResolve
ramant (doing other things) 2012/05/10 02:37:35 Done.
775 // resolution never completes).
776 delete this;
777 }
778
717 // static 779 // static
718 void CollectNetworkStats(const std::string& network_stats_server, 780 void CollectNetworkStats(const std::string& network_stats_server,
719 IOThread* io_thread) { 781 IOThread* io_thread) {
720 if (network_stats_server.empty()) 782 if (network_stats_server.empty())
721 return; 783 return;
722 784
723 // If we are not on IO Thread, then post a task to call CollectNetworkStats on 785 // If we are not on IO Thread, then post a task to call CollectNetworkStats on
724 // IO Thread. 786 // IO Thread.
725 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 787 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
726 BrowserThread::PostTask( 788 BrowserThread::PostTask(
727 BrowserThread::IO, 789 BrowserThread::IO,
728 FROM_HERE, 790 FROM_HERE,
729 base::Bind( 791 base::Bind(
730 &CollectNetworkStats, network_stats_server, io_thread)); 792 &CollectNetworkStats, network_stats_server, io_thread));
731 return; 793 return;
732 } 794 }
733 795
734 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 796 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
735 797
736 // Check that there is a network connection. We get called only if UMA upload 798 // Check that there is a network connection. We get called only if UMA upload
737 // to the server has succeeded. 799 // to the server has succeeded.
738 DCHECK(!net::NetworkChangeNotifier::IsOffline()); 800 DCHECK(!net::NetworkChangeNotifier::IsOffline());
739 801
740 CR_DEFINE_STATIC_LOCAL(scoped_refptr<base::FieldTrial>, trial, ()); 802 CR_DEFINE_STATIC_LOCAL(scoped_refptr<base::FieldTrial>, trial, ());
741 static bool collect_stats = false; 803 static bool collect_stats = false;
742
743 static uint32 port;
744 static NetworkStats::HistogramPortSelector histogram_port; 804 static NetworkStats::HistogramPortSelector histogram_port;
745 805
746 if (!trial.get()) { 806 if (!trial.get()) {
747 // Set up a field trial to collect network stats for UDP and TCP. 807 // Set up a field trial to collect network stats for UDP and TCP.
748 const base::FieldTrial::Probability kDivisor = 1000; 808 const base::FieldTrial::Probability kDivisor = 1000;
749 809
750 // Enable the connectivity testing for 0.5% of the users in stable channel. 810 // Enable the connectivity testing for 0.5% of the users in stable channel.
751 base::FieldTrial::Probability probability_per_group = 5; 811 base::FieldTrial::Probability probability_per_group = 5;
752 812
753 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 813 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
(...skipping 18 matching lines...) Expand all
772 if (trial->group() == collect_stats_group) 832 if (trial->group() == collect_stats_group)
773 collect_stats = true; 833 collect_stats = true;
774 834
775 if (collect_stats) { 835 if (collect_stats) {
776 // Pick a port randomly from the set of TCP/UDP echo server ports 836 // Pick a port randomly from the set of TCP/UDP echo server ports
777 // specified in |kPorts|. 837 // specified in |kPorts|.
778 histogram_port = static_cast<NetworkStats::HistogramPortSelector>( 838 histogram_port = static_cast<NetworkStats::HistogramPortSelector>(
779 base::RandInt(NetworkStats::PORT_53, NetworkStats::PORT_8080)); 839 base::RandInt(NetworkStats::PORT_53, NetworkStats::PORT_8080));
780 DCHECK_GE(histogram_port, NetworkStats::PORT_53); 840 DCHECK_GE(histogram_port, NetworkStats::PORT_53);
781 DCHECK_LE(histogram_port, NetworkStats::PORT_8080); 841 DCHECK_LE(histogram_port, NetworkStats::PORT_8080);
782 port = kPorts[histogram_port];
783 } 842 }
784 } 843 }
785 844
786 if (!collect_stats) 845 if (!collect_stats)
787 return; 846 return;
788 847
789 // Run test kMaxNumberOfTests times. 848 // Run test kMaxNumberOfTests times.
790 const size_t kMaxNumberOfTests = INT_MAX; 849 const size_t kMaxNumberOfTests = INT_MAX;
791 static size_t number_of_tests_done = 0; 850 static size_t number_of_tests_done = 0;
792 if (number_of_tests_done > kMaxNumberOfTests) 851 if (number_of_tests_done > kMaxNumberOfTests)
793 return; 852 return;
794 853
795 ++number_of_tests_done; 854 ++number_of_tests_done;
796 855
797 net::HostResolver* host_resolver = io_thread->globals()->host_resolver.get(); 856 net::HostResolver* host_resolver = io_thread->globals()->host_resolver.get();
798 DCHECK(host_resolver); 857 DCHECK(host_resolver);
799 858
800 net::HostPortPair server_address(network_stats_server, port); 859 net::HostPortPair server_address(network_stats_server,
860 kPorts[histogram_port]);
801 861
862 net::ProxyService* proxy_service =
863 io_thread->globals()->system_proxy_service.get();
864 DCHECK(proxy_service);
865
866 ProxyDetector::OnResolvedCallback callback =
867 base::Bind(&StartNetworkStatsTest,
868 host_resolver, server_address, histogram_port);
869
870 ProxyDetector* proxy_client = new ProxyDetector(
871 proxy_service, server_address, callback);
872 proxy_client->StartResolveProxy();
873 }
874
875 // static
876 void StartNetworkStatsTest(net::HostResolver* host_resolver,
877 const net::HostPortPair& server_address,
878 NetworkStats::HistogramPortSelector histogram_port,
879 bool has_proxy_server) {
802 int experiment_to_run = base::RandInt(1, 5); 880 int experiment_to_run = base::RandInt(1, 5);
803 switch (experiment_to_run) { 881 switch (experiment_to_run) {
804 case 1: 882 case 1:
805 { 883 {
806 UDPStatsClient* small_udp_stats = new UDPStatsClient(); 884 UDPStatsClient* small_udp_stats = new UDPStatsClient();
807 small_udp_stats->Start( 885 small_udp_stats->Start(
808 host_resolver, server_address, histogram_port, 886 host_resolver, server_address, histogram_port, has_proxy_server,
809 kSmallTestBytesToSend, 1, net::CompletionCallback()); 887 kSmallTestBytesToSend, 1, net::CompletionCallback());
810 } 888 }
811 break; 889 break;
812 890
813 case 2: 891 case 2:
814 { 892 {
815 UDPStatsClient* large_udp_stats = new UDPStatsClient(); 893 UDPStatsClient* large_udp_stats = new UDPStatsClient();
816 large_udp_stats->Start( 894 large_udp_stats->Start(
817 host_resolver, server_address, histogram_port, 895 host_resolver, server_address, histogram_port, has_proxy_server,
818 kLargeTestBytesToSend, 1, net::CompletionCallback()); 896 kLargeTestBytesToSend, 1, net::CompletionCallback());
819 } 897 }
820 break; 898 break;
821 899
822 case 3: 900 case 3:
823 { 901 {
824 TCPStatsClient* small_tcp_client = new TCPStatsClient(); 902 TCPStatsClient* small_tcp_client = new TCPStatsClient();
825 small_tcp_client->Start( 903 small_tcp_client->Start(
826 host_resolver, server_address, histogram_port, 904 host_resolver, server_address, histogram_port, has_proxy_server,
827 kSmallTestBytesToSend, 1, net::CompletionCallback()); 905 kSmallTestBytesToSend, 1, net::CompletionCallback());
828 } 906 }
829 break; 907 break;
830 908
831 case 4: 909 case 4:
832 { 910 {
833 TCPStatsClient* large_tcp_client = new TCPStatsClient(); 911 TCPStatsClient* large_tcp_client = new TCPStatsClient();
834 large_tcp_client->Start( 912 large_tcp_client->Start(
835 host_resolver, server_address, histogram_port, 913 host_resolver, server_address, histogram_port, has_proxy_server,
836 kLargeTestBytesToSend, 1, net::CompletionCallback()); 914 kLargeTestBytesToSend, 1, net::CompletionCallback());
837 } 915 }
838 break; 916 break;
839 917
840 case 5: 918 case 5:
841 { 919 {
842 UDPStatsClient* packet_loss_udp_stats = new UDPStatsClient(); 920 UDPStatsClient* packet_loss_udp_stats = new UDPStatsClient();
843 packet_loss_udp_stats->Start( 921 packet_loss_udp_stats->Start(
844 host_resolver, server_address, histogram_port, 922 host_resolver, server_address, histogram_port, has_proxy_server,
845 kLargeTestBytesToSend, kMaximumPackets, net::CompletionCallback()); 923 kLargeTestBytesToSend, kMaximumPackets, net::CompletionCallback());
846 } 924 }
847 break; 925 break;
848 } 926 }
849 } 927 }
850 928
851 } // namespace chrome_browser_net 929 } // 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