|
@@ -337,6 +337,17 @@ namespace api {
|
|
|
|
|
|
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) {
|
|
|
if (size == "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) {
|
|
|
- AppIdProcessIterator processIterator;
|
|
|
- auto processEntry = processIterator.NextProcessEntry();
|
|
|
- mate::Dictionary result = mate::Dictionary::CreateEmpty(isolate);
|
|
|
+ AppIdProcessIterator process_iterator;
|
|
|
+ auto processEntry = process_iterator.NextProcessEntry();
|
|
|
+ std::vector<mate::Dictionary> result;
|
|
|
|
|
|
- while(processEntry != nullptr) {
|
|
|
+ while (processEntry != nullptr) {
|
|
|
int64_t pid = processEntry->pid();
|
|
|
auto process = base::Process::OpenWithExtraPrivileges(pid);
|
|
|
|
|
|
std::unique_ptr<base::ProcessMetrics> metrics(
|
|
|
base::ProcessMetrics::CreateProcessMetrics(process.Handle()));
|
|
|
|
|
|
- mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate);
|
|
|
-
|
|
|
- dict.Set("workingSetSize",
|
|
|
+ mate::Dictionary pidDict = mate::Dictionary::CreateEmpty(isolate);
|
|
|
+ mate::Dictionary memoryDict = mate::Dictionary::CreateEmpty(isolate);
|
|
|
+
|
|
|
+ memoryDict.Set("workingSetSize",
|
|
|
static_cast<double>(metrics->GetWorkingSetSize() >> 10));
|
|
|
- dict.Set("peakWorkingSetSize",
|
|
|
+ memoryDict.Set("peakWorkingSetSize",
|
|
|
static_cast<double>(metrics->GetPeakWorkingSetSize() >> 10));
|
|
|
|
|
|
size_t private_bytes, shared_bytes;
|
|
|
if (metrics->GetMemoryBytes(&private_bytes, &shared_bytes)) {
|
|
|
- dict.Set("privateBytes", static_cast<double>(private_bytes >> 10));
|
|
|
- dict.Set("sharedBytes", static_cast<double>(shared_bytes >> 10));
|
|
|
+ memoryDict.Set("privateBytes", static_cast<double>(private_bytes >> 10));
|
|
|
+ memoryDict.Set("sharedBytes", static_cast<double>(shared_bytes >> 10));
|
|
|
}
|
|
|
|
|
|
- result.Set(std::to_string(pid).c_str(), dict);
|
|
|
- processEntry = processIterator.NextProcessEntry();
|
|
|
+ pidDict.Set("memory", memoryDict);
|
|
|
+ pidDict.Set("pid", std::to_string(pid));
|
|
|
+ result.push_back(pidDict);
|
|
|
+ processEntry = process_iterator.NextProcessEntry();
|
|
|
}
|
|
|
|
|
|
- return result.GetHandle();
|
|
|
+ return mate::ConvertToV8(isolate, result);
|
|
|
}
|
|
|
|
|
|
// static
|