OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "net/quic/chromium/quic_chromium_packet_writer.h" | 5 #include "net/quic/chromium/quic_chromium_packet_writer.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 return WritePacketToSocket(buf); | 39 return WritePacketToSocket(buf); |
40 } | 40 } |
41 | 41 |
42 WriteResult QuicChromiumPacketWriter::WritePacketToSocket( | 42 WriteResult QuicChromiumPacketWriter::WritePacketToSocket( |
43 scoped_refptr<StringIOBuffer> packet) { | 43 scoped_refptr<StringIOBuffer> packet) { |
44 base::TimeTicks now = base::TimeTicks::Now(); | 44 base::TimeTicks now = base::TimeTicks::Now(); |
45 int rv = socket_->Write(packet.get(), packet.get()->size(), | 45 int rv = socket_->Write(packet.get(), packet.get()->size(), |
46 base::Bind(&QuicChromiumPacketWriter::OnWriteComplete, | 46 base::Bind(&QuicChromiumPacketWriter::OnWriteComplete, |
47 weak_factory_.GetWeakPtr())); | 47 weak_factory_.GetWeakPtr())); |
48 | 48 |
| 49 DLOG(INFO) << "socket returned: " << rv; |
49 if (rv < 0 && rv != ERR_IO_PENDING && delegate_ != nullptr) { | 50 if (rv < 0 && rv != ERR_IO_PENDING && delegate_ != nullptr) { |
50 // If write error, then call delegate's HandleWriteError, which | 51 // If write error, then call delegate's HandleWriteError, which |
51 // may be able to migrate and rewrite packet on a new socket. | 52 // may be able to migrate and rewrite packet on a new socket. |
52 // HandleWriteError returns the outcome of that rewrite attempt. | 53 // HandleWriteError returns the outcome of that rewrite attempt. |
53 rv = delegate_->HandleWriteError(rv, packet); | 54 rv = delegate_->HandleWriteError(rv, packet); |
54 } | 55 } |
55 | 56 |
56 WriteStatus status = WRITE_STATUS_OK; | 57 WriteStatus status = WRITE_STATUS_OK; |
57 if (rv < 0) { | 58 if (rv < 0) { |
58 if (rv != ERR_IO_PENDING) { | 59 if (rv != ERR_IO_PENDING) { |
59 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.WriteError", -rv); | 60 UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.WriteError", -rv); |
60 status = WRITE_STATUS_ERROR; | 61 status = WRITE_STATUS_ERROR; |
61 } else { | 62 } else { |
| 63 DLOG(INFO) << "***async completion."; |
62 status = WRITE_STATUS_BLOCKED; | 64 status = WRITE_STATUS_BLOCKED; |
63 write_blocked_ = true; | 65 write_blocked_ = true; |
64 packet_ = packet; | 66 packet_ = packet; |
65 } | 67 } |
66 } | 68 } |
67 | 69 |
68 base::TimeDelta delta = base::TimeTicks::Now() - now; | 70 base::TimeDelta delta = base::TimeTicks::Now() - now; |
69 if (status == WRITE_STATUS_OK) { | 71 if (status == WRITE_STATUS_OK) { |
70 UMA_HISTOGRAM_TIMES("Net.QuicSession.PacketWriteTime.Synchronous", delta); | 72 UMA_HISTOGRAM_TIMES("Net.QuicSession.PacketWriteTime.Synchronous", delta); |
71 } else if (status == WRITE_STATUS_BLOCKED) { | 73 } else if (status == WRITE_STATUS_BLOCKED) { |
(...skipping 14 matching lines...) Expand all Loading... |
86 } | 88 } |
87 | 89 |
88 void QuicChromiumPacketWriter::SetWritable() { | 90 void QuicChromiumPacketWriter::SetWritable() { |
89 write_blocked_ = false; | 91 write_blocked_ = false; |
90 } | 92 } |
91 | 93 |
92 void QuicChromiumPacketWriter::OnWriteComplete(int rv) { | 94 void QuicChromiumPacketWriter::OnWriteComplete(int rv) { |
93 DCHECK_NE(rv, ERR_IO_PENDING); | 95 DCHECK_NE(rv, ERR_IO_PENDING); |
94 DCHECK(delegate_) << "Uninitialized delegate."; | 96 DCHECK(delegate_) << "Uninitialized delegate."; |
95 write_blocked_ = false; | 97 write_blocked_ = false; |
| 98 DLOG(INFO) << "Write completed asynchronously: " << rv; |
96 if (rv < 0) { | 99 if (rv < 0) { |
97 // If write error, then call delegate's HandleWriteError, which | 100 // If write error, then call delegate's HandleWriteError, which |
98 // may be able to migrate and rewrite packet on a new socket. | 101 // may be able to migrate and rewrite packet on a new socket. |
99 // HandleWriteError returns the outcome of that rewrite attempt. | 102 // HandleWriteError returns the outcome of that rewrite attempt. |
100 rv = delegate_->HandleWriteError(rv, packet_); | 103 rv = delegate_->HandleWriteError(rv, packet_); |
101 packet_ = nullptr; | 104 packet_ = nullptr; |
102 if (rv == ERR_IO_PENDING) | 105 if (rv == ERR_IO_PENDING) |
103 return; | 106 return; |
104 } | 107 } |
105 | 108 |
106 if (rv < 0) | 109 if (rv < 0) |
107 delegate_->OnWriteError(rv); | 110 delegate_->OnWriteError(rv); |
108 else | 111 else |
109 delegate_->OnWriteUnblocked(); | 112 delegate_->OnWriteUnblocked(); |
110 } | 113 } |
111 | 114 |
112 QuicByteCount QuicChromiumPacketWriter::GetMaxPacketSize( | 115 QuicByteCount QuicChromiumPacketWriter::GetMaxPacketSize( |
113 const IPEndPoint& peer_address) const { | 116 const IPEndPoint& peer_address) const { |
114 return kMaxPacketSize; | 117 return kMaxPacketSize; |
115 } | 118 } |
116 | 119 |
117 } // namespace net | 120 } // namespace net |
OLD | NEW |