API расчета давления

Получите информацию о вычислительной нагрузке вашей системы.

Кеннет Кристиансен
Kenneth Christiansen
Arnaud (Arno) Mandy

API Compute Pressure предлагает состояния высокого уровня, которые отражают нагрузку на систему. Это позволяет реализации использовать правильные показатели базового оборудования, чтобы гарантировать, что пользователи смогут использовать всю доступную им вычислительную мощность, пока система не находится в неуправляемой нагрузке.

Текущее состояние

Шаг Положение дел
1. Создайте объяснитель Полный
2. Создайте первоначальный проект спецификации. Полный
3. Соберите отзывы и доработайте дизайн В ходе выполнения
4. Пробная версия происхождения Полный
5. Запуск Полный (Хром 125)

Попробуйте API вычисления давления

Чтобы поэкспериментировать с API Compute Pressure локально, прочитайте эту страницу .

Зарегистрируйтесь для участия в пробной версии Origin

Начиная с Chrome 115, API Compute Pressure доступен в виде пробной версии . Ожидается, что его поддержка закончится в Chrome 123 (29 мая 2024 г.). Зарегистрируйтесь для участия в пробной версии Origin .

Случаи использования

Основными вариантами использования, улучшенными с помощью текущего API Compute Pressure, являются видеоконференции и видеоигры.

Эти популярные приложения реального времени относятся к категории программных . То есть качество обслуживания ухудшается, если система выходит за пределы определенных состояний, но не приводит к полному сбою системы. Эти программные приложения реального времени значительно выигрывают от возможности адаптировать свои рабочие нагрузки в зависимости от потребления или нагрузки ЦП.

В частности, первая версия этого API призвана обеспечить следующие решения по адаптации.

Видео-конференция

  • Настройте количество видеопотоков, показываемых одновременно во время разговоров с большим количеством участников.
  • Уменьшите качество обработки видео (разрешение видео, кадров в секунду).
  • Пропустите несущественную обработку видео, например некоторые фильтры камеры.
  • Отключите ненужную обработку звука, например подавление шума WebRTC.
  • Поверните ручки «качество-скорость» и «размер-зависимость скорости» в сторону «скорости» при кодировании видео и аудио (в WebRTC, WebCodecs или программном кодировании).

Видеоигры

  • Используйте ресурсы более низкого качества для создания игрового видео (3D-модели, текстуры, шейдеры) и звука (голоса, звуковые эффекты).
  • Отключите эффекты, которые приводят к менее реалистичным несущественным деталям (анимация воды, ткани, огня, яркости кожи, эффектов бликов или физических симуляций, которые не влияют на игровой процесс).
  • Настройте регуляторы качества и скорости в движке рендеринга игры (качество теней, фильтрация текстур, расстояние обзора).

Технически это можно сделать, зная температурные состояния (например, пассивно ли охлаждается система) и нагрузку на процессор для основного потока и рабочих процессов, которые использует сайт. Тепловое состояние системы является глобальным состоянием, на которое могут влиять приложения и сайты, отличные от сайта наблюдения.

Интерфейсы

API Compute Pressure можно запускать в следующих контекстах:

  • Окно или основной поток
  • Преданный работник
  • Общий работник

API Compute Pressure определяет два новых интерфейса.

PressureObserver : объект для наблюдения за расчетным давлением любого количества источников с заранее определенным интервалом выборки. Первая итерация в Chromium предоставляет "cpu" в качестве source . Более подробную информацию смотрите в разделе о параметрах . Каждый наблюдатель может асинхронно наблюдать тенденции изменения давления в системе.

PressureRecord : описывает тенденцию давления в определенный момент перехода. Объекты этого типа можно получить только двумя способами: в качестве входных данных для обратного вызова PressureObserver или путем вызова метода takeRecords() в экземпляре PressureObserver .

ДавлениеОбсервер

При создании объекта PressureObserver он настраивается на наблюдение за давлением поддерживаемых источников с заданным интервалом выборки. Поддерживаемые источники можно наблюдать или не наблюдать по отдельности в любой момент времени существования объекта PressureObserver . Интервал выборки не может быть изменен после создания объекта.

Конструктор

PressureObserver(callback) : Создает новый объект PressureObserver , который будет вызывать указанную функцию обратного вызова, когда обнаружит, что произошло изменение значений наблюдаемого источника.

Конструктор принимает обязательную функцию обратного вызова .

Перезвонить

callback() : обратный вызов вызывается с массивом непрочитанных объектов PressureRecord .

Методы

PressureObserver.observe(source, options) : сообщает «PressureObserver», какой источник наблюдать, а также дополнительные options в качестве параметров.

Параметры

PressureObserverOptions : содержит интервал выборки sampleInterval в миллисекундах, с которым пользователь запрашивает обновления.

PressureObserver.unobserve(source) : сообщает «PressureObserver» прекратить наблюдение за источником.

PressureObserver.disconnect() : сообщает «PressureObserver» прекратить наблюдение за всеми источниками.

PressureObserver.takeRecords() : возвращает последовательность записей с момента последнего вызова обратного вызова.

static PressureObserver.knownSources() (только для чтения): возвращает известные типы источников пользовательского агента в алфавитном порядке.

Параметры

source : источник, который нужно наблюдать, например "cpu" . Это должен быть один из поддерживаемых типов источника .

В текущей версии Compute Pressure поддерживается только "cpu" .

ДавлениеРекорд

Интерфейс PressureRecord API Compute Pressure описывает динамику давления источника в определенный момент перехода.

Свойства экземпляра

PressureRecord.source (только для чтения): возвращает строку, представляющую исходный источник, из которого поступает запись.

PressureRecord.state (только для чтения): возвращает строку, представляющую записанное состояние давления.

PressureRecord.time (только для чтения): возвращает число, представляющее временную метку высокого разрешения.

Примеры

В следующих разделах приведены примерные примеры использования.

Определить поддержку API

if ('PressureObserver' in globalThis) {
  // The Compute Pressure API is supported.
}

Создайте наблюдателя давления

Создайте наблюдатель давления, вызвав его конструктор с функцией обратного вызова, которая будет запускаться при каждом обновлении давления:

const observer = new PressureObserver((records) => {
  /* ... */
});

Использование наблюдателя давления

Есть только один способ запустить наблюдатель давления. Для каждого источника вызовите observer.observe(source) .

observer.observe("cpu" { sampleInterval: 2_000 });

В этом примере "cpu" — это интересующий нас источник давления. На данный момент это единственный доступный источник. В будущем могут появиться и другие источники, такие как "gpu" , "power" или "thermals" .

Интервал выборки sampleInterval , равный 2000 мс, означает, что обновления будут происходить не чаще, чем каждые две секунды.

Если запрошенный интервал отбора проб не может быть обслужен системой, система предоставит пробы в наиболее подходящий из существующих интервалов. Например, если запрошен интервал 2000 мс, но система может предоставить образцы только с максимальной длительностью 1000 мс, будет выбрано 1000 мс.

Чтобы прекратить наблюдение за источником, используйте метод unobserve() , как в следующем примере:

observer.unobserve('cpu');

Чтобы отменить наблюдение всех источников одновременно, используйте метод disconnect() , как в следующем примере:

observer.disconnect();

Получить записи давления

Записи о давлении можно получить с помощью функции обратного вызова, которая будет вызываться каждый раз, когда происходит изменение состояния давления.

function callback(records) {
  const lastRecord = records[records.length - 1];
  console.log(`Current pressure ${lastRecord.state}`);
  if (lastRecord.state === 'critical') {
    // Reduce workers load by 4.
  } else if (lastRecord.state === 'serious') {
    // Reduce workers load by 2.
  } else {
    // Do not reduce.
  }
}

const observer = new PressureObserver(callback);
await observer.observe('cpu', { sampleInterval: 1_000 });

Пользователь также может принудительно прочитать PressureRecord , вызвав метод takeRecords() .

Метод takeRecords() интерфейса PressureObserver возвращает массив объектов PressureRecords , хранящихся в наблюдателе давления, и очищает его.

Наиболее распространенным вариантом использования этого является немедленная выборка всех ожидающих записей давления, еще не обработанных функцией обратного вызова наблюдателя, перед отключением наблюдателя, чтобы любые ожидающие записи могли быть обработаны при выключении наблюдателя.

Вызов этого метода очищает список ожидающих записей, поэтому обратный вызов не будет запущен.

const observer = new PressureObserver((records) => {
  /* Do something with records. */
});

await observer.observe('cpu', { sampleInterval: 1_000 });

setTimeout(() => {
  // Forced records reading.
  const records = observer.takeRecords();
  observer.disconnect();
  // Do something with last records if any.
}, 2000);

Поделитесь своим отзывом

Что-то в API работает не так, как вы ожидали? Видите ли вы какой-либо недостающий метод или свойство для использования API? Сообщите о проблеме со спецификацией или прокомментируйте существующую в соответствующем репозитории GitHub .

Сообщить о проблеме с реализацией

Вы нашли ошибку в реализации Chromium? Или реализация отличается от спецификации? Сообщите об ошибке на сайте new.crbug.com . Обязательно укажите как можно больше подробностей, инструкции по воспроизведению и введите Blink>PerformanceAPIs>ComputePressure в поле «Компоненты» .

Ресурсы