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 danych sprzętowych, aby użytkownicy mogli korzystać z całej dostępnej 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 testowania origin. Prawdopodobnie zakończy się w Chrome 123 (29 maja 2024 r.). Zarejestruj się, aby skorzystać z wersji próbnej origin.

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 jest uruchamiany poza określonymi stanami, ale nie powoduje jego całkowitej awarii. Te aplikacje działające w miękkim czasie rzeczywistym w dużym stopniu wykorzystują możliwość dostosowywania zbiorów zadań w zależności od zużycia procesora lub jego obciążenia.

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ęku (w WebCodecs, WebCodecs lub oprogramowaniu) zawęź pokrętła „jakość” w „szybkości” i „rozmiar” do „szybkości”

gry wideo.

  • Do utworzenia filmu z gry (modeli 3D, tekstur, cienia) 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 (woda, tkanina, animacje ognia, luminacja skóry, efekty odblasków lub symulacje fizyczne, które nie mają wpływu na rozgrywkę).
  • Pozmieniaj przyciski jakości i szybkości w silniku renderowania gry (jakość cieni, filtrowanie tekstur, odległość widoku).

Technicznie rzecz biorąc, można to osiągnąć, znając temperaturę (np. pasywnie chłodzenie systemu) oraz stany ciśnienia procesora w wątku głównym i pracownikach używanych w witrynie. Stan termiczny systemu to stan globalny, na który mają wpływ 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 ciśnienia obliczeniowego dowolnej liczby źródeł we wstępnie zdefiniowanym 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ć zmiany ciśnienia w układzie.

PressureRecord: opisuje trend ciśnienia w konkretnym momencie przejściowym. 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

Gdy tworzony jest obiekt PressureObserver, jest on skonfigurowany do obserwowania nacisku obsługiwanych źródeł w określonych odstępach czasu. Obsługiwane źródła mogą być zaobserwowane pojedynczo lub nieobecne w dowolnym momencie obsługi 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, że nastąpiła zmiana wartości obserwowanego źródła.

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

Oddzwanianie

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

Metody

PressureObserver.observe(source, options): informuje parametr „ciśnienieObserver”, który źródło obserwacji ma być obserwowany, i opcjonalnie options w charakterze parametrów.

Opcje

PressureObserverOptions: zawiera odstęp między próbką (sampleInterval) w milisekundach, po którym użytkownik wysyła żądanie aktualizacji.

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

PressureObserver.disconnect(): sprawia, że parametr „PressureObserver” przestanie obserwować wszystkie źródła.

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

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

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 związany ze źródłem 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ę reprezentującą sygnaturę czasową w wysokiej rozdzielczości.

Przykłady

W sekcjach poniżej znajdziesz przykładowe przykłady użycia.

Określanie obsługi interfejsu API

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

Utwórz 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) => {
  /* ... */
});

Wykorzystanie czujnika 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" { sampleInterval: 2_000 });

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 inne źródła, np. "gpu", "power" lub "thermals".

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 odstęp czasu nie może być obsługiwany przez system, udostępni on próbki w najodpowiedniejszych odstępach czasu. Jeśli np. wymagany jest interwał 2000 ms, ale system może dostarczyć tylko próbki o długości maksymalnie 1000 ms, zostanie wybrana wartość 1000 ms.

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

observer.unobserve('cpu');

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

observer.disconnect();

Pobierz zapisy na temat 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);
await observer.observe('cpu', { sampleInterval: 1_000 });

Użytkownik może też wymusić odczyt metody 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 nacisku, które nie zostały jeszcze przetworzone przez funkcję wywołania zwrotnego obserwatora, przed odłączeniem obserwatora, aby można było przetworzyć wszelkie oczekujące rekordy przy zamykaniu 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. */
});

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 nie działa w interfejsie API zgodnie z oczekiwaniami? Czy dostrzegasz jakieś brakujące metody lub właściwości korzystania z interfejsu API? Zgłoś problem ze specyfikacją lub dodaj komentarz do istniejącego już pliku 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 i instrukcje odtwarzania, a następnie w polu Komponenty wpisz Blink>PerformanceAPIs>ComputePressure.

Zasoby