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..9e53393cf11fa71f89c3ba23254be92d07f6d240 |
| --- /dev/null |
| +++ b/services/resource_coordinator/coordination_unit/process_coordination_unit_impl.cc |
| @@ -0,0 +1,67 @@ |
| +// 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/17 23:06:06
nit: ditch empty lines here
matthalp
2017/05/18 16:13:46
Done.
|
| +class ServiceContextRef; |
| + |
| +} // namespace service_manager |
|
oystein (OOO til 10th of July)
2017/05/17 23:06:06
nit: ditto for ditching comment; no need when ther
matthalp
2017/05/18 16:13:46
Done.
|
| + |
| +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 |
| + |
| + ScheduleProcessCPUProfiling(base::TimeDelta()); |
| +} |
| + |
| +ProcessCoordinationUnitImpl::~ProcessCoordinationUnitImpl() {} |
| + |
| +void ProcessCoordinationUnitImpl::ScheduleProcessCPUProfiling( |
|
oystein (OOO til 10th of July)
2017/05/17 23:06:06
I would just ditch this function and just start th
matthalp
2017/05/18 16:13:46
Done.
|
| + base::TimeDelta delay) { |
| + repeating_timer_.Start(FROM_HERE, delay, this, |
| + &ProcessCoordinationUnitImpl::MeasureProcessCPUUsage); |
| +} |
| + |
| +void ProcessCoordinationUnitImpl::MeasureProcessCPUUsage() { |
| + cpu_usage_ = process_metrics_->GetPlatformIndependentCPUUsage(); |
| + |
| + ScheduleProcessCPUProfiling( |
| + base::TimeDelta::FromSeconds(kCPUProfilingIntervalInSeconds)); |
| +} |
| + |
| +double ProcessCoordinationUnitImpl::GetCPUUsageForTesting() { |
| + return cpu_usage_; |
| +} |
| + |
| +} // namespace resource_coordinator |