From 191b054ff005be2bfe2946263d088994d7c7c503 Mon Sep 17 00:00:00 2001 From: Paul Betts Date: Fri, 13 May 2016 17:50:58 -0700 Subject: [PATCH] Implement process and system memory statistics --- atom/common/api/atom_api_process_stats.cc | 42 +++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/atom/common/api/atom_api_process_stats.cc b/atom/common/api/atom_api_process_stats.cc index 8023c5a9d215..a06fb2e1842a 100644 --- a/atom/common/api/atom_api_process_stats.cc +++ b/atom/common/api/atom_api_process_stats.cc @@ -8,18 +8,54 @@ #include #include "atom/common/node_includes.h" +#include "base/process/process_metrics.h" #include "native_mate/dictionary.h" namespace { -int32_t AddTwoNumbers(int32_t a, int32_t b) { - return a + b; +v8::Local GetProcessMetrics(v8::Isolate* isolate) { + mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate); + std::unique_ptr metrics( + base::ProcessMetrics::CreateCurrentProcessMetrics()); + + dict.Set("workingSetSize", (double)metrics->GetWorkingSetSize()); + dict.Set("peakWorkingSetSize", (double)metrics->GetPeakWorkingSetSize()); + + size_t private_bytes, shared_bytes; + if (metrics->GetMemoryBytes(&private_bytes, &shared_bytes)) { + dict.set("privateBytes", (double)private_bytes); + dict.set("sharedBytes", (double)shared_bytes); + } + + return dict.GetHandle(); +} + +v8::Local GetSystemMemoryInfo(v8::Isolate* isolate, mate::Arguments* args) { + mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate); + base::SystemMemoryInfoKB memInfo; + + if (!base::GetSystemMemoryInfo(&memInfo)) { + args->ThrowError("Unable to retrieve system memory information"); + return v8::Undefined(isolate); + } + + dict.set("total", memInfo.total); + dict.set("free", memInfo.free); + + // NB: These return bogus values on OS X +#if !DEFINED(OS_MACOSX) + dict.set("swapTotal", memInfo.swap_total); + dict.set("swapFree", memInfo.swap_free); +#endif + + return dict.GetHandle(); } void Initialize(v8::Local exports, v8::Local unused, v8::Local context, void* priv) { mate::Dictionary dict(context->GetIsolate(), exports); - dict.SetMethod("addTwoNumbers", &AddTwoNumbers); + dict.SetMethod("getProcessMetrics", &GetProcessMetrics); + dict.SetMethod("getSystemMemoryInfo", &GetSystemMemoryInfo); } } // namespace