Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "content/browser/dom_storage/dom_storage_area.h" | 5 #include "content/browser/dom_storage/dom_storage_area.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cctype> // for std::isalnum | 8 #include <cctype> // for std::isalnum |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 296 } | 296 } |
| 297 map_ = new DOMStorageMap(kPerStorageAreaQuota + | 297 map_ = new DOMStorageMap(kPerStorageAreaQuota + |
| 298 kPerStorageAreaOverQuotaAllowance); | 298 kPerStorageAreaOverQuotaAllowance); |
| 299 if (backing_) { | 299 if (backing_) { |
| 300 is_initial_import_done_ = false; | 300 is_initial_import_done_ = false; |
| 301 backing_->Reset(); | 301 backing_->Reset(); |
| 302 backing_->DeleteFiles(); | 302 backing_->DeleteFiles(); |
| 303 } | 303 } |
| 304 } | 304 } |
| 305 | 305 |
| 306 void DOMStorageArea::TrimDatabase() { | |
| 307 if (backing_) | |
|
michaeln
2016/05/09 21:50:31
There are some complications that i think make thi
ssid
2016/05/10 02:04:15
Thanks, I didn't realize this issue.
Yes, post tas
| |
| 308 backing_->TrimDatabase(); | |
| 309 } | |
| 310 | |
| 306 void DOMStorageArea::PurgeMemory() { | 311 void DOMStorageArea::PurgeMemory() { |
| 307 DCHECK(!is_shutdown_); | 312 DCHECK(!is_shutdown_); |
| 308 // Purging sessionStorage is not supported; it won't work with FastClear. | 313 // Purging sessionStorage is not supported; it won't work with FastClear. |
| 309 DCHECK(!session_storage_backing_.get()); | 314 DCHECK(!session_storage_backing_.get()); |
| 310 if (!is_initial_import_done_ || // We're not using any memory. | 315 if (!is_initial_import_done_ || // We're not using any memory. |
| 311 !backing_.get() || // We can't purge anything. | 316 !backing_.get() || // We can't purge anything. |
| 312 HasUncommittedChanges()) // We leave things alone with changes pending. | 317 HasUncommittedChanges()) // We leave things alone with changes pending. |
| 313 return; | 318 return; |
| 314 | 319 |
| 315 // Drop the in memory cache, we'll reload when needed. | 320 // Drop the in memory cache, we'll reload when needed. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 363 } | 368 } |
| 364 | 369 |
| 365 void DOMStorageArea::InitialImportIfNeeded() { | 370 void DOMStorageArea::InitialImportIfNeeded() { |
| 366 if (is_initial_import_done_) | 371 if (is_initial_import_done_) |
| 367 return; | 372 return; |
| 368 | 373 |
| 369 DCHECK(backing_.get()); | 374 DCHECK(backing_.get()); |
| 370 | 375 |
| 371 base::TimeTicks before = base::TimeTicks::Now(); | 376 base::TimeTicks before = base::TimeTicks::Now(); |
| 372 DOMStorageValuesMap initial_values; | 377 DOMStorageValuesMap initial_values; |
| 373 backing_->ReadAllValues(&initial_values); | 378 backing_->ReadAllValues(&initial_values); |
|
michaeln
2016/05/09 21:50:31
so maybe call TrimDatabase() here
ssid
2016/05/10 02:04:15
Done. Made the trim non-aggressive in database.cc.
| |
| 374 map_->SwapValues(&initial_values); | 379 map_->SwapValues(&initial_values); |
| 375 is_initial_import_done_ = true; | 380 is_initial_import_done_ = true; |
| 376 base::TimeDelta time_to_import = base::TimeTicks::Now() - before; | 381 base::TimeDelta time_to_import = base::TimeTicks::Now() - before; |
| 377 UMA_HISTOGRAM_TIMES("LocalStorage.BrowserTimeToPrimeLocalStorage", | 382 UMA_HISTOGRAM_TIMES("LocalStorage.BrowserTimeToPrimeLocalStorage", |
| 378 time_to_import); | 383 time_to_import); |
| 379 | 384 |
| 380 size_t local_storage_size_kb = map_->bytes_used() / 1024; | 385 size_t local_storage_size_kb = map_->bytes_used() / 1024; |
| 381 // Track localStorage size, from 0-6MB. Note that the maximum size should be | 386 // Track localStorage size, from 0-6MB. Note that the maximum size should be |
| 382 // 5MB, but we add some slop since we want to make sure the max size is always | 387 // 5MB, but we add some slop since we want to make sure the max size is always |
| 383 // above what we see in practice, since histograms can't change. | 388 // above what we see in practice, since histograms can't change. |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 468 base::Bind(&DOMStorageArea::CommitChanges, this, | 473 base::Bind(&DOMStorageArea::CommitChanges, this, |
| 469 base::Owned(commit_batch_.release()))); | 474 base::Owned(commit_batch_.release()))); |
| 470 ++commit_batches_in_flight_; | 475 ++commit_batches_in_flight_; |
| 471 DCHECK(success); | 476 DCHECK(success); |
| 472 } | 477 } |
| 473 | 478 |
| 474 void DOMStorageArea::CommitChanges(const CommitBatch* commit_batch) { | 479 void DOMStorageArea::CommitChanges(const CommitBatch* commit_batch) { |
| 475 // This method executes on the commit sequence. | 480 // This method executes on the commit sequence. |
| 476 DCHECK(task_runner_->IsRunningOnCommitSequence()); | 481 DCHECK(task_runner_->IsRunningOnCommitSequence()); |
| 477 backing_->CommitChanges(commit_batch->clear_all_first, | 482 backing_->CommitChanges(commit_batch->clear_all_first, |
| 478 commit_batch->changed_values); | 483 commit_batch->changed_values); |
|
michaeln
2016/05/09 21:50:31
and maybe call TrimMemory() here
ssid
2016/05/10 02:04:15
Done.
| |
| 479 // TODO(michaeln): what if CommitChanges returns false (e.g., we're trying to | 484 // TODO(michaeln): what if CommitChanges returns false (e.g., we're trying to |
| 480 // commit to a DB which is in an inconsistent state?) | 485 // commit to a DB which is in an inconsistent state?) |
| 481 task_runner_->PostTask( | 486 task_runner_->PostTask( |
| 482 FROM_HERE, | 487 FROM_HERE, |
| 483 base::Bind(&DOMStorageArea::OnCommitComplete, this)); | 488 base::Bind(&DOMStorageArea::OnCommitComplete, this)); |
| 484 } | 489 } |
| 485 | 490 |
| 486 void DOMStorageArea::OnCommitComplete() { | 491 void DOMStorageArea::OnCommitComplete() { |
| 487 // We're back on the primary sequence in this method. | 492 // We're back on the primary sequence in this method. |
| 488 DCHECK(task_runner_->IsRunningOnPrimarySequence()); | 493 DCHECK(task_runner_->IsRunningOnPrimarySequence()); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 507 commit_batch_->clear_all_first, | 512 commit_batch_->clear_all_first, |
| 508 commit_batch_->changed_values); | 513 commit_batch_->changed_values); |
| 509 DCHECK(success); | 514 DCHECK(success); |
| 510 } | 515 } |
| 511 commit_batch_.reset(); | 516 commit_batch_.reset(); |
| 512 backing_.reset(); | 517 backing_.reset(); |
| 513 session_storage_backing_ = NULL; | 518 session_storage_backing_ = NULL; |
| 514 } | 519 } |
| 515 | 520 |
| 516 } // namespace content | 521 } // namespace content |
| OLD | NEW |