Interfejs Compute Pressure API

Zapoznaj się z informacjami o obciążeniu mocy obliczeniowej 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 Complete (Chrome 125)

Wypróbuj interfejs Compute Pressure API

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

Zarejestruj się, aby wziąć udział w testach origin

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

Zastosowania

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 na celu umożliwienie podanych niżej decyzji związanych z adaptacją.

Wideokonferencje

  • Dostosowywanie liczby strumieni wideo wyświetlanych jednocześnie podczas rozmów z wieloma uczestnikami.
  • Zmniejsz jakość przetwarzania wideo (rozdzielczość wideo, klatki na sekundę).
  • pomijanie nieistotnego przetwarzania wideo, takiego jak niektóre filtry aparatu;
  • Wyłącz mniej ważne przetwarzanie dźwięku, na przykład eliminowanie szumu WebRTC.
  • W kodowaniu wideo i audio (w WebRTC, WebCodecs lub kodowaniu programowym) przestaw pokrętła „jakość/szybkość” oraz „rozmiar/szybkość” do „szybkości” w kodowaniu wideo i audio.

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 dotyczące głównego wątku oraz pracowników, których używa witryna. Stan termiczny systemu jest stanem globalnym i może być zależny od aplikacji oraz witryn innych niż witryna obserwacyjna.

Interfejsy

Interfejs Compute Pressure API można uruchamiać 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 cyklu życia obiektu PressureObserver. Po utworzeniu obiektu nie można zmienić interwału próbkowania.

Zespół

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

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

Oddzwanianie

callback(): wywołanie funkcji z tablicami nieprzeczytanych 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(): informuje „PressureObserver”, aby przestał 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ł klienta użytkownika w porządku alfabetycznym.

Parametry

source: źródło do obserwacji, na przykład "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 interfejsu 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ślenie 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. Dla każdego wywołania źródłowego observer.observe(source).

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

W tym przykładzie "cpu" to źródło nacisku, który nas interesuje. Na razie 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 od razu odznaczyć wszystkie źródła, 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ć odczyt elementu 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 wszystkie oczekujące rekordy mogły zostać przetworzone podczas zamykania obserwatora.

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

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 jest coś, co w interfejsie API nie działa zgodnie z oczekiwaniami? Czy brakuje jakiejś metody lub właściwości w interfejsie API, którego używasz? Zgłoś problem ze specyfikacją lub skomentuj istniejący problem w odpowiednim repozytorium GitHub.

Zgłoś problem z implementacją

Czy znalazłeś/znalazłaś 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, instrukcje odtwarzania błędu oraz wpisać Blink>PerformanceAPIs>ComputePressure w polu Składniki.

Zasoby