Otrzymuj informacje o ciśnieniu obliczeniowym w systemie.
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
- Specyfikacja
- Wyjaśnienie publiczne
- Prezentacja interfejsu Compute Pressure API | Źródło wersji demonstracyjnej interfejsu Compute Pressure API
- Błąd śledzenia w Chromium
- Wpis na ChromeStatus.com
- Komponent Blink:
Blink>PerformanceAPIs>ComputePressure
- Przegląd tagów
- Wersja próbna
- Strona HOWTO
- Zamiar eksperymentu