OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |