Index: components/history/core/browser/history_backend.cc |
diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc |
index 431eb37ba7507dba003f6933a0711812f5730397..58f46864c80d3c22f941837bd49abec554c59309 100644 |
--- a/components/history/core/browser/history_backend.cc |
+++ b/components/history/core/browser/history_backend.cc |
@@ -39,6 +39,7 @@ |
#include "components/history/core/browser/page_usage_data.h" |
#include "components/history/core/browser/typed_url_syncable_service.h" |
#include "components/history/core/browser/url_utils.h" |
+#include "components/memory_coordinator/browser/memory_coordinator.h" |
#include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
#include "sql/error_delegate_util.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
@@ -234,6 +235,11 @@ HistoryBackend::~HistoryBackend() { |
FROM_HERE, backend_destroy_task_); |
} |
+ if (memory_coordinator::MemoryCoordinator::GetInstance()) { |
+ memory_coordinator::MemoryCoordinator::GetInstance()->UnregisterClient( |
+ this); |
+ } |
+ |
#if defined(OS_ANDROID) |
if (backend_client_ && !history_dir_.empty()) |
backend_client_->OnHistoryBackendDestroyed(this, history_dir_); |
@@ -252,8 +258,12 @@ void HistoryBackend::Init( |
InitImpl(history_database_params); |
delegate_->DBLoaded(); |
typed_url_syncable_service_.reset(new TypedUrlSyncableService(this)); |
- memory_pressure_listener_.reset(new base::MemoryPressureListener( |
- base::Bind(&HistoryBackend::OnMemoryPressure, base::Unretained(this)))); |
+ if (memory_coordinator::MemoryCoordinator::GetInstance()) { |
+ memory_coordinator::MemoryCoordinator::GetInstance()->RegisterClient(this); |
+ } else { |
+ memory_pressure_listener_.reset(new base::MemoryPressureListener( |
+ base::Bind(&HistoryBackend::OnMemoryPressure, base::Unretained(this)))); |
+ } |
} |
void HistoryBackend::SetOnBackendDestroyTask(base::MessageLoop* message_loop, |
@@ -737,15 +747,19 @@ void HistoryBackend::InitImpl( |
LOCAL_HISTOGRAM_TIMES("History.InitTime", TimeTicks::Now() - beginning_time); |
} |
+void HistoryBackend::TrimMemory(bool trim_aggressively) { |
+ if (db_) |
+ db_->TrimMemory(trim_aggressively); |
+ if (thumbnail_db_) |
+ thumbnail_db_->TrimMemory(trim_aggressively); |
+} |
+ |
void HistoryBackend::OnMemoryPressure( |
base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { |
bool trim_aggressively = |
memory_pressure_level == |
base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL; |
- if (db_) |
- db_->TrimMemory(trim_aggressively); |
- if (thumbnail_db_) |
- thumbnail_db_->TrimMemory(trim_aggressively); |
+ TrimMemory(trim_aggressively); |
} |
void HistoryBackend::CloseAllDatabases() { |
@@ -905,6 +919,12 @@ bool HistoryBackend::IsExpiredVisitTime(const base::Time& time) { |
return time < expirer_.GetCurrentExpirationTime(); |
} |
+void HistoryBackend::OnMemoryStateChange( |
+ memory_coordinator::MemoryState state) { |
+ bool trim_aggressively = state == memory_coordinator::MemoryState::SUSPENDED; |
+ TrimMemory(trim_aggressively); |
+} |
+ |
void HistoryBackend::SetPageTitle(const GURL& url, |
const base::string16& title) { |
if (!db_) |