Dowiedz się więcej o obciążeniu obliczeniowym 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 roboczej specyfikacji | Zakończono |
3. Zbieraj opinie i ulepszaj projekt | W toku |
4. Wersja próbna origin | Zakończone |
5. Wprowadzenie na rynek | Zakończ (Chrome 125) |
Wypróbuj interfejs Compute Pressure API
Aby eksperymentować z Compute Pressure API lokalnie, przeczytaj tę stronę.
Rejestracja w wersji próbnej origin
Od wersji Chrome 115 interfejs Compute Pressure API jest dostępny w ramach testowania 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
Przypadki użycia
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 poza określonych 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 umożliwić podejmowanie takich decyzji dotyczących dostosowywania:
Wideokonferencje
- Dostosowywanie liczby strumieni wideo wyświetlanych jednocześnie podczas rozmów z wieloma uczestnikami.
- obniżyć jakość przetwarzania filmu (rozdzielczość, liczba klatek na sekundę);
- pomijanie nieistotnego przetwarzania wideo, takiego jak niektóre filtry aparatu;
- Wyłącz niepotrzebne przetwarzanie dźwięku, takie jak wyciszanie szumów WebRTC.
- W przypadku kodowania wideo i dźwięku (w WebRTC, WebCodecs lub kodowaniu oprogramowania) ustaw pokrętła jakości i szybkości na „szybkość”.
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że być uruchamiany 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 trakcie trwania obiektu PressureObserver
. Po utworzeniu obiektu nie można zmienić interwału próbkowania.
Zespół
PressureObserver(callback)
: tworzy nowy obiekt PressureObserver
, który wywoła określoną funkcję wywołania zwrotnego, gdy wykryje zmianę wartości obserwowanego źródła.
Konstruktor przyjmuje obowiązkową funkcję wywołania zwrotnego.
Oddzwanianie
callback()
: wywołanie funkcji z tablicą niezapomnianych 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 moduł „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ł w kolejności alfabetycznej.
Parametry
source
: źródło do obserwacji, np. "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
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ślanie 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. W przypadku każdego wywołania źródłaobserver.observe(source)
.
observer.observe("cpu" { sampleInterval: 2_000 });
W tym przykładzie "cpu"
to interesujące nas źródło ciśnienia. Obecnie 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ć odczytanie wartości 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 oczekujących rekordów, 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 coś w API nie działa zgodnie z oczekiwaniami? Czy w przypadku interfejsu API, którego używasz, brakuje jakiejś metody lub właściwości? Prześlij problem ze specyfikacją lub skomentuj istniejący problem w odpowiednim repozytorium GitHub.
Zgłaszanie problemów 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 i instrukcje odtwarzania błędu. W polu Składniki wpisz Blink>PerformanceAPIs>ComputePressure.
Zasoby
- Specyfikacja
- Publiczny film wyjaśniający
- Compute Pressure API Demo | Compute Pressure API Demo source
- Błąd śledzenia w Chromium
- Wpis na stronie ChromeStatus.com
- Składnik Blink:
Blink>PerformanceAPIs>ComputePressure
- Sprawdzanie tagów
- Gotowy do przetestowania
- Strona z instrukcją
- Zamierzasz przeprowadzić eksperyment