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

Side by Side Diff: net/quic/chromium/quic_chromium_packet_writer.cc

Issue 2329853002: Introduces ability for session to wait on a migration trigger for a new (Closed)
Patch Set: network notifications handled Created 4 years, 3 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
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698