Chromium Code Reviews| Index: chromecast/renderer/cast_content_renderer_client.cc |
| diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc |
| index 6f9c67c84624b5712dbddd483aedb95f752ee677..f23336fd2f6a66b2e5e4ab407e301a3567a77798 100644 |
| --- a/chromecast/renderer/cast_content_renderer_client.cc |
| +++ b/chromecast/renderer/cast_content_renderer_client.cc |
| @@ -27,6 +27,44 @@ namespace shell { |
| namespace { |
| +#if defined(ARCH_CPU_ARM_FAMILY) && !defined(OS_ANDROID) |
| +// These memory thresholds are set for Chromecast. See the UMA histogram |
| +// Platform.MeminfoMemFree when tuning. |
| +const int kCriticalMinFreeMemMB = 24; |
| +const int kModerateMinFreeMemMB = 48; |
| +const int kPollingIntervalMS = 5000; |
|
lcwu1
2015/01/08 18:52:12
These numbers should be platform/product dependent
gunsch
2015/01/08 19:02:08
Done.
|
| + |
| +void PlatformPollFreemem(void) { |
| + struct sysinfo sys; |
| + |
| + if (sysinfo(&sys) == -1) { |
| + LOG(ERROR) << "platform_poll_freemem(): sysinfo failed"; |
| + } else { |
| + int free_mem_mb = static_cast<int64_t>(sys.freeram) * |
| + sys.mem_unit / (1024 * 1024); |
| + |
| + if (free_mem_mb <= kModerateMinFreeMemMB) { |
| + if (free_mem_mb <= kCriticalMinFreeMemMB) { |
| + // Memory is getting really low, we need to do whatever we can to |
| + // prevent deadlocks and interfering with other processes. |
| + base::MemoryPressureListener::NotifyMemoryPressure( |
| + base::MemoryPressureListener::MEMORY_PRESSURE_CRITICAL); |
| + } else { |
| + // There is enough memory, but it is starting to get low. |
| + base::MemoryPressureListener::NotifyMemoryPressure( |
| + base::MemoryPressureListener::MEMORY_PRESSURE_MODERATE); |
| + } |
| + } |
| + } |
| + |
| + // Setup next poll. |
| + base::MessageLoopProxy::current()->PostDelayedTask( |
| + FROM_HERE, |
| + base::Bind(&PlatformPollFreemem), |
| + base::TimeDelta::FromMilliseconds(kPollingIntervalMS)); |
| +} |
| +#endif |
| + |
| // Default background color to set for WebViews. WebColor is in ARGB format |
| // though the comment of WebColor says it is in RGBA. |
| const blink::WebColor kColorBlack = 0xFF000000; |
| @@ -51,6 +89,10 @@ void CastContentRendererClient::RenderThreadStarted() { |
| crypto::InitNSSSafely(); |
| #endif |
| +#if defined(ARCH_CPU_ARM_FAMILY) && !defined(OS_ANDROID) |
| + PlatformPollFreemem(); |
| +#endif |
| + |
| cast_observer_.reset(new CastRenderProcessObserver()); |
| prescient_networking_dispatcher_.reset( |