Zapoznaj się z informacjami o obciążeniu mocy obliczeniowej systemu.
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
- Specyfikacja
- Publiczne wyjaśnienie
- Compute Pressure API Demo | Compute Pressure API Demo source
- Błąd śledzenia w Chromium
- Wpis na temat ChromeStatus.com
- Składnik Blink:
Blink>PerformanceAPIs>ComputePressure
- Sprawdzanie tagów
- Gotowy do przetestowania
- Strona z instrukcją
- Intencja przeprowadzenia eksperymentu