1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/process/process_metrics.h"
7 #include "base/logging.h"
8 #include "base/values.h"
12 SystemMetrics::SystemMetrics() {
13 committed_memory_
= 0;
16 SystemMetrics
SystemMetrics::Sample() {
17 SystemMetrics system_metrics
;
19 system_metrics
.committed_memory_
= GetSystemCommitCharge();
20 #if defined(OS_LINUX) || defined(OS_ANDROID)
21 GetSystemMemoryInfo(&system_metrics
.memory_info_
);
22 GetSystemDiskInfo(&system_metrics
.disk_info_
);
24 #if defined(OS_CHROMEOS)
25 GetSwapInfo(&system_metrics
.swap_info_
);
28 return system_metrics
;
31 scoped_ptr
<Value
> SystemMetrics::ToValue() const {
32 scoped_ptr
<DictionaryValue
> res(new DictionaryValue());
34 res
->SetInteger("committed_memory", static_cast<int>(committed_memory_
));
35 #if defined(OS_LINUX) || defined(OS_ANDROID)
36 res
->Set("meminfo", memory_info_
.ToValue().release());
37 res
->Set("diskinfo", disk_info_
.ToValue().release());
39 #if defined(OS_CHROMEOS)
40 res
->Set("swapinfo", swap_info_
.ToValue().release());
46 double ProcessMetrics::GetPlatformIndependentCPUUsage() {
48 return GetCPUUsage() * processor_count_
;
54 #if defined(OS_MACOSX) || defined(OS_LINUX)
55 int ProcessMetrics::CalculateIdleWakeupsPerSecond(
56 uint64 absolute_idle_wakeups
) {
57 TimeTicks time
= TimeTicks::Now();
59 if (last_absolute_idle_wakeups_
== 0) {
60 // First call, just set the last values.
61 last_idle_wakeups_time_
= time
;
62 last_absolute_idle_wakeups_
= absolute_idle_wakeups
;
66 int64 wakeups_delta
= absolute_idle_wakeups
- last_absolute_idle_wakeups_
;
67 int64 time_delta
= (time
- last_idle_wakeups_time_
).InMicroseconds();
68 if (time_delta
== 0) {
73 last_idle_wakeups_time_
= time
;
74 last_absolute_idle_wakeups_
= absolute_idle_wakeups
;
76 // Round to average wakeups per second.
77 int64 wakeups_delta_for_ms
= wakeups_delta
* Time::kMicrosecondsPerSecond
;
78 return (wakeups_delta_for_ms
+ time_delta
/ 2) / time_delta
;
81 int ProcessMetrics::GetIdleWakeupsPerSecond() {
82 NOTIMPLEMENTED(); // http://crbug.com/120488
85 #endif // defined(OS_MACOSX) || defined(OS_LINUX)