blob: 84879fb933e5eab1d1cf328ed53efc02ca25a344 [file] [log] [blame]
// 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/coordination_unit_introspector_impl.h"
#include <vector>
#include "base/process/process_handle.h"
#include "base/time/time.h"
#include "services/resource_coordinator/coordination_unit/frame_coordination_unit_impl.h"
#include "services/resource_coordinator/coordination_unit/page_coordination_unit_impl.h"
#include "services/resource_coordinator/coordination_unit/process_coordination_unit_impl.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
namespace resource_coordinator {
CoordinationUnitIntrospectorImpl::CoordinationUnitIntrospectorImpl() = default;
CoordinationUnitIntrospectorImpl::~CoordinationUnitIntrospectorImpl() = default;
void CoordinationUnitIntrospectorImpl::GetProcessToURLMap(
GetProcessToURLMapCallback callback) {
std::vector<resource_coordinator::mojom::ProcessInfoPtr> process_infos;
std::vector<ProcessCoordinationUnitImpl*> process_cus =
ProcessCoordinationUnitImpl::GetAllProcessCoordinationUnits();
for (auto* process_cu : process_cus) {
int64_t pid;
if (!process_cu->GetProperty(mojom::PropertyType::kPID, &pid))
continue;
mojom::ProcessInfoPtr process_info(mojom::ProcessInfo::New());
process_info->pid = pid;
DCHECK_NE(base::kNullProcessId, process_info->pid);
int64_t launch_time;
if (process_cu->GetProperty(mojom::PropertyType::kLaunchTime,
&launch_time)) {
process_info->launch_time = base::Time::FromTimeT(launch_time);
}
std::set<PageCoordinationUnitImpl*> page_cus =
process_cu->GetAssociatedPageCoordinationUnits();
std::vector<resource_coordinator::mojom::PageInfoPtr> page_infos;
for (PageCoordinationUnitImpl* page_cu : page_cus) {
int64_t ukm_source_id;
if (page_cu->GetProperty(
resource_coordinator::mojom::PropertyType::kUKMSourceId,
&ukm_source_id)) {
mojom::PageInfoPtr page_info(mojom::PageInfo::New());
page_info->ukm_source_id = ukm_source_id;
page_info->is_visible = page_cu->IsVisible();
page_info->time_since_last_visibility_change =
page_cu->TimeSinceLastVisibilityChange();
page_info->time_since_last_navigation =
page_cu->TimeSinceLastNavigation();
process_info->page_infos.push_back(std::move(page_info));
}
}
process_infos.push_back(std::move(process_info));
}
std::move(callback).Run(std::move(process_infos));
}
void CoordinationUnitIntrospectorImpl::BindToInterface(
resource_coordinator::mojom::CoordinationUnitIntrospectorRequest request,
const service_manager::BindSourceInfo& source_info) {
bindings_.AddBinding(this, std::move(request));
}
} // namespace resource_coordinator