PressureObserver: observe() method

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

The observe() method of the PressureObserver interface tells the pressure observer to start observing pressure changes. After this method is called, the observer will call its callback function when a pressure record for the specified source is observed.

When a matching PressureRecord is obtained, the pressure observer's callback function is invoked.


observe(source, options)



A string specifying which source to observe. See PressureRecord.source for a list of sources and PressureObserver.knownSources for a list of sources the user agent supports.

options Optional

An object to configure observation with the following properties:

sampleInterval Optional

A number representing the requested sampling interval expressed in milliseconds. Defaults to 0 meaning it will get updates as fast as the system can handle it.

Return value

A Promise that fulfils with undefined.


NotAllowedError DOMException

Thrown if the the Compute Pressure API is disallowed by a compute-pressure Permissions Policy.

NotSupportedError DOMException

Thrown if the source parameter is not one of the supported sources for this user agent.


Log current pressure

This example creates a PressureObserver and takes action whenever there is a pressure change. The sample interval is set to 1000ms, meaning that there will be updates at most every second.

function callback(records) {
  const lastRecord = records[records.length - 1];
  console.log(`Current pressure ${lastRecord.state}`);
  if (lastRecord.state === "critical") {
    // disable video feeds
  } else if (lastRecord.state === "serious") {
    // disable video filter effects
  } else {
    // enable all video feeds and filter effects

try {
  const observer = new PressureObserver(callback);
  await observer.observe("cpu", {
    sampleInterval: 1000, // 1000ms
} catch (error) {
  // report error setting up the observer


Compute Pressure Level 1
# the-observe-method

Browser compatibility

BCD tables only load in the browser