OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/http/disk_cache_based_quic_server_info.h" | 5 #include "net/http/disk_cache_based_quic_server_info.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 120 matching lines...) Loading... |
131 // Handle updates while a write is pending or if we haven't loaded from disk | 131 // Handle updates while a write is pending or if we haven't loaded from disk |
132 // cache. Save the data to be written into a temporary buffer and then | 132 // cache. Save the data to be written into a temporary buffer and then |
133 // persist that data when we are ready to persist. | 133 // persist that data when we are ready to persist. |
134 pending_write_data_ = Serialize(); | 134 pending_write_data_ = Serialize(); |
135 return; | 135 return; |
136 } | 136 } |
137 PersistInternal(); | 137 PersistInternal(); |
138 } | 138 } |
139 | 139 |
140 void DiskCacheBasedQuicServerInfo::PersistInternal() { | 140 void DiskCacheBasedQuicServerInfo::PersistInternal() { |
| 141 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 142 tracked_objects::ScopedTracker tracking_profile( |
| 143 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 144 "422516 DiskCacheBasedQuicServerInfo::PersistInternal")); |
| 145 |
141 DCHECK(CalledOnValidThread()); | 146 DCHECK(CalledOnValidThread()); |
142 DCHECK_NE(GET_BACKEND, state_); | 147 DCHECK_NE(GET_BACKEND, state_); |
143 DCHECK(new_data_.empty()); | 148 DCHECK(new_data_.empty()); |
144 CHECK(ready_); | 149 CHECK(ready_); |
145 DCHECK(wait_for_ready_callback_.is_null()); | 150 DCHECK(wait_for_ready_callback_.is_null()); |
146 | 151 |
147 if (pending_write_data_.empty()) { | 152 if (pending_write_data_.empty()) { |
148 new_data_ = Serialize(); | 153 new_data_ = Serialize(); |
149 } else { | 154 } else { |
150 new_data_ = pending_write_data_; | 155 new_data_ = pending_write_data_; |
(...skipping 97 matching lines...) Loading... |
248 default: | 253 default: |
249 rv = OK; | 254 rv = OK; |
250 NOTREACHED(); | 255 NOTREACHED(); |
251 } | 256 } |
252 } while (rv != ERR_IO_PENDING && state_ != NONE); | 257 } while (rv != ERR_IO_PENDING && state_ != NONE); |
253 | 258 |
254 return rv; | 259 return rv; |
255 } | 260 } |
256 | 261 |
257 int DiskCacheBasedQuicServerInfo::DoGetBackendComplete(int rv) { | 262 int DiskCacheBasedQuicServerInfo::DoGetBackendComplete(int rv) { |
| 263 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 264 tracked_objects::ScopedTracker tracking_profile( |
| 265 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 266 "422516 DiskCacheBasedQuicServerInfo::DoGetBackendComplete")); |
| 267 |
258 if (rv == OK) { | 268 if (rv == OK) { |
259 backend_ = data_shim_->backend; | 269 backend_ = data_shim_->backend; |
260 state_ = OPEN; | 270 state_ = OPEN; |
261 } else { | 271 } else { |
262 RecordQuicServerInfoFailure(GET_BACKEND_FAILURE); | 272 RecordQuicServerInfoFailure(GET_BACKEND_FAILURE); |
263 state_ = WAIT_FOR_DATA_READY_DONE; | 273 state_ = WAIT_FOR_DATA_READY_DONE; |
264 } | 274 } |
265 return OK; | 275 return OK; |
266 } | 276 } |
267 | 277 |
268 int DiskCacheBasedQuicServerInfo::DoOpenComplete(int rv) { | 278 int DiskCacheBasedQuicServerInfo::DoOpenComplete(int rv) { |
| 279 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 280 tracked_objects::ScopedTracker tracking_profile( |
| 281 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 282 "422516 DiskCacheBasedQuicServerInfo::DoOpenComplete")); |
| 283 |
269 if (rv == OK) { | 284 if (rv == OK) { |
270 entry_ = data_shim_->entry; | 285 entry_ = data_shim_->entry; |
271 state_ = READ; | 286 state_ = READ; |
272 found_entry_ = true; | 287 found_entry_ = true; |
273 } else { | 288 } else { |
274 RecordQuicServerInfoFailure(OPEN_FAILURE); | 289 RecordQuicServerInfoFailure(OPEN_FAILURE); |
275 state_ = WAIT_FOR_DATA_READY_DONE; | 290 state_ = WAIT_FOR_DATA_READY_DONE; |
276 } | 291 } |
277 | 292 |
278 return OK; | 293 return OK; |
279 } | 294 } |
280 | 295 |
281 int DiskCacheBasedQuicServerInfo::DoReadComplete(int rv) { | 296 int DiskCacheBasedQuicServerInfo::DoReadComplete(int rv) { |
| 297 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 298 tracked_objects::ScopedTracker tracking_profile( |
| 299 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 300 "422516 DiskCacheBasedQuicServerInfo::DoReadComplete")); |
| 301 |
282 if (rv > 0) | 302 if (rv > 0) |
283 data_.assign(read_buffer_->data(), rv); | 303 data_.assign(read_buffer_->data(), rv); |
284 else if (rv < 0) | 304 else if (rv < 0) |
285 RecordQuicServerInfoFailure(READ_FAILURE); | 305 RecordQuicServerInfoFailure(READ_FAILURE); |
286 | 306 |
287 state_ = WAIT_FOR_DATA_READY_DONE; | 307 state_ = WAIT_FOR_DATA_READY_DONE; |
288 return OK; | 308 return OK; |
289 } | 309 } |
290 | 310 |
291 int DiskCacheBasedQuicServerInfo::DoWriteComplete(int rv) { | 311 int DiskCacheBasedQuicServerInfo::DoWriteComplete(int rv) { |
| 312 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 313 tracked_objects::ScopedTracker tracking_profile( |
| 314 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 315 "422516 DiskCacheBasedQuicServerInfo::DoWriteComplete")); |
| 316 |
292 if (rv < 0) | 317 if (rv < 0) |
293 RecordQuicServerInfoFailure(WRITE_FAILURE); | 318 RecordQuicServerInfoFailure(WRITE_FAILURE); |
294 state_ = SET_DONE; | 319 state_ = SET_DONE; |
295 return OK; | 320 return OK; |
296 } | 321 } |
297 | 322 |
298 int DiskCacheBasedQuicServerInfo::DoCreateOrOpenComplete(int rv) { | 323 int DiskCacheBasedQuicServerInfo::DoCreateOrOpenComplete(int rv) { |
| 324 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 325 tracked_objects::ScopedTracker tracking_profile( |
| 326 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 327 "422516 DiskCacheBasedQuicServerInfo::DoCreateOrOpenComplete")); |
| 328 |
299 if (rv != OK) { | 329 if (rv != OK) { |
300 RecordQuicServerInfoFailure(CREATE_OR_OPEN_FAILURE); | 330 RecordQuicServerInfoFailure(CREATE_OR_OPEN_FAILURE); |
301 state_ = SET_DONE; | 331 state_ = SET_DONE; |
302 } else { | 332 } else { |
303 if (!entry_) { | 333 if (!entry_) { |
304 entry_ = data_shim_->entry; | 334 entry_ = data_shim_->entry; |
305 found_entry_ = true; | 335 found_entry_ = true; |
306 } | 336 } |
307 DCHECK(entry_); | 337 DCHECK(entry_); |
308 state_ = WRITE; | 338 state_ = WRITE; |
309 } | 339 } |
310 return OK; | 340 return OK; |
311 } | 341 } |
312 | 342 |
313 int DiskCacheBasedQuicServerInfo::DoGetBackend() { | 343 int DiskCacheBasedQuicServerInfo::DoGetBackend() { |
| 344 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 345 tracked_objects::ScopedTracker tracking_profile( |
| 346 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 347 "422516 DiskCacheBasedQuicServerInfo::DoGetBackend")); |
| 348 |
314 state_ = GET_BACKEND_COMPLETE; | 349 state_ = GET_BACKEND_COMPLETE; |
315 return http_cache_->GetBackend(&data_shim_->backend, io_callback_); | 350 return http_cache_->GetBackend(&data_shim_->backend, io_callback_); |
316 } | 351 } |
317 | 352 |
318 int DiskCacheBasedQuicServerInfo::DoOpen() { | 353 int DiskCacheBasedQuicServerInfo::DoOpen() { |
| 354 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 355 tracked_objects::ScopedTracker tracking_profile( |
| 356 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 357 "422516 DiskCacheBasedQuicServerInfo::DoOpen")); |
| 358 |
319 state_ = OPEN_COMPLETE; | 359 state_ = OPEN_COMPLETE; |
320 return backend_->OpenEntry(key(), &data_shim_->entry, io_callback_); | 360 return backend_->OpenEntry(key(), &data_shim_->entry, io_callback_); |
321 } | 361 } |
322 | 362 |
323 int DiskCacheBasedQuicServerInfo::DoRead() { | 363 int DiskCacheBasedQuicServerInfo::DoRead() { |
| 364 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 365 tracked_objects::ScopedTracker tracking_profile( |
| 366 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 367 "422516 DiskCacheBasedQuicServerInfo::DoRead")); |
| 368 |
324 const int32 size = entry_->GetDataSize(0 /* index */); | 369 const int32 size = entry_->GetDataSize(0 /* index */); |
325 if (!size) { | 370 if (!size) { |
326 state_ = WAIT_FOR_DATA_READY_DONE; | 371 state_ = WAIT_FOR_DATA_READY_DONE; |
327 return OK; | 372 return OK; |
328 } | 373 } |
329 | 374 |
330 read_buffer_ = new IOBuffer(size); | 375 read_buffer_ = new IOBuffer(size); |
331 state_ = READ_COMPLETE; | 376 state_ = READ_COMPLETE; |
332 return entry_->ReadData( | 377 return entry_->ReadData( |
333 0 /* index */, 0 /* offset */, read_buffer_.get(), size, io_callback_); | 378 0 /* index */, 0 /* offset */, read_buffer_.get(), size, io_callback_); |
334 } | 379 } |
335 | 380 |
336 int DiskCacheBasedQuicServerInfo::DoWrite() { | 381 int DiskCacheBasedQuicServerInfo::DoWrite() { |
| 382 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 383 tracked_objects::ScopedTracker tracking_profile( |
| 384 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 385 "422516 DiskCacheBasedQuicServerInfo::DoWrite")); |
| 386 |
337 write_buffer_ = new IOBuffer(new_data_.size()); | 387 write_buffer_ = new IOBuffer(new_data_.size()); |
338 memcpy(write_buffer_->data(), new_data_.data(), new_data_.size()); | 388 memcpy(write_buffer_->data(), new_data_.data(), new_data_.size()); |
339 state_ = WRITE_COMPLETE; | 389 state_ = WRITE_COMPLETE; |
340 | 390 |
341 return entry_->WriteData(0 /* index */, | 391 return entry_->WriteData(0 /* index */, |
342 0 /* offset */, | 392 0 /* offset */, |
343 write_buffer_.get(), | 393 write_buffer_.get(), |
344 new_data_.size(), | 394 new_data_.size(), |
345 io_callback_, | 395 io_callback_, |
346 true /* truncate */); | 396 true /* truncate */); |
347 } | 397 } |
348 | 398 |
349 int DiskCacheBasedQuicServerInfo::DoCreateOrOpen() { | 399 int DiskCacheBasedQuicServerInfo::DoCreateOrOpen() { |
| 400 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 401 tracked_objects::ScopedTracker tracking_profile( |
| 402 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 403 "422516 DiskCacheBasedQuicServerInfo::DoCreateOrOpen")); |
| 404 |
350 state_ = CREATE_OR_OPEN_COMPLETE; | 405 state_ = CREATE_OR_OPEN_COMPLETE; |
351 if (entry_) | 406 if (entry_) |
352 return OK; | 407 return OK; |
353 | 408 |
354 if (found_entry_) { | 409 if (found_entry_) { |
355 return backend_->OpenEntry(key(), &data_shim_->entry, io_callback_); | 410 return backend_->OpenEntry(key(), &data_shim_->entry, io_callback_); |
356 } | 411 } |
357 | 412 |
358 return backend_->CreateEntry(key(), &data_shim_->entry, io_callback_); | 413 return backend_->CreateEntry(key(), &data_shim_->entry, io_callback_); |
359 } | 414 } |
360 | 415 |
361 int DiskCacheBasedQuicServerInfo::DoWaitForDataReadyDone() { | 416 int DiskCacheBasedQuicServerInfo::DoWaitForDataReadyDone() { |
| 417 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 418 tracked_objects::ScopedTracker tracking_profile( |
| 419 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 420 "422516 DiskCacheBasedQuicServerInfo::DoWaitForDataReadyDone")); |
| 421 |
362 DCHECK(!ready_); | 422 DCHECK(!ready_); |
363 state_ = NONE; | 423 state_ = NONE; |
364 ready_ = true; | 424 ready_ = true; |
365 // We close the entry because, if we shutdown before ::Persist is called, | 425 // We close the entry because, if we shutdown before ::Persist is called, |
366 // then we might leak a cache reference, which causes a DCHECK on shutdown. | 426 // then we might leak a cache reference, which causes a DCHECK on shutdown. |
367 if (entry_) | 427 if (entry_) |
368 entry_->Close(); | 428 entry_->Close(); |
369 entry_ = NULL; | 429 entry_ = NULL; |
370 | 430 |
371 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_PARSE); | 431 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_PARSE); |
(...skipping 51 matching lines...) Loading... |
423 } else if (backend_->GetCacheType() == net::MEMORY_CACHE) { | 483 } else if (backend_->GetCacheType() == net::MEMORY_CACHE) { |
424 UMA_HISTOGRAM_ENUMERATION("Net.QuicDiskCache.FailureReason.MemoryCache", | 484 UMA_HISTOGRAM_ENUMERATION("Net.QuicDiskCache.FailureReason.MemoryCache", |
425 failure, NUM_OF_FAILURES); | 485 failure, NUM_OF_FAILURES); |
426 } else { | 486 } else { |
427 UMA_HISTOGRAM_ENUMERATION("Net.QuicDiskCache.FailureReason.DiskCache", | 487 UMA_HISTOGRAM_ENUMERATION("Net.QuicDiskCache.FailureReason.DiskCache", |
428 failure, NUM_OF_FAILURES); | 488 failure, NUM_OF_FAILURES); |
429 } | 489 } |
430 } | 490 } |
431 | 491 |
432 } // namespace net | 492 } // namespace net |
OLD | NEW |