Chromium Code Reviews| Index: services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc |
| diff --git a/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc b/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8c73e5aa0c41ae26e54ffd8cd0300f8c29207b03 |
| --- /dev/null |
| +++ b/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc |
| @@ -0,0 +1,63 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h" |
| + |
| +#include "base/process/process_handle.h" |
| +#include "base/process/process_metrics.h" |
| +#include "base/time/time.h" |
| + |
| +#if defined(OS_MACOSX) |
| +#include "services/service_manager/public/cpp/standalone_service/mach_broker.h" |
| +#endif |
| + |
| +namespace service_manager { |
| + |
|
oystein (OOO til 10th of July)
2017/05/18 21:24:32
nit: some redundant empty lines+comment here still
|
| +class ServiceContextRef; |
| + |
| +} // namespace service_manager |
| + |
| +namespace resource_coordinator { |
| + |
| +struct CoordinationUnitID; |
| + |
| +namespace { |
| + |
| +const int kCPUProfilingIntervalInSeconds = 5; |
| + |
| +} // namespace |
| + |
| +ProcessCoordinationUnitImpl::ProcessCoordinationUnitImpl( |
| + const CoordinationUnitID& id, |
| + std::unique_ptr<service_manager::ServiceContextRef> service_ref) |
| + : CoordinationUnitImpl(id, std::move(service_ref)), cpu_usage_(-1.0) { |
| + // ProcessCoordinationUnit ids should correspond to its pid |
| + base::ProcessHandle pid = id.id; |
| + |
| +#if defined(OS_MACOSX) |
| + process_metrics_ = base::ProcessMetrics::CreateProcessMetrics( |
| + pid, service_manager::MachBroker::GetInstance()->port_provider()); |
| +#else |
| + process_metrics_ = base::ProcessMetrics::CreateProcessMetrics(pid); |
| +#endif |
| + |
| + repeating_timer_.Start(FROM_HERE, base::TimeDelta(), this, |
| + &ProcessCoordinationUnitImpl::MeasureProcessCPUUsage); |
| +} |
| + |
| +ProcessCoordinationUnitImpl::~ProcessCoordinationUnitImpl() {} |
|
oystein (OOO til 10th of July)
2017/05/18 21:24:32
nit: = default
|
| + |
| +void ProcessCoordinationUnitImpl::MeasureProcessCPUUsage() { |
| + cpu_usage_ = process_metrics_->GetPlatformIndependentCPUUsage(); |
| + |
| + repeating_timer_.Start( |
| + FROM_HERE, base::TimeDelta::FromSeconds(kCPUProfilingIntervalInSeconds), |
| + this, &ProcessCoordinationUnitImpl::MeasureProcessCPUUsage); |
| +} |
| + |
| +double ProcessCoordinationUnitImpl::GetCPUUsageForTesting() { |
| + return cpu_usage_; |
| +} |
| + |
| +} // namespace resource_coordinator |