Dapatkan informasi tentang tekanan komputasi sistem Anda.
Compute Pressure API menawarkan status tingkat tinggi yang mewakili tekanan pada sistem. Hal ini memungkinkan implementasi menggunakan metrik hardware yang tepat untuk memastikan bahwa pengguna dapat memanfaatkan semua daya pemrosesan yang tersedia selama sistem tidak mengalami stres yang tidak dapat dikelola.
Status saat ini
Langkah | Status |
---|---|
1. Membuat penjelasan | Selesai |
2. Membuat draf awal spesifikasi | Selesai |
3. Mengumpulkan masukan & melakukan iterasi pada desain | Sedang berlangsung |
4. Uji coba origin | Selesai |
5. Peluncuran | Selesai (Chrome 125) |
Mencoba Compute Pressure API
Untuk bereksperimen dengan Compute Pressure API secara lokal, baca halaman ini.
Mendaftar untuk uji coba origin
Mulai Chrome 115, Compute Pressure API tersedia sebagai uji coba origin. Fitur ini diperkirakan akan berakhir di Chrome 123 (29 Mei 2024). Daftar uji coba origin.
Kasus penggunaan
Kasus penggunaan utama yang ditingkatkan oleh Compute Pressure API saat ini adalah konferensi video dan game video.
Aplikasi real-time populer ini diklasifikasikan sebagai soft. Artinya, kualitas layanan menurun jika sistem dijalankan di luar status tertentu, tetapi tidak menyebabkan kegagalan total sistem. Aplikasi real-time soft ini sangat diuntungkan karena dapat menyesuaikan beban kerjanya berdasarkan konsumsi atau tekanan CPU.
Secara khusus, versi pertama API ini bertujuan untuk mengaktifkan keputusan adaptasi berikut.
Konferensi video
- Sesuaikan jumlah feed video yang ditampilkan secara bersamaan selama panggilan dengan banyak peserta.
- Mengurangi kualitas pemrosesan video (resolusi video, frame per detik).
- Lewati pemrosesan video yang tidak penting, seperti beberapa filter kamera.
- Menonaktifkan pemrosesan audio yang tidak penting, seperti peredam bising WebRTC.
- Putar tombol kualitas versus kecepatan dan ukuran versus kecepatan ke "kecepatan" dalam encoding video dan audio (di WebRTC, WebCodecs, atau encoding software).
Game video
- Gunakan aset berkualitas lebih rendah untuk menyusun video game (model 3D, tekstur, shader) dan audio (suara, efek suara).
- Nonaktifkan efek yang menghasilkan detail non-esensial yang kurang realistis (air, kain, animasi api, luminans kulit, efek silau, atau simulasi fisik yang tidak memengaruhi gameplay).
- Sesuaikan tombol kualitas versus kecepatan di mesin rendering game (kualitas bayangan, pemfilteran tekstur, jarak pandang).
Secara teknis, hal ini dapat dilakukan dengan mengetahui termal (misalnya, apakah sistem didinginkan secara pasif) dan status tekanan CPU untuk thread utama dan pekerja yang digunakan situs. Status termal sistem adalah status global dan dapat dipengaruhi oleh aplikasi dan situs selain situs pengamatan.
Antarmuka
Compute Pressure API dapat dijalankan dalam konteks berikut:
- Jendela atau thread utama
- Pekerja Khusus
- Pekerja Bersama
Compute Pressure API menentukan dua antarmuka baru.
PressureObserver
: Objek untuk mengamati tekanan komputasi dari sejumlah
sumber pada interval sampel yang telah ditentukan. Iterasi pertama di Chromium mengekspos
"cpu"
sebagai source
. Lihat bagian tentang parameter untuk mengetahui detail
selengkapnya. Setiap observer dapat mengamati tren perubahan tekanan secara asinkron dalam
sistem.
PressureRecord
: Menjelaskan tren tekanan pada saat transisi
tertentu. Objek jenis ini hanya dapat diperoleh dengan dua cara: sebagai input
ke callback PressureObserver, atau dengan memanggil metode takeRecords()
pada
instance PressureObserver
.
PressureObserver
Saat dibuat, objek PressureObserver
dikonfigurasi untuk memantau tekanan sumber yang didukung, pada interval sampel tertentu. Sumber yang didukung
dapat diamati atau tidak diamati secara terpisah kapan saja selama masa aktif
objek PressureObserver
. Interval sampel tidak dapat diubah setelah pembuatan objek.
Konstruktor
PressureObserver(callback)
: Membuat objek PressureObserver
baru yang akan
memanggil fungsi callback yang ditentukan saat mendeteksi bahwa perubahan pada nilai
sumber yang diamati telah terjadi.
Konstruktor menggunakan fungsi callback wajib.
Telepon Balik
callback()
: Callback dipanggil dengan array objek PressureRecord
yang belum dibaca.
Metode
PressureObserver.observe(source, options)
: Memberi tahu 'PressureObserver' sumber
yang akan diamati dan options
opsional, sebagai parameter.
Opsi
PressureObserverOptions
: Berisi interval sampel, sampleInterval
dalam
milidetik, saat pengguna meminta update.
PressureObserver.unobserve(source)
: Memberi tahu 'PressureObserver' untuk berhenti
mengamati sumber.
PressureObserver.disconnect()
: Memberi tahu 'PressureObserver' untuk berhenti mengamati
semua sumber.
PressureObserver.takeRecords()
: Menampilkan urutan data,
sejak pemanggilan callback terakhir.
static PressureObserver.knownSources()
(hanya baca): Menampilkan jenis sumber
yang diketahui agen pengguna dalam urutan abjad.
Parameter
source
: Sumber yang akan diamati, misalnya "cpu"
. Jenis ini harus berupa salah satu
jenis sumber yang didukung.
Dalam versi Compute Pressure saat ini, hanya "cpu"
yang didukung.
PressureRecord
Antarmuka PressureRecord
Compute Pressure API menjelaskan
tren tekanan sumber pada momen transisi tertentu.
Properti Instance
PressureRecord.source
(Hanya baca): Menampilkan string yang mewakili sumber
asal tempat data berasal.
PressureRecord.state
(Hanya baca): Menampilkan string yang mewakili status tekanan
yang dicatat.
PressureRecord.time
(Hanya baca): Menampilkan angka yang mewakili stempel waktu
resolusi tinggi.
Contoh
Bagian berikut mencantumkan contoh penggunaan.
Menentukan dukungan API
if ('PressureObserver' in globalThis) {
// The Compute Pressure API is supported.
}
Membuat observer tekanan
Buat observer tekanan dengan memanggil konstruktornya dengan fungsi callback yang akan dijalankan setiap kali ada pembaruan tekanan:
const observer = new PressureObserver((records) => {
/* ... */
});
Penggunaan observer tekanan
Hanya ada satu cara untuk memulai observer tekanan. Untuk setiap sumber, panggil
observer.observe(source)
.
observer.observe("cpu" { sampleInterval: 2_000 });
Dalam contoh ini, "cpu"
adalah sumber tekanan yang kita minati. Untuk
saat ini, ini adalah satu-satunya sumber yang tersedia. Di masa mendatang, mungkin ada sumber lain
seperti "gpu"
, "power"
, atau "thermals"
.
Interval sampel, sampleInterval
, sebesar 2.000 md, berarti akan ada
update paling banyak setiap dua detik.
Jika interval sampel yang diminta tidak dapat ditayangkan oleh sistem, sistem akan memberikan sampel pada interval yang paling sesuai yang ada. Misalnya, jika interval 2.000 md diminta, tetapi sistem hanya dapat memberikan sampel dengan maksimum 1.000 md, 1.000 md akan dipilih.
Untuk berhenti mengamati sumber, gunakan metode unobserve()
, seperti dalam contoh
berikut:
observer.unobserve('cpu');
Untuk membatalkan pengamatan semua sumber sekaligus, gunakan metode disconnect()
, seperti dalam
contoh berikut:
observer.disconnect();
Mengambil data tekanan
Data tekanan dapat diambil dengan fungsi callback, yang akan dipanggil setiap kali perubahan terjadi dalam status tekanan.
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 });
Pengguna juga dapat memaksa pembacaan PressureRecord
dengan memanggil
metode takeRecords()
.
Metode takeRecords()
antarmuka PressureObserver
menampilkan array
objek PressureRecords
yang disimpan di observer tekanan, sehingga mengosongkannya.
Kasus penggunaan yang paling umum untuk hal ini adalah segera mengambil semua data tekanan yang tertunda, yang belum diproses oleh fungsi callback observer, sebelum memutuskan koneksi observer, sehingga data yang tertunda dapat diproses saat mematikan observer.
Memanggil metode ini akan menghapus daftar data yang tertunda, sehingga callback tidak akan berjalan.
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);
Beri masukan
Apakah ada sesuatu tentang API yang tidak berfungsi seperti yang Anda harapkan? Apakah Anda melihat metode atau properti yang hilang untuk penggunaan API Anda? Ajukan masalah spesifikasi atau komentari masalah yang ada di repo GitHub yang sesuai.
Melaporkan masalah terkait penerapan
Apakah Anda menemukan bug pada penerapan Chromium? Atau apakah penerapannya berbeda dengan spesifikasinya? Ajukan bug di new.crbug.com. Pastikan untuk menyertakan detail sebanyak mungkin, petunjuk untuk mereproduksi, dan masukkan Blink>PerformanceAPIs>ComputePressure di kotak Components.