From d83c36e0fda799aded4506bde34e6772f08fe02b Mon Sep 17 00:00:00 2001 From: Paul Betts Date: Thu, 12 May 2016 14:36:49 -0700 Subject: [PATCH] Add a way to drop all cached memory --- atom/renderer/api/atom_api_web_frame.cc | 12 +++++++++++- atom/renderer/api/atom_api_web_frame.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/atom/renderer/api/atom_api_web_frame.cc b/atom/renderer/api/atom_api_web_frame.cc index 173236f59e53..873f49d62838 100644 --- a/atom/renderer/api/atom_api_web_frame.cc +++ b/atom/renderer/api/atom_api_web_frame.cc @@ -10,6 +10,7 @@ #include "atom/common/native_mate_converters/gfx_converter.h" #include "atom/common/native_mate_converters/string16_converter.h" #include "atom/renderer/api/atom_api_spell_check_client.h" +#include "base/memory/memory_pressure_listener.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_view.h" #include "native_mate/dictionary.h" @@ -177,6 +178,14 @@ v8::Local WebFrame::GetResourceUsage(v8::Isolate* isolate) { return mate::Converter::ToV8(isolate, stats); } +void WebFrame::PurgeCaches(v8::Isolate* isolate) { + isolate->IdleNotificationDeadline(0.5); + blink::WebCache::clear(); + + base::MemoryPressureListener::NotifyMemoryPressure( + base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); +} + // static void WebFrame::BuildPrototype( v8::Isolate* isolate, v8::Local prototype) { @@ -201,7 +210,8 @@ void WebFrame::BuildPrototype( &WebFrame::RegisterURLSchemeAsPrivileged) .SetMethod("insertText", &WebFrame::InsertText) .SetMethod("executeJavaScript", &WebFrame::ExecuteJavaScript) - .SetMethod("getResourceUsage", &WebFrame::GetResourceUsage); + .SetMethod("getResourceUsage", &WebFrame::GetResourceUsage) + .SetMethod("purgeCaches", &WebFrame::PurgeCaches); } } // namespace api diff --git a/atom/renderer/api/atom_api_web_frame.h b/atom/renderer/api/atom_api_web_frame.h index 60c6159bf124..fa45c5a6c56b 100644 --- a/atom/renderer/api/atom_api_web_frame.h +++ b/atom/renderer/api/atom_api_web_frame.h @@ -72,6 +72,7 @@ class WebFrame : public mate::Wrappable { // Resource related methods v8::Local GetResourceUsage(v8::Isolate* isolate); + void PurgeCaches(v8::Isolate* isolate); scoped_ptr spell_check_client_;