| 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" |
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 int rv; | 360 int rv; |
| 361 do { | 361 do { |
| 362 if (!socket_.get()) | 362 if (!socket_.get()) |
| 363 break; | 363 break; |
| 364 | 364 |
| 365 DCHECK(!read_buffer_.get()); | 365 DCHECK(!read_buffer_.get()); |
| 366 | 366 |
| 367 // We release the read_buffer_ in the destructor if there is an error. | 367 // We release the read_buffer_ in the destructor if there is an error. |
| 368 read_buffer_ = new net::IOBuffer(kMaxMessage); | 368 read_buffer_ = new net::IOBuffer(kMaxMessage); |
| 369 | 369 |
| 370 rv = socket_->Read(read_buffer_, kMaxMessage, | 370 rv = socket_->Read( |
| 371 base::Bind(&NetworkStats::OnReadComplete, | 371 read_buffer_.get(), |
| 372 base::Unretained(this))); | 372 kMaxMessage, |
| 373 base::Bind(&NetworkStats::OnReadComplete, base::Unretained(this))); |
| 373 if (rv == net::ERR_IO_PENDING) | 374 if (rv == net::ERR_IO_PENDING) |
| 374 break; | 375 break; |
| 375 | 376 |
| 376 // If we have read all the data then return. | 377 // If we have read all the data then return. |
| 377 if (ReadComplete(rv)) | 378 if (ReadComplete(rv)) |
| 378 break; | 379 break; |
| 379 } while (rv > 0); | 380 } while (rv > 0); |
| 380 } | 381 } |
| 381 | 382 |
| 382 int NetworkStats::SendData() { | 383 int NetworkStats::SendData() { |
| 383 DCHECK(bytes_to_send_); // We should have data to send. | 384 DCHECK(bytes_to_send_); // We should have data to send. |
| 384 do { | 385 do { |
| 385 if (!write_buffer_.get()) { | 386 if (!write_buffer_.get()) { |
| 386 // Send a new packet. | 387 // Send a new packet. |
| 387 scoped_refptr<net::IOBufferWithSize> buffer( | 388 scoped_refptr<net::IOBufferWithSize> buffer( |
| 388 new net::IOBufferWithSize(bytes_to_send_)); | 389 new net::IOBufferWithSize(bytes_to_send_)); |
| 389 GetEchoRequest(buffer); | 390 GetEchoRequest(buffer.get()); |
| 390 write_buffer_ = new net::DrainableIOBuffer(buffer, bytes_to_send_); | 391 write_buffer_ = new net::DrainableIOBuffer(buffer.get(), bytes_to_send_); |
| 391 | 392 |
| 392 // As soon as we write, a read could happen. Thus update all the book | 393 // As soon as we write, a read could happen. Thus update all the book |
| 393 // keeping data. | 394 // keeping data. |
| 394 bytes_to_read_ += ReceivingPacketSize(); | 395 bytes_to_read_ += ReceivingPacketSize(); |
| 395 ++packets_sent_; | 396 ++packets_sent_; |
| 396 if (packets_sent_ >= packets_to_send_) | 397 if (packets_sent_ >= packets_to_send_) |
| 397 sending_complete_ = true; | 398 sending_complete_ = true; |
| 398 | 399 |
| 399 uint32 packet_index = packet_number_ - base_packet_number_; | 400 uint32 packet_index = packet_number_ - base_packet_number_; |
| 400 DCHECK_GE(packet_index, 0u); | 401 DCHECK_GE(packet_index, 0u); |
| 401 DCHECK_LT(packet_index, packet_status_.size()); | 402 DCHECK_LT(packet_index, packet_status_.size()); |
| 402 packet_status_[packet_index].start_time_ = base::TimeTicks::Now(); | 403 packet_status_[packet_index].start_time_ = base::TimeTicks::Now(); |
| 403 } | 404 } |
| 404 | 405 |
| 405 if (!socket_.get()) | 406 if (!socket_.get()) |
| 406 return net::ERR_UNEXPECTED; | 407 return net::ERR_UNEXPECTED; |
| 407 int rv = socket_->Write(write_buffer_, | 408 int rv = socket_->Write( |
| 408 write_buffer_->BytesRemaining(), | 409 write_buffer_.get(), |
| 409 base::Bind(&NetworkStats::OnWriteComplete, | 410 write_buffer_->BytesRemaining(), |
| 410 base::Unretained(this))); | 411 base::Bind(&NetworkStats::OnWriteComplete, base::Unretained(this))); |
| 411 if (rv < 0) | 412 if (rv < 0) |
| 412 return rv; | 413 return rv; |
| 413 DidSendData(rv); | 414 DidSendData(rv); |
| 414 } while (bytes_to_send_); | 415 } while (bytes_to_send_); |
| 415 return net::OK; | 416 return net::OK; |
| 416 } | 417 } |
| 417 | 418 |
| 418 uint32 NetworkStats::SendingPacketSize() const { | 419 uint32 NetworkStats::SendingPacketSize() const { |
| 419 return kVersionLength + kChecksumLength + kPayloadSizeLength + load_size_; | 420 return kVersionLength + kChecksumLength + kPayloadSizeLength + load_size_; |
| 420 } | 421 } |
| (...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 udp_stats_client->Start( | 1013 udp_stats_client->Start( |
| 1013 host_resolver, server_address, histogram_port, has_proxy_server, | 1014 host_resolver, server_address, histogram_port, has_proxy_server, |
| 1014 kLargeTestBytesToSend, kMaximumSequentialPackets, | 1015 kLargeTestBytesToSend, kMaximumSequentialPackets, |
| 1015 net::CompletionCallback()); | 1016 net::CompletionCallback()); |
| 1016 } | 1017 } |
| 1017 break; | 1018 break; |
| 1018 } | 1019 } |
| 1019 } | 1020 } |
| 1020 | 1021 |
| 1021 } // namespace chrome_browser_net | 1022 } // namespace chrome_browser_net |
| OLD | NEW |