Interfejs Compute Pressure API

Dowiedz się więcej o obciążeniu obliczeniowym systemu.

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

Interfejs Compute Pressure API udostępnia stany ogólne, które reprezentują obciążenie systemu. Umożliwia to implementacji korzystanie z odpowiednich danych o sprzęcie, aby zapewnić użytkownikom dostęp do całej dostępnej mocy obliczeniowej, o ile system nie jest poddawany niekontrolowanemu obciążeniu.

Obecny stan,

Krok Stan
1. Tworzenie wyjaśnienia Zakończono
2. Tworzenie wstępnej wersji specyfikacji Zakończono
3. Zbieraj opinie i ulepszaj projekt W toku
4. Wersja próbna origin Zakończone
5. Wprowadzenie na rynek Zakończ (Chrome 125)

Wypróbuj interfejs Compute Pressure API

Aby eksperymentować z Compute Pressure API lokalnie, przeczytaj tę stronę.

Rejestracja w wersji próbnej origin

Od wersji Chrome 115 interfejs Compute Pressure API jest dostępny w ramach testowania origin. Oczekuje się, że zakończy się ona w Chrome 123 (29 maja 2024 r.). Zarejestruj się, aby skorzystać z wersji próbnej usługi origin

Przypadki użycia

Główne przypadki użycia, które są obecnie obsługiwane przez interfejs Compute Pressure API, to konferencje wideo i gry wideo.

Te popularne aplikacje działające w czasie rzeczywistym są klasyfikowane jako miękkie. Oznacza to, że jakość usługi spada, jeśli system jest używany w niektórych stanach, ale nie prowadzi do całkowitego awarii systemu. Te aplikacje działające w czasie rzeczywistym korzystają z możliwości dostosowania obciążenia na podstawie wykorzystania procesora lub obciążenia.

Pierwsza wersja tego interfejsu API ma umożliwić podejmowanie takich decyzji dotyczących dostosowywania:

Wideokonferencje

  • Dostosowywanie liczby strumieni wideo wyświetlanych jednocześnie podczas rozmów z wieloma uczestnikami.
  • obniżyć jakość przetwarzania filmu (rozdzielczość filmu, liczba klatek na sekundę);
  • pomijanie nieistotnego przetwarzania wideo, takiego jak niektóre filtry aparatu;
  • Wyłącz niepotrzebne przetwarzanie dźwięku, takie jak wyciszanie szumów WebRTC.
  • W przypadku kodowania wideo i dźwięku (w WebRTC, WebCodecs lub kodowaniu oprogramowania) ustaw pokrętła jakości i szybkości na „szybkość”.

Gry wideo

  • Użyj zasobów o niższej jakości, aby stworzyć film (modele 3D, tekstury, shadery) i dźwięk (głosy, efekty dźwiękowe) do gry.
  • Wyłącz efekty, które powodują mniej realistyczne, nieistotne szczegóły (woda, tkaniny materiał, animacje ognia, jasność skóry, efekty olśnienia lub symulacje fizyczne, które nie wpływają na rozgrywkę).
  • Dostosowywanie ustawień jakości i szybkości w silniku renderowania gry (jakość cieni, filtrowanie tekstur, odległość widoczności).

Technicznie rzecz biorąc, można to osiągnąć, znając stany termiczne (np. czy system jest chłodzony pasywnie) i stany obciążenia procesora w przypadku głównego wątku i elementów pracujących w tle, których używa witryna. Stan termiczny systemu jest stanem globalnym i może być zależny od aplikacji oraz witryn innych niż obserwowana.

Interfejsy

Interfejs Compute Pressure API może być uruchamiany w następujących kontekstach:

  • okno lub wątek główny,
  • Dedykowana instancja robocza
  • Współdzielona instancja robocza

Interfejs Compute Pressure API definiuje 2 nowe interfejsy.

PressureObserver: obiekt do obserwowania obciążenia obliczeniowego dowolnej liczby źródeł w określonym z góry przedziale próbkowania. Pierwsza iteracja w Chromium ujawnia "cpu" jako source. Więcej informacji znajdziesz w sekcji o parametrach. Każdy obserwator może asynchronicznie obserwować trendy zmian ciśnienia w systemie.

PressureRecord: opisuje trend ciśnienia w określonym momencie przejścia. Obiekty tego typu można uzyskać tylko na 2 sposoby: jako argument metody wywołania zwrotnego PressureObserver lub przez wywołanie metody takeRecords() w instancji PressureObserver.

PressureObserver

Po utworzeniu obiektu PressureObserver jest on skonfigurowany tak, aby w określonym interwale próbkowania sprawdzać ciśnienie w obsługiwanych źródłach. Obsługiwane źródła można obserwować indywidualnie lub nieobserwować w dowolnym momencie w okresie istnienia obiektu PressureObserver. Po utworzeniu obiektu nie można zmienić interwału próbkowania.

Zespół

PressureObserver(callback): tworzy nowy obiekt PressureObserver, który wywoła określoną funkcję wywołania zwrotnego, gdy wykryje zmianę wartości obserwowanego źródła.

Konstruktor przyjmuje obowiązkową funkcję wywołania zwrotnego.

Oddzwanianie

callback(): wywołanie funkcji z tablicą niezapomnianych obiektów PressureRecord.

Metody

PressureObserver.observe(source, options): informuje obiekt 'PressureObserver', które źródło ma obserwować, oraz opcjonalnie parametr options.

Opcje

PressureObserverOptions: zawiera interwał próbkowania sampleInterval w milisekundach, w którym użytkownik prosi o aktualizacje.

PressureObserver.unobserve(source): informuje „PressureObserver”, aby przestał obserwować źródło.

PressureObserver.disconnect(): powoduje, że moduł „PressureObserver” przestaje obserwować wszystkie źródła.

PressureObserver.takeRecords(): zwraca sekwencję rekordów od ostatniego wywołania funkcji callback.

static PressureObserver.knownSources() (tylko do odczytu): zwraca znane typy źródeł w kolejności alfabetycznej.

Parametry

source: źródło do obserwacji, np. "cpu". Musi to być jeden z obsługiwanych typów źródeł.

W obecnej wersji Compute Pressure obsługiwana jest tylko wersja "cpu".

PressureRecord

Interfejs PressureRecord Compute Pressure API opisuje trend ciśnienia źródła w określonym momencie przejścia.

Właściwości instancji

PressureRecord.source (tylko do odczytu): zwraca ciąg znaków reprezentujący źródło, z którego pochodzi rekord.

PressureRecord.state (tylko do odczytu): zwraca ciąg znaków reprezentujący zarejestrowany stan ciśnienia.

PressureRecord.time (tylko do odczytu): zwraca liczbę reprezentującą sygnaturę czasową o wysokiej rozdzielczości.

Przykłady

W następnych sekcjach znajdziesz przykładowe zastosowania.

Określanie obsługi interfejsu API

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

Tworzenie obserwatora ciśnienia

Utwórz obserwator ciśnienia, wywołując jego konstruktor z funkcją wywołania zwrotnego, która ma być wykonywana przy każdej aktualizacji ciśnienia:

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

Korzystanie z obserwatora ciśnienia

Istnieją tylko 2 sposoby uruchomienia obserwatora ciśnienia. W przypadku każdego wywołania źródłaobserver.observe(source).

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

W tym przykładzie "cpu" to interesujące nas źródło ciśnienia. Obecnie jest to jedyne dostępne źródło. W przyszłości mogą pojawić się inne źródła, takie jak "gpu", "power" czy "thermals".

sampleInterval z interwałem próbkowania 2000 ms oznacza, że aktualizacje będą się odbywać co najwyżej co 2 sekundy.

Jeśli system nie może wyświetlić żądanego odstępu między próbkami, podaje próbki z najbardziej odpowiednim odstępem. Jeśli na przykład żądany jest interwał 2000 ms, ale system może dostarczyć próbki o maksymalnej długości 1000 ms, zostanie wybrany interwał 1000 ms.

Aby przestać obserwować źródło, użyj metody unobserve(), jak w tym przykładzie:

observer.unobserve('cpu');

Aby odznaczyć wszystkie źródła naraz, użyj metody disconnect(), jak w tym przykładzie:

observer.disconnect();

Pobieranie rekordów ciśnienia

Rekordy ciśnienia można pobrać za pomocą funkcji wywołania zwrotnego, która jest wywoływana za każdym razem, gdy nastąpi zmiana stanu ciśnienia.

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 });

Użytkownik może też wymusić odczytanie wartości PressureRecord, wywołując metodę takeRecords().

Metoda takeRecords() interfejsu PressureObserver zwraca tablicę obiektów PressureRecords przechowywanych w obserwatorze ciśnienia, opróżniając go.

Najczęstszym zastosowaniem jest natychmiastowe pobieranie wszystkich oczekujących rekordów ciśnienia, które nie zostały jeszcze przetworzone przez funkcję wywołania obserwatora, przed rozłączeniem obserwatora, aby można było przetworzyć wszystkie oczekujące rekordy podczas zamykania obserwatora.

Wywołanie tej metody powoduje wyczyszczenie listy oczekujących rekordów, więc wywołanie zwrotne nie zostanie wykonane.

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);

Prześlij opinię

Czy coś w interfejsie API nie działa zgodnie z oczekiwaniami? Czy w przypadku interfejsu API, którego używasz, brakuje jakiejś metody lub właściwości? Zgłoś problem ze specyfikacją lub skomentuj istniejący problem w odpowiednim repozytorium GitHub.

Zgłaszanie problemów z implementacją

Czy znalazłeś błąd w implementacji Chromium? Czy implementacja różni się od specyfikacji? Zgłoś błąd na stronie new.crbug.com. Pamiętaj, aby podać jak najwięcej szczegółów i instrukcje odtwarzania błędu. W polu Składniki wpisz Blink>PerformanceAPIs>ComputePressure.

Zasoby