Interfejs Compute Pressure API

Otrzymuj informacje o ciśnieniu obliczeniowym w systemie.

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

Interfejs Compute Pressure API udostępnia stany wysokiego poziomu, które odzwierciedlają nacisk na system. Umożliwia implementację z użyciem odpowiednich podstawowych wskaźników sprzętowych, aby użytkownicy mogli korzystać z całej dostępnej dla nich mocy obliczeniowej, o ile system nie jest podatny na stres.

Obecny stan,

Step Stan
1. Utwórz wyjaśnienie Zakończono
2. Utwórz wstępną wersję roboczą specyfikacji Zakończono
3. Zbieranie opinii i ulepszanie projektu W toku
4. Testowanie origin Ukończono
5. Uruchomienie kampanii Complete (Chrome 125)

Wypróbuj interfejs Compute Pressure API

Jeśli chcesz poeksperymentować z interfejsem Compute Pressure API lokalnie, przeczytaj tę stronę.

Zarejestruj się, aby korzystać z wersji próbnej origin

Od wersji Chrome 115 interfejs Compute Pressure API jest dostępny w ramach testów origin. Prawdopodobnie zakończy się ona w Chrome 123 (29 maja 2024 r.). Zarejestruj się tutaj

Zastosowania

Głównymi przypadkami użycia wprowadzonymi przez obecny interfejs Compute Pressure API są 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 pogarsza się, jeśli system działa poza określonymi stanami, ale nie powoduje jego całkowitej awarii. Te elastyczne aplikacje czasu rzeczywistego w dużym stopniu korzystają z możliwości dostosowywania zbiorów zadań w zależności od zużycia procesora lub obciążenia procesora.

Pierwsza wersja tego interfejsu API ma na celu umożliwienie następujących decyzji adaptacyjnych.

Wideokonferencje

  • Możesz dostosować liczbę kanałów wideo wyświetlanych jednocześnie w trakcie rozmów z wieloma uczestnikami.
  • Obniż jakość przetwarzania wideo (rozdzielczość wideo, liczbę klatek na sekundę).
  • Pomiń mniej ważne przetwarzanie wideo, takie jak niektóre filtry w aparacie.
  • Wyłącz mniej ważne przetwarzanie dźwięku, takie jak eliminowanie szumu WebRTC.
  • W kodowaniu wideo i dźwiękowym (w WebCodecs, WebCodecs lub oprogramowaniu) zawęź pokrętła kontroli jakości i szybkości oraz rozmiaru i rozmiaru na „prędkość”.

gry wideo.

  • Do skomponowania filmu z gry (modeli 3D, tekstur, cieniowania) i dźwięku (głosy, efekty dźwiękowe) użyj zasobów niższej jakości.
  • Wyłącz efekty, dla których pojawiają się mniej realistyczne szczegóły, np. woda, tkanina, animacje ognia, luminacja skóry, efekty odblasków lub symulacje fizyczne, które nie mają wpływu na rozgrywkę.
  • Pozmieniaj parametry jakości i szybkości w silniku renderowania gry (jakość cieni, filtrowanie tekstur, odległość widoku).

Technicznie rzecz biorąc, można to uzyskać dzięki informacjom o temperaturze (np. czy system jest pasywnie chłodzony) oraz o stanach ciśnienia procesora w wątku głównym i pracownikach używanych w witrynie. Stan termiczny systemu to stan globalny, na który mogą wpływać aplikacje i strony inne niż strona obserwacyjna.

Interfejsy

Interfejs Compute Pressure API można uruchamiać w tych kontekstach:

  • Okno lub wątek główny
  • Dedykowana instancja robocza
  • Udostępniona instancja robocza

Compute Pressure API definiuje 2 nowe interfejsy.

PressureObserver: obiekt do obserwacji presji obliczeniowej dowolnej liczby źródeł we wstępnie zdefiniowanych odstępach czasu próbkowania. Pierwsze wystąpienie w Chromium ujawnia "cpu" jako source. Więcej informacji znajdziesz w sekcji o parametrach. Każdy obserwator może asynchronicznie obserwować zmiany ciśnienia w układzie.

PressureRecord: opisuje trend presji w konkretnym momencie przejścia. Obiekty tego typu można uzyskać tylko na 2 sposoby: jako dane wejściowe dla wywołania zwrotnego PressureObserver lub przez wywołanie metody takeRecords() w instancji PressureObserver.

PressureObserver

Po utworzeniu obiektu PressureObserver jest on skonfigurowany do obserwowania ciśnienia obsługiwanych źródeł w określonych odstępach czasu próbki. Obsługiwane źródła mogą być zaobserwowane pojedynczo lub niewidoczne w dowolnym momencie w czasie działania obiektu PressureObserver. Po utworzeniu obiektu nie można zmienić interwału próbki.

Zespół

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

Jako parametry konstruktor przyjmuje obowiązkową funkcję wywołania zwrotnego i opcjonalne opcje.

Oddzwanianie

callback(): wywołanie zwrotne jest wywoływane z tablicą nieprzeczytanych obiektów PressureRecord.

Opcje

PressureObserverOptions: zawiera interwał próbki (sampleInterval w milisekundach), po którym użytkownik wysyła żądanie aktualizacji.

Metody

PressureObserver.observe(source): informuje parametr „PressureObserver” (serwer ciśnienia), które ma obserwować.

PressureObserver.unobserve(source): informuje serwer ciśnienia, aby przestał obserwować źródło.

PressureObserver.disconnect(): informuje serwer ciśnienia, aby przestał obserwować wszystkie źródła.

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

static PressureObserver.supportedSources() (tylko do odczytu): zwraca typy źródeł obsługiwane przez sprzęt.

Parametry

source: źródło, które należy obserwować, np. "cpu". Musi to być jeden z obsługiwanych typów źródeł.

W bieżącej wersji narzędzia Compute Pressure obsługiwana jest tylko wartość "cpu".

PressureRecord

Interfejs PressureRecord interfejsu Compute Pressure API opisuje trend ciśnienia na źródle 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 nacisku.

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

Przykłady

Czy interfejs Compute Pressure API jest obsługiwany?

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

Tworzenie obserwatora ciśnienia

Utwórz obserwatora nacisku, wywołując jego konstruktor z funkcją wywołania zwrotnego, który będzie uruchamiany przy każdej zmianie ciśnienia:

const observer = new PressureObserver(
  (records) => { /* ... */ },
  { sampleInterval: 2000 }
);

Interwał próbki (sampleInterval) wynoszący 2000 ms oznacza, że aktualizacje będą udostępniane nie częściej niż co 2 sekundy.

Jeśli żądany interwał próbkowania nie może być obsługiwany przez system. System będzie dostarczać próbki w najodpowiedniejszych odstępach czasu. Jeśli np. wymagany jest odstęp 2000 ms, ale system może dostarczyć próbki tylko z maksymalną szybkością 1000 ms, zostanie wybrana wartość 1000 ms.

Korzystanie z miernika ciśnienia

Pomiar ciśnienia można uruchomić tylko w jeden sposób. Dla każdego wywołania źródłowego observer.observe(source).

observer.observe("cpu");

W tym przykładzie interesujące nas źródło presji jest "cpu". Obecnie jest to jedyne dostępne źródło. W przyszłości mogą być dostępne także inne źródła, np. "gpu", "power" lub "thermals".

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

observer.unobserve("cpu");

Aby wyłączyć obserwowanie wszystkich źródeł jednocześnie, użyj metody disconnect(), jak w tym przykładzie:

observer.disconnect();

Zbieranie zapisów ciśnienia

Rekordy ciśnienia można pobierać za pomocą funkcji wywołania zwrotnego, która będzie wywoływana za każdym razem, gdy zachodzi 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, { sampleInterval: 1000 });
await observer.observe("cpu");

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 obserwatorium ciśnienia, opróżniając ją.

Najczęstszym przypadkiem użycia jest natychmiastowe pobranie wszystkich oczekujących zapisów o ciśnieniu, które nie zostały jeszcze przetworzone przez funkcję wywołania zwrotnego obserwatora, przed odłączeniem obserwatora, tak aby wszelkie oczekujące rekordy mogły być przetworzone podczas wyłączania obserwatora.

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

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

await observer.observe("cpu");

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

Opowiedz nam o projekcie interfejsu API

Czy jest coś, co nie działa w interfejsie API zgodnie z oczekiwaniami? Czy dostrzegasz jakieś brak metody lub właściwości korzystania z interfejsu API? Zgłoś problem ze specyfikacją lub skomentuj już problem w odpowiednim repozytorium GitHub.

Zgłoś problem z implementacją

Czy wystąpił błąd w implementacji Chromium? A może implementacja różni się od specyfikacji? Zgłoś błąd na stronie new.crbug.com. Podaj jak najwięcej szczegółów, proste instrukcje odtwarzania i wpisz Blink>PerformanceAPIs>ComputePressure w polu Komponenty.

Przydatne linki