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

Side by Side Diff: net/base/tcp_client_socket.cc

Issue 3086: * Change output of trace_event log to JSON to enable easier integration with ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/base/tcp_client_socket.h" 5 #include "net/base/tcp_client_socket.h"
6 6
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "base/trace_event.h" 8 #include "base/trace_event.h"
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/base/winsock_init.h" 10 #include "net/base/winsock_init.h"
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 int TCPClientSocket::Read(char* buf, 150 int TCPClientSocket::Read(char* buf,
151 int buf_len, 151 int buf_len,
152 CompletionCallback* callback) { 152 CompletionCallback* callback) {
153 DCHECK(socket_ != INVALID_SOCKET); 153 DCHECK(socket_ != INVALID_SOCKET);
154 DCHECK(wait_state_ == NOT_WAITING); 154 DCHECK(wait_state_ == NOT_WAITING);
155 DCHECK(!callback_); 155 DCHECK(!callback_);
156 156
157 buffer_.len = buf_len; 157 buffer_.len = buf_len;
158 buffer_.buf = buf; 158 buffer_.buf = buf;
159 159
160 TRACE_EVENT_BEGIN("socket.read", this, "");
160 // TODO(wtc): Remove the CHECKs after enough testing. 161 // TODO(wtc): Remove the CHECKs after enough testing.
161 CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_TIMEOUT); 162 CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_TIMEOUT);
162 DWORD num, flags = 0; 163 DWORD num, flags = 0;
163 int rv = WSARecv(socket_, &buffer_, 1, &num, &flags, &overlapped_, NULL); 164 int rv = WSARecv(socket_, &buffer_, 1, &num, &flags, &overlapped_, NULL);
164 if (rv == 0) { 165 if (rv == 0) {
165 CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_OBJECT_0); 166 CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_OBJECT_0);
166 BOOL ok = WSAResetEvent(overlapped_.hEvent); 167 BOOL ok = WSAResetEvent(overlapped_.hEvent);
167 CHECK(ok); 168 CHECK(ok);
169 TRACE_EVENT_END("socket.read", this, StringPrintf("%d bytes", num));
168 return static_cast<int>(num); 170 return static_cast<int>(num);
169 } 171 }
170 int err = WSAGetLastError(); 172 int err = WSAGetLastError();
171 if (err == WSA_IO_PENDING) { 173 if (err == WSA_IO_PENDING) {
172 watcher_.StartWatching(overlapped_.hEvent, this); 174 watcher_.StartWatching(overlapped_.hEvent, this);
173 wait_state_ = WAITING_READ; 175 wait_state_ = WAITING_READ;
174 callback_ = callback; 176 callback_ = callback;
175 return ERR_IO_PENDING; 177 return ERR_IO_PENDING;
176 } 178 }
177 return MapWinsockError(err); 179 return MapWinsockError(err);
178 } 180 }
179 181
180 int TCPClientSocket::Write(const char* buf, 182 int TCPClientSocket::Write(const char* buf,
181 int buf_len, 183 int buf_len,
182 CompletionCallback* callback) { 184 CompletionCallback* callback) {
183 DCHECK(socket_ != INVALID_SOCKET); 185 DCHECK(socket_ != INVALID_SOCKET);
184 DCHECK(wait_state_ == NOT_WAITING); 186 DCHECK(wait_state_ == NOT_WAITING);
185 DCHECK(!callback_); 187 DCHECK(!callback_);
186 188
187 buffer_.len = buf_len; 189 buffer_.len = buf_len;
188 buffer_.buf = const_cast<char*>(buf); 190 buffer_.buf = const_cast<char*>(buf);
189 191
192 TRACE_EVENT_BEGIN("socket.write", this, "");
190 // TODO(wtc): Remove the CHECKs after enough testing. 193 // TODO(wtc): Remove the CHECKs after enough testing.
191 CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_TIMEOUT); 194 CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_TIMEOUT);
192 DWORD num; 195 DWORD num;
193 int rv = WSASend(socket_, &buffer_, 1, &num, 0, &overlapped_, NULL); 196 int rv = WSASend(socket_, &buffer_, 1, &num, 0, &overlapped_, NULL);
194 if (rv == 0) { 197 if (rv == 0) {
195 CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_OBJECT_0); 198 CHECK(WaitForSingleObject(overlapped_.hEvent, 0) == WAIT_OBJECT_0);
196 BOOL ok = WSAResetEvent(overlapped_.hEvent); 199 BOOL ok = WSAResetEvent(overlapped_.hEvent);
197 CHECK(ok); 200 CHECK(ok);
201 TRACE_EVENT_END("socket.write", this, StringPrintf("%d bytes", num));
198 return static_cast<int>(num); 202 return static_cast<int>(num);
199 } 203 }
200 int err = WSAGetLastError(); 204 int err = WSAGetLastError();
201 if (err == WSA_IO_PENDING) { 205 if (err == WSA_IO_PENDING) {
202 watcher_.StartWatching(overlapped_.hEvent, this); 206 watcher_.StartWatching(overlapped_.hEvent, this);
203 wait_state_ = WAITING_WRITE; 207 wait_state_ = WAITING_WRITE;
204 callback_ = callback; 208 callback_ = callback;
205 return ERR_IO_PENDING; 209 return ERR_IO_PENDING;
206 } 210 }
207 return MapWinsockError(err); 211 return MapWinsockError(err);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 if (result != ERR_IO_PENDING) 269 if (result != ERR_IO_PENDING)
266 DoCallback(result); 270 DoCallback(result);
267 } 271 }
268 272
269 void TCPClientSocket::DidCompleteIO() { 273 void TCPClientSocket::DidCompleteIO() {
270 DWORD num_bytes, flags; 274 DWORD num_bytes, flags;
271 BOOL ok = WSAGetOverlappedResult( 275 BOOL ok = WSAGetOverlappedResult(
272 socket_, &overlapped_, &num_bytes, FALSE, &flags); 276 socket_, &overlapped_, &num_bytes, FALSE, &flags);
273 WSAResetEvent(overlapped_.hEvent); 277 WSAResetEvent(overlapped_.hEvent);
274 if (wait_state_ == WAITING_READ) { 278 if (wait_state_ == WAITING_READ) {
275 TRACE_EVENT_INSTANT("socket.read", this, 279 TRACE_EVENT_END("socket.read", this, StringPrintf("%d bytes", num_bytes));
276 StringPrintf("%d bytes", num_bytes));
277 } else { 280 } else {
278 TRACE_EVENT_INSTANT("socket.write", this, 281 TRACE_EVENT_END("socket.write", this, StringPrintf("%d bytes", num_bytes));
279 StringPrintf("%d bytes", num_bytes));
280 } 282 }
281 wait_state_ = NOT_WAITING; 283 wait_state_ = NOT_WAITING;
282 DoCallback(ok ? num_bytes : MapWinsockError(WSAGetLastError())); 284 DoCallback(ok ? num_bytes : MapWinsockError(WSAGetLastError()));
283 } 285 }
284 286
285 void TCPClientSocket::OnObjectSignaled(HANDLE object) { 287 void TCPClientSocket::OnObjectSignaled(HANDLE object) {
286 DCHECK(object == overlapped_.hEvent); 288 DCHECK(object == overlapped_.hEvent);
287 289
288 switch (wait_state_) { 290 switch (wait_state_) {
289 case WAITING_CONNECT: 291 case WAITING_CONNECT:
290 DidCompleteConnect(); 292 DidCompleteConnect();
291 break; 293 break;
292 case WAITING_READ: 294 case WAITING_READ:
293 case WAITING_WRITE: 295 case WAITING_WRITE:
294 DidCompleteIO(); 296 DidCompleteIO();
295 break; 297 break;
296 default: 298 default:
297 NOTREACHED(); 299 NOTREACHED();
298 break; 300 break;
299 } 301 }
300 } 302 }
301 303
302 } // namespace net 304 } // namespace net
303 305
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698