Adding docs, specs and fixing object returned

This commit is contained in:
Hari Krishna Reddy Juturu 2017-04-26 21:04:53 -07:00
parent bef7d5a520
commit 27aad902b8
6 changed files with 54 additions and 38 deletions

View file

@ -337,6 +337,17 @@ namespace api {
namespace { namespace {
class AppIdProcessIterator : public base::ProcessIterator {
public:
AppIdProcessIterator() : base::ProcessIterator(nullptr) {}
protected:
bool IncludeEntry() override {
return (entry().parent_pid() == base::GetCurrentProcId() ||
entry().pid() == base::GetCurrentProcId());
}
};
IconLoader::IconSize GetIconSizeByString(const std::string& size) { IconLoader::IconSize GetIconSizeByString(const std::string& size) {
if (size == "small") { if (size == "small") {
return IconLoader::IconSize::SMALL; return IconLoader::IconSize::SMALL;
@ -913,35 +924,38 @@ void App::GetFileIcon(const base::FilePath& path,
} }
v8::Local<v8::Value> App::GetAppMemoryInfo(v8::Isolate* isolate) { v8::Local<v8::Value> App::GetAppMemoryInfo(v8::Isolate* isolate) {
AppIdProcessIterator processIterator; AppIdProcessIterator process_iterator;
auto processEntry = processIterator.NextProcessEntry(); auto processEntry = process_iterator.NextProcessEntry();
mate::Dictionary result = mate::Dictionary::CreateEmpty(isolate); std::vector<mate::Dictionary> result;
while(processEntry != nullptr) { while (processEntry != nullptr) {
int64_t pid = processEntry->pid(); int64_t pid = processEntry->pid();
auto process = base::Process::OpenWithExtraPrivileges(pid); auto process = base::Process::OpenWithExtraPrivileges(pid);
std::unique_ptr<base::ProcessMetrics> metrics( std::unique_ptr<base::ProcessMetrics> metrics(
base::ProcessMetrics::CreateProcessMetrics(process.Handle())); base::ProcessMetrics::CreateProcessMetrics(process.Handle()));
mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate); mate::Dictionary pidDict = mate::Dictionary::CreateEmpty(isolate);
mate::Dictionary memoryDict = mate::Dictionary::CreateEmpty(isolate);
dict.Set("workingSetSize",
memoryDict.Set("workingSetSize",
static_cast<double>(metrics->GetWorkingSetSize() >> 10)); static_cast<double>(metrics->GetWorkingSetSize() >> 10));
dict.Set("peakWorkingSetSize", memoryDict.Set("peakWorkingSetSize",
static_cast<double>(metrics->GetPeakWorkingSetSize() >> 10)); static_cast<double>(metrics->GetPeakWorkingSetSize() >> 10));
size_t private_bytes, shared_bytes; size_t private_bytes, shared_bytes;
if (metrics->GetMemoryBytes(&private_bytes, &shared_bytes)) { if (metrics->GetMemoryBytes(&private_bytes, &shared_bytes)) {
dict.Set("privateBytes", static_cast<double>(private_bytes >> 10)); memoryDict.Set("privateBytes", static_cast<double>(private_bytes >> 10));
dict.Set("sharedBytes", static_cast<double>(shared_bytes >> 10)); memoryDict.Set("sharedBytes", static_cast<double>(shared_bytes >> 10));
} }
result.Set(std::to_string(pid).c_str(), dict); pidDict.Set("memory", memoryDict);
processEntry = processIterator.NextProcessEntry(); pidDict.Set("pid", std::to_string(pid));
result.push_back(pidDict);
processEntry = process_iterator.NextProcessEntry();
} }
return result.GetHandle(); return mate::ConvertToV8(isolate, result);
} }
// static // static

View file

@ -166,17 +166,6 @@ class App : public AtomBrowserClient::Delegate,
DISALLOW_COPY_AND_ASSIGN(App); DISALLOW_COPY_AND_ASSIGN(App);
}; };
class AppIdProcessIterator : public base::ProcessIterator {
public:
AppIdProcessIterator() : base::ProcessIterator(NULL) {}
protected:
bool IncludeEntry() override {
return (entry().parent_pid() == base::GetCurrentProcId() ||
entry().pid() == base::GetCurrentProcId());
}
};
} // namespace api } // namespace api
} // namespace atom } // namespace atom

View file

@ -762,20 +762,7 @@ This method can only be called before app is ready.
### `app.getAppMemoryInfo()` ### `app.getAppMemoryInfo()`
Returns `Object[]`: Returns [ProcessMemoryInfo[]](structures/process-memory-info.md): Array of `ProcessMemoryInfo` objects that correspond to memory usage statistics of all the processes associated with the app.
* `pid` Integer - The process id for which memory info is collected for
* `workingSetSize` Integer - The amount of memory currently pinned to actual physical
RAM.
* `peakWorkingSetSize` Integer - The maximum amount of memory that has ever been pinned
to actual physical RAM.
* `privateBytes` Integer - The amount of memory not shared by other processes, such as
JS heap or HTML content.
* `sharedBytes` Integer - The amount of memory shared between processes, typically
memory consumed by the Electron code itself
Returns an object giving memory usage statistics about all the processes associated with
the app. Note that all statistics are reported in Kilobytes.
### `app.setBadgeCount(count)` _Linux_ _macOS_ ### `app.setBadgeCount(count)` _Linux_ _macOS_

View file

@ -0,0 +1,12 @@
# MemoryInfo Object
* `workingSetSize` Integer - Process id of the process.
* `workingSetSize` Integer - The amount of memory currently pinned to actual physical RAM.
* `peakWorkingSetSize` Integer - The maximum amount of memory that has ever been pinned
to actual physical RAM.
* `privateBytes` Integer - The amount of memory not shared by other processes, such as
JS heap or HTML content.
* `sharedBytes` Integer - The amount of memory shared between processes, typically
memory consumed by the Electron code itself
Note that all statistics are reported in Kilobytes.

View file

@ -0,0 +1,4 @@
# ProcessMemoryInfo Object
* `pid` Integer - Process id of the process.
* `memory` MemoryInfo - Memory information of the process.

View file

@ -532,5 +532,15 @@ describe('app module', function () {
}) })
}) })
}) })
describe('getAppMemoryInfo API', function () {
it('returns the process memory of all running electron processes', function () {
const appMemoryInfo = app.getAppMemoryInfo();
assert.ok(appMemoryInfo.length > 0, 'App memory info object is not > 0')
assert.ok(appMemoryInfo[0].memory.workingSetSize > 0, 'working set size is not > 0')
assert.ok(appMemoryInfo[0].memory.peakWorkingSetSize > 0, 'peak working set size is not > 0')
assert.ok(appMemoryInfo[0].pid > 0, 'pid is not > 0')
})
})
}) })
}) })