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

Side by Side Diff: content/browser/dom_storage/dom_storage_context_impl.cc

Issue 2092133003: [DOMStorage] Do not try purging caches when no database is open (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@filter_args
Patch Set: Fixes. Created 4 years, 5 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_context_impl.h" 5 #include "content/browser/dom_storage/dom_storage_context_impl.h"
6 6
7 #include <inttypes.h> 7 #include <inttypes.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdlib.h> 9 #include <stdlib.h>
10 10
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 base::TimeDelta::FromSeconds(kSessionStoraceScavengingSeconds)); 427 base::TimeDelta::FromSeconds(kSessionStoraceScavengingSeconds));
428 } 428 }
429 } 429 }
430 430
431 void DOMStorageContextImpl::PurgeMemory(PurgeOption purge_option) { 431 void DOMStorageContextImpl::PurgeMemory(PurgeOption purge_option) {
432 if (is_shutdown_) 432 if (is_shutdown_)
433 return; 433 return;
434 434
435 DOMStorageNamespace::UsageStatistics initial_stats = 435 DOMStorageNamespace::UsageStatistics initial_stats =
436 GetTotalNamespaceStatistics(namespaces_); 436 GetTotalNamespaceStatistics(namespaces_);
437 if (!initial_stats.total_area_count)
438 return;
437 439
438 // Track the total localStorage cache size. 440 // Track the total localStorage cache size.
439 UMA_HISTOGRAM_CUSTOM_COUNTS("LocalStorage.BrowserLocalStorageCacheSizeInKB", 441 UMA_HISTOGRAM_CUSTOM_COUNTS("LocalStorage.BrowserLocalStorageCacheSizeInKB",
440 initial_stats.total_cache_size / 1024, 1, 100000, 442 initial_stats.total_cache_size / 1024, 1, 100000,
441 50); 443 50);
442 444
443 const char* purge_reason = nullptr; 445 const char* purge_reason = nullptr;
444 if (purge_option == PURGE_IF_NEEDED) { 446 if (purge_option == PURGE_IF_NEEDED) {
445 // Purging is done based on the cache sizes without including the database 447 // Purging is done based on the cache sizes without including the database
446 // size since it can be expensive trying to estimate the sqlite usage for 448 // size since it can be expensive trying to estimate the sqlite usage for
447 // all databases. For low end devices purge all inactive areas. 449 // all databases. For low end devices purge all inactive areas.
448 if (!initial_stats.inactive_area_count)
449 return;
450
451 if (initial_stats.total_cache_size > kMaxCacheSize) 450 if (initial_stats.total_cache_size > kMaxCacheSize)
452 purge_reason = "SizeLimitExceeded"; 451 purge_reason = "SizeLimitExceeded";
453 else if (initial_stats.total_area_count > kMaxStorageAreaCount) 452 else if (initial_stats.total_area_count > kMaxStorageAreaCount)
454 purge_reason = "AreaCountLimitExceeded"; 453 purge_reason = "AreaCountLimitExceeded";
455 else if (is_low_end_device_) 454 else if (is_low_end_device_)
456 purge_reason = "InactiveOnLowEndDevice"; 455 purge_reason = "InactiveOnLowEndDevice";
457 if (!purge_reason) 456 if (!purge_reason)
458 return; 457 return;
459 458
460 purge_option = PURGE_UNOPENED; 459 purge_option = PURGE_UNOPENED;
461 } 460 } else {
462
463 bool aggressively = purge_option == PURGE_AGGRESSIVE;
464 for (const auto& it : namespaces_)
465 it.second->PurgeMemory(aggressively);
466
467 // Track the size of cache purged.
468 if (!purge_reason) {
469 if (purge_option == PURGE_AGGRESSIVE) 461 if (purge_option == PURGE_AGGRESSIVE)
470 purge_reason = "AggressivePurgeTriggered"; 462 purge_reason = "AggressivePurgeTriggered";
471 else 463 else
472 purge_reason = "ModeratePurgeTriggered"; 464 purge_reason = "ModeratePurgeTriggered";
473 } 465 }
466
467 // Return if no areas can be purged with the given option.
468 bool aggressively = purge_option == PURGE_AGGRESSIVE;
469 if (!aggressively && !initial_stats.inactive_area_count) {
470 return;
michaeln 2016/06/27 22:59:02 nit: you might be able to work this early return i
ssid 2016/06/27 23:09:29 Hm there are 2 cases where this helps. 1. When we
michaeln 2016/06/28 18:33:45 still lgtm, good point about only having one early
471 }
472 for (const auto& it : namespaces_)
473 it.second->PurgeMemory(aggressively);
474
475 // Track the size of cache purged.
474 size_t purged_size_kib = 476 size_t purged_size_kib =
475 (initial_stats.total_cache_size - 477 (initial_stats.total_cache_size -
476 GetTotalNamespaceStatistics(namespaces_).total_cache_size) / 478 GetTotalNamespaceStatistics(namespaces_).total_cache_size) /
477 1024; 479 1024;
478 std::string full_histogram_name = 480 std::string full_histogram_name =
479 std::string("LocalStorage.BrowserLocalStorageCachePurgedInKB.") + 481 std::string("LocalStorage.BrowserLocalStorageCachePurgedInKB.") +
480 purge_reason; 482 purge_reason;
481 base::HistogramBase* histogram = base::Histogram::FactoryGet( 483 base::HistogramBase* histogram = base::Histogram::FactoryGet(
482 full_histogram_name, 1, 100000, 50, 484 full_histogram_name, 1, 100000, 50,
483 base::HistogramBase::kUmaTargetedHistogramFlag); 485 base::HistogramBase::kUmaTargetedHistogramFlag);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 if (!deletable_persistent_namespace_ids_.empty()) { 581 if (!deletable_persistent_namespace_ids_.empty()) {
580 task_runner_->PostDelayedTask( 582 task_runner_->PostDelayedTask(
581 FROM_HERE, base::Bind( 583 FROM_HERE, base::Bind(
582 &DOMStorageContextImpl::DeleteNextUnusedNamespace, 584 &DOMStorageContextImpl::DeleteNextUnusedNamespace,
583 this), 585 this),
584 base::TimeDelta::FromSeconds(kSessionStoraceScavengingSeconds)); 586 base::TimeDelta::FromSeconds(kSessionStoraceScavengingSeconds));
585 } 587 }
586 } 588 }
587 589
588 } // namespace content 590 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698