// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ash/crosapi/resource_manager_ash.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace crosapi {
// ResourceManagerAsh
ResourceManagerAsh::ResourceManagerAsh() {
ash::ResourcedClient* client = ash::ResourcedClient::Get();
if (client)
client->AddObserver(this);
}
ResourceManagerAsh::~ResourceManagerAsh() {
ash::ResourcedClient* client = ash::ResourcedClient::Get();
if (client)
client->RemoveObserver(this);
}
void ResourceManagerAsh::BindReceiver(
mojo::PendingReceiver<mojom::ResourceManager> receiver) {
receivers_.Add(this, std::move(receiver));
}
void ResourceManagerAsh::OnMemoryPressure(
ash::ResourcedClient::PressureLevel level,
memory_pressure::ReclaimTarget target) {
for (auto& observer : observers_) {
mojom::MemoryPressurePtr pressure = mojom::MemoryPressure::New();
pressure->level = static_cast<mojom::MemoryPressureLevel>(level);
pressure->reclaim_target_kb = target.target_kb;
pressure->signal_origin = target.origin_time;
observer->MemoryPressure(std::move(pressure));
}
}
void ResourceManagerAsh::AddMemoryPressureObserver(
mojo::PendingRemote<mojom::MemoryPressureObserver> observer) {
mojo::Remote<mojom::MemoryPressureObserver> remote(std::move(observer));
observers_.Add(std::move(remote));
}
void ResourceManagerAsh::DEPRECATED_ReportBackgroundProcesses(
const std::vector<int32_t>& pids) {
NOTREACHED_IN_MIGRATION();
}
void ResourceManagerAsh::ReportPageProcesses(
std::vector<mojom::PageProcessPtr> page_processes) {
ash::ResourcedClient* client = ash::ResourcedClient::Get();
if (!client) {
return;
}
std::vector<ash::ResourcedClient::Process> processes;
for (auto& page_process : page_processes) {
processes.emplace_back(
page_process->pid, page_process->host_protected_page,
page_process->host_visible_page, page_process->host_focused_page,
base::TimeTicks::FromUptimeMillis(page_process->last_visible_ms));
}
client->ReportBrowserProcesses(ash::ResourcedClient::Component::kLacros,
processes);
}
} // namespace crosapi