| 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...) Expand 10 before | Expand all | Expand 10 after 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...) Expand 10 before | Expand all | Expand 10 after 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...) Expand 10 before | Expand all | Expand 10 after 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 |