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

Side by Side Diff: net/socket/tcp_socket_win.cc

Issue 901773002: Adding instrumentation to locate the source of jankiness. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « net/socket/tcp_client_socket.cc ('k') | net/udp/udp_socket_win.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 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/socket/tcp_socket.h" 5 #include "net/socket/tcp_socket.h"
6 #include "net/socket/tcp_socket_win.h" 6 #include "net/socket/tcp_socket_win.h"
7 7
8 #include <mstcpip.h> 8 #include <mstcpip.h>
9 9
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 // We grab an extra reference because there is an IO operation in progress. 243 // We grab an extra reference because there is an IO operation in progress.
244 // Balanced in WriteDelegate::OnObjectSignaled(). 244 // Balanced in WriteDelegate::OnObjectSignaled().
245 AddRef(); 245 AddRef();
246 write_watcher_.StartWatching(write_overlapped_.hEvent, &writer_); 246 write_watcher_.StartWatching(write_overlapped_.hEvent, &writer_);
247 } 247 }
248 248
249 void TCPSocketWin::Core::ReadDelegate::OnObjectSignaled(HANDLE object) { 249 void TCPSocketWin::Core::ReadDelegate::OnObjectSignaled(HANDLE object) {
250 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed. 250 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
251 tracked_objects::ScopedTracker tracking_profile( 251 tracked_objects::ScopedTracker tracking_profile(
252 FROM_HERE_WITH_EXPLICIT_FUNCTION( 252 FROM_HERE_WITH_EXPLICIT_FUNCTION(
253 "TCPSocketWin_Core_ReadDelegate_OnObjectSignaled")); 253 "418183 TCPSocketWin::Core::ReadDelegate::OnObjectSignaled"));
254 254
255 DCHECK_EQ(object, core_->read_overlapped_.hEvent); 255 DCHECK_EQ(object, core_->read_overlapped_.hEvent);
256 if (core_->socket_) { 256 if (core_->socket_) {
257 if (core_->socket_->waiting_connect_) 257 if (core_->socket_->waiting_connect_)
258 core_->socket_->DidCompleteConnect(); 258 core_->socket_->DidCompleteConnect();
259 else 259 else
260 core_->socket_->DidSignalRead(); 260 core_->socket_->DidSignalRead();
261 } 261 }
262 262
263 core_->Release(); 263 core_->Release();
264 } 264 }
265 265
266 void TCPSocketWin::Core::WriteDelegate::OnObjectSignaled( 266 void TCPSocketWin::Core::WriteDelegate::OnObjectSignaled(
267 HANDLE object) { 267 HANDLE object) {
268 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed. 268 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
269 tracked_objects::ScopedTracker tracking_profile( 269 tracked_objects::ScopedTracker tracking_profile(
270 FROM_HERE_WITH_EXPLICIT_FUNCTION( 270 FROM_HERE_WITH_EXPLICIT_FUNCTION(
271 "TCPSocketWin_Core_WriteDelegate_OnObjectSignaled")); 271 "418183 TCPSocketWin::Core::WriteDelegate::OnObjectSignaled"));
272 272
273 DCHECK_EQ(object, core_->write_overlapped_.hEvent); 273 DCHECK_EQ(object, core_->write_overlapped_.hEvent);
274 if (core_->socket_) 274 if (core_->socket_)
275 core_->socket_->DidCompleteWrite(); 275 core_->socket_->DidCompleteWrite();
276 276
277 core_->Release(); 277 core_->Release();
278 } 278 }
279 279
280 //----------------------------------------------------------------------------- 280 //-----------------------------------------------------------------------------
281 281
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 *socket = tcp_socket.Pass(); 767 *socket = tcp_socket.Pass();
768 *address = ip_end_point; 768 *address = ip_end_point;
769 net_log_.EndEvent(NetLog::TYPE_TCP_ACCEPT, 769 net_log_.EndEvent(NetLog::TYPE_TCP_ACCEPT,
770 CreateNetLogIPEndPointCallback(&ip_end_point)); 770 CreateNetLogIPEndPointCallback(&ip_end_point));
771 return OK; 771 return OK;
772 } 772 }
773 773
774 void TCPSocketWin::OnObjectSignaled(HANDLE object) { 774 void TCPSocketWin::OnObjectSignaled(HANDLE object) {
775 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed. 775 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
776 tracked_objects::ScopedTracker tracking_profile( 776 tracked_objects::ScopedTracker tracking_profile(
777 FROM_HERE_WITH_EXPLICIT_FUNCTION("TCPSocketWin_OnObjectSignaled")); 777 FROM_HERE_WITH_EXPLICIT_FUNCTION(
778 "418383 TCPSocketWin::OnObjectSignaled"));
778 779
779 WSANETWORKEVENTS ev; 780 WSANETWORKEVENTS ev;
780 if (WSAEnumNetworkEvents(socket_, accept_event_, &ev) == SOCKET_ERROR) { 781 if (WSAEnumNetworkEvents(socket_, accept_event_, &ev) == SOCKET_ERROR) {
781 PLOG(ERROR) << "WSAEnumNetworkEvents()"; 782 PLOG(ERROR) << "WSAEnumNetworkEvents()";
782 return; 783 return;
783 } 784 }
784 785
785 if (ev.lNetworkEvents & FD_ACCEPT) { 786 if (ev.lNetworkEvents & FD_ACCEPT) {
786 int result = AcceptInternal(accept_socket_, accept_address_); 787 int result = AcceptInternal(accept_socket_, accept_address_);
787 if (result != ERR_IO_PENDING) { 788 if (result != ERR_IO_PENDING) {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 core_->read_buffer_length_ = buf_len; 957 core_->read_buffer_length_ = buf_len;
957 core_->WatchForRead(); 958 core_->WatchForRead();
958 return ERR_IO_PENDING; 959 return ERR_IO_PENDING;
959 } 960 }
960 961
961 void TCPSocketWin::DidCompleteConnect() { 962 void TCPSocketWin::DidCompleteConnect() {
962 DCHECK(waiting_connect_); 963 DCHECK(waiting_connect_);
963 DCHECK(!read_callback_.is_null()); 964 DCHECK(!read_callback_.is_null());
964 int result; 965 int result;
965 966
967 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is fixed.
968 tracked_objects::ScopedTracker tracking_profile(
969 FROM_HERE_WITH_EXPLICIT_FUNCTION(
970 "418183 TCPSocketWin::DidCompleteConnect1"));
966 WSANETWORKEVENTS events; 971 WSANETWORKEVENTS events;
967 int rv = WSAEnumNetworkEvents(socket_, core_->read_overlapped_.hEvent, 972 int rv = WSAEnumNetworkEvents(socket_, core_->read_overlapped_.hEvent,
968 &events); 973 &events);
969 int os_error = 0; 974 int os_error = 0;
970 if (rv == SOCKET_ERROR) { 975 if (rv == SOCKET_ERROR) {
976 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is
977 // fixed.
978 tracked_objects::ScopedTracker tracking_profile(
979 FROM_HERE_WITH_EXPLICIT_FUNCTION(
980 "418183 TCPSocketWin::DidCompleteConnect2"));
vadimt 2015/02/05 01:17:14 The instrumentation will interfere with WSAGetLast
Peter Kasting 2015/02/05 01:59:38 Done.
971 NOTREACHED(); 981 NOTREACHED();
972 os_error = WSAGetLastError(); 982 os_error = WSAGetLastError();
973 result = MapSystemError(os_error); 983 result = MapSystemError(os_error);
974 } else if (events.lNetworkEvents & FD_CONNECT) { 984 } else if (events.lNetworkEvents & FD_CONNECT) {
985 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is
986 // fixed.
987 tracked_objects::ScopedTracker tracking_profile(
988 FROM_HERE_WITH_EXPLICIT_FUNCTION(
989 "418183 TCPSocketWin::DidCompleteConnect3"));
975 os_error = events.iErrorCode[FD_CONNECT_BIT]; 990 os_error = events.iErrorCode[FD_CONNECT_BIT];
976 result = MapConnectError(os_error); 991 result = MapConnectError(os_error);
977 } else { 992 } else {
978 NOTREACHED(); 993 NOTREACHED();
979 result = ERR_UNEXPECTED; 994 result = ERR_UNEXPECTED;
980 } 995 }
981 996
997 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is fixed.
998 tracked_objects::ScopedTracker tracking_profile(
999 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1000 "418183 TCPSocketWin::DidCompleteConnect4"));
982 connect_os_error_ = os_error; 1001 connect_os_error_ = os_error;
983 DoConnectComplete(result); 1002 DoConnectComplete(result);
984 waiting_connect_ = false; 1003 waiting_connect_ = false;
985 1004
1005 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is fixed.
1006 tracked_objects::ScopedTracker tracking_profile(
1007 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1008 "418183 TCPSocketWin::DidCompleteConnect5"));
986 DCHECK_NE(result, ERR_IO_PENDING); 1009 DCHECK_NE(result, ERR_IO_PENDING);
987 base::ResetAndReturn(&read_callback_).Run(result); 1010 base::ResetAndReturn(&read_callback_).Run(result);
988 } 1011 }
989 1012
990 void TCPSocketWin::DidCompleteWrite() { 1013 void TCPSocketWin::DidCompleteWrite() {
991 DCHECK(waiting_write_); 1014 DCHECK(waiting_write_);
992 DCHECK(!write_callback_.is_null()); 1015 DCHECK(!write_callback_.is_null());
993 1016
994 DWORD num_bytes, flags; 1017 DWORD num_bytes, flags;
995 BOOL ok = WSAGetOverlappedResult(socket_, &core_->write_overlapped_, 1018 BOOL ok = WSAGetOverlappedResult(socket_, &core_->write_overlapped_,
(...skipping 27 matching lines...) Expand all
1023 core_->write_iobuffer_ = NULL; 1046 core_->write_iobuffer_ = NULL;
1024 1047
1025 DCHECK_NE(rv, ERR_IO_PENDING); 1048 DCHECK_NE(rv, ERR_IO_PENDING);
1026 base::ResetAndReturn(&write_callback_).Run(rv); 1049 base::ResetAndReturn(&write_callback_).Run(rv);
1027 } 1050 }
1028 1051
1029 void TCPSocketWin::DidSignalRead() { 1052 void TCPSocketWin::DidSignalRead() {
1030 DCHECK(waiting_read_); 1053 DCHECK(waiting_read_);
1031 DCHECK(!read_callback_.is_null()); 1054 DCHECK(!read_callback_.is_null());
1032 1055
1056 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is fixed.
1057 tracked_objects::ScopedTracker tracking_profile(
1058 FROM_HERE_WITH_EXPLICIT_FUNCTION("418183 TCPSocketWin::DidSignalRead1"));
1033 int os_error = 0; 1059 int os_error = 0;
1034 WSANETWORKEVENTS network_events; 1060 WSANETWORKEVENTS network_events;
1035 int rv = WSAEnumNetworkEvents(socket_, core_->read_overlapped_.hEvent, 1061 int rv = WSAEnumNetworkEvents(socket_, core_->read_overlapped_.hEvent,
1036 &network_events); 1062 &network_events);
1037 if (rv == SOCKET_ERROR) { 1063 if (rv == SOCKET_ERROR) {
1064 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is
1065 // fixed.
1066 tracked_objects::ScopedTracker tracking_profile(
1067 FROM_HERE_WITH_EXPLICIT_FUNCTION(
vadimt 2015/02/05 01:17:14 Same thing
Peter Kasting 2015/02/05 01:59:38 Done.
1068 "418183 TCPSocketWin::DidSignalRead2"));
1038 os_error = WSAGetLastError(); 1069 os_error = WSAGetLastError();
1039 rv = MapSystemError(os_error); 1070 rv = MapSystemError(os_error);
1040 } else if (network_events.lNetworkEvents) { 1071 } else if (network_events.lNetworkEvents) {
1072 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is
1073 // fixed.
1074 tracked_objects::ScopedTracker tracking_profile(
1075 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1076 "418183 TCPSocketWin::DidSignalRead3"));
1041 DCHECK_EQ(network_events.lNetworkEvents & ~(FD_READ | FD_CLOSE), 0); 1077 DCHECK_EQ(network_events.lNetworkEvents & ~(FD_READ | FD_CLOSE), 0);
1042 // If network_events.lNetworkEvents is FD_CLOSE and 1078 // If network_events.lNetworkEvents is FD_CLOSE and
1043 // network_events.iErrorCode[FD_CLOSE_BIT] is 0, it is a graceful 1079 // network_events.iErrorCode[FD_CLOSE_BIT] is 0, it is a graceful
1044 // connection closure. It is tempting to directly set rv to 0 in 1080 // connection closure. It is tempting to directly set rv to 0 in
1045 // this case, but the MSDN pages for WSAEventSelect and 1081 // this case, but the MSDN pages for WSAEventSelect and
1046 // WSAAsyncSelect recommend we still call DoRead(): 1082 // WSAAsyncSelect recommend we still call DoRead():
1047 // FD_CLOSE should only be posted after all data is read from a 1083 // FD_CLOSE should only be posted after all data is read from a
1048 // socket, but an application should check for remaining data upon 1084 // socket, but an application should check for remaining data upon
1049 // receipt of FD_CLOSE to avoid any possibility of losing data. 1085 // receipt of FD_CLOSE to avoid any possibility of losing data.
1050 // 1086 //
1051 // If network_events.iErrorCode[FD_READ_BIT] or 1087 // If network_events.iErrorCode[FD_READ_BIT] or
1052 // network_events.iErrorCode[FD_CLOSE_BIT] is nonzero, still call 1088 // network_events.iErrorCode[FD_CLOSE_BIT] is nonzero, still call
1053 // DoRead() because recv() reports a more accurate error code 1089 // DoRead() because recv() reports a more accurate error code
1054 // (WSAECONNRESET vs. WSAECONNABORTED) when the connection was 1090 // (WSAECONNRESET vs. WSAECONNABORTED) when the connection was
1055 // reset. 1091 // reset.
1056 rv = DoRead(core_->read_iobuffer_.get(), core_->read_buffer_length_, 1092 rv = DoRead(core_->read_iobuffer_.get(), core_->read_buffer_length_,
1057 read_callback_); 1093 read_callback_);
1058 if (rv == ERR_IO_PENDING) 1094 if (rv == ERR_IO_PENDING)
1059 return; 1095 return;
1060 } else { 1096 } else {
1097 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is
1098 // fixed.
1099 tracked_objects::ScopedTracker tracking_profile(
1100 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1101 "418183 TCPSocketWin::DidSignalRead4"));
1061 // This may happen because Read() may succeed synchronously and 1102 // This may happen because Read() may succeed synchronously and
1062 // consume all the received data without resetting the event object. 1103 // consume all the received data without resetting the event object.
1063 core_->WatchForRead(); 1104 core_->WatchForRead();
1064 return; 1105 return;
1065 } 1106 }
1066 1107
1067 waiting_read_ = false; 1108 waiting_read_ = false;
1068 core_->read_iobuffer_ = NULL; 1109 core_->read_iobuffer_ = NULL;
1069 core_->read_buffer_length_ = 0; 1110 core_->read_buffer_length_ = 0;
1070 1111
1071 DCHECK_NE(rv, ERR_IO_PENDING);
1072 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed. 1112 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
1073 tracked_objects::ScopedTracker tracking_profile( 1113 tracked_objects::ScopedTracker tracking_profile(
1074 FROM_HERE_WITH_EXPLICIT_FUNCTION("TCPSocketWin::DidSignalRead")); 1114 FROM_HERE_WITH_EXPLICIT_FUNCTION("418183 TCPSocketWin::DidSignalRead5"));
1115 DCHECK_NE(rv, ERR_IO_PENDING);
1075 base::ResetAndReturn(&read_callback_).Run(rv); 1116 base::ResetAndReturn(&read_callback_).Run(rv);
1076 } 1117 }
1077 1118
1078 } // namespace net 1119 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/tcp_client_socket.cc ('k') | net/udp/udp_socket_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698