| Index: content/renderer/render_thread_impl.cc
|
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
| index 637cc8be392f955524b04f83f44d73bb1c9eeea3..7806bc43b07445b78b37ce0ef81c33a3321bc5ea 100644
|
| --- a/content/renderer/render_thread_impl.cc
|
| +++ b/content/renderer/render_thread_impl.cc
|
| @@ -2235,6 +2235,16 @@ void RenderThreadImpl::OnMemoryStateChange(base::MemoryState state) {
|
| }
|
|
|
| void RenderThreadImpl::OnPurgeMemory() {
|
| + // Record amount of purged memory after 2 seconds. 2 seconds is arbitrary
|
| + // but it works most cases.
|
| + RendererMemoryMetrics metrics;
|
| + GetRendererMemoryMetrics(&metrics);
|
| + GetRendererScheduler()->DefaultTaskRunner()->PostDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&RenderThreadImpl::RecordPurgeMemory, base::Unretained(this),
|
| + std::move(metrics)),
|
| + base::TimeDelta::FromSeconds(2));
|
| +
|
| OnTrimMemoryImmediately();
|
| ReleaseFreeMemory();
|
| ClearMemory();
|
| @@ -2242,6 +2252,17 @@ void RenderThreadImpl::OnPurgeMemory() {
|
| blink::WebMemoryCoordinator::onPurgeMemory();
|
| }
|
|
|
| +void RenderThreadImpl::RecordPurgeMemory(RendererMemoryMetrics before) {
|
| + RendererMemoryMetrics after;
|
| + GetRendererMemoryMetrics(&after);
|
| + int64_t mbytes = static_cast<int64_t>(before.total_allocated_mb) -
|
| + static_cast<int64_t>(after.total_allocated_mb);
|
| + if (mbytes < 0)
|
| + mbytes = 0;
|
| + UMA_HISTOGRAM_MEMORY_LARGE_MB("Memory.Experimental.Renderer.PurgedMemory",
|
| + mbytes);
|
| +}
|
| +
|
| void RenderThreadImpl::ClearMemory() {
|
| // Do not call into blink if it is not initialized.
|
| if (blink_platform_impl_) {
|
|
|