services/device/compute_pressure/README.md
This directory contains the service-side implementation of the Compute Pressure API.
The system is made up of the following components.
device::mojom::PressureManager, defined in services, is the interface
implemented in the browser side (content::PressureServiceBase) to communicate
with the renderer and implemented in services (device::PressureManagerImpl)
to communicate with the browser side.
device::PressureManagerImpl is the top-level class for the services side
implementation. The class is responsible for handling the communication
between the browser and services sides.
device::mojom::PressureClient is the interface that client of the
device::mojom::PressureManager interface must implement to receive
device::mojom::PressureUpdate.
device::mojom::PressureUpdate represents the device's compute pressure update,
composed of the device::mojom::PressureState and the timestamp.
This information is collected by device::CpuProbe and bubbled up by
device::PlatformCollector to device::PressureManagerImpl, which broadcasts
the information to the content::PressureClientImpl instances first and then
to blink::PressureClientImpl instances.
device::CpuProbeManager is an interface for measuring the device's compute
pressure state. It maintains a system_cpu::CpuProbe and requests CPU samples
from it at regular intervals.
content::PressureService* is the bridge between the renderer and the
services sides. This class maintains content::PressureClientImpl instances
per source type.
content::PressureClientImpl implements the device::mojom::PressureClient
interface to receive device::mojom::PressureUpdate from
device::PressureManagerImpl instance and broadcasts the information to the
blink::PressureClientImpl instance.
blink::PressureObserver implements bindings for the PressureObserver
interface. There can be more than one PressureObserver per frame.
blink::PressureObserverManager keeps track of blink::PressureClientImpl and
the connection to the content::PressureService* instance. The class is
responsible for handling the communication between the renderer and browser
sides.
blink::PressureClientImpl implements the device::mojom::PressureClient
interface to receive device::mojom::PressureUpdate from
content::PressureClientImpl and broadcasts the information to active
blink::PressureObserver. This class also keeps track of State and active
blink::PressureObserver per source type.