Sisteminizin işlem baskısı hakkında bilgi edinin.
Compute Pressure API, sistem üzerindeki baskıyı temsil eden üst düzey durumlar sunar. Bu sayede uygulama, doğru temel donanım metriklerinin kullanılmasını sağlar. Böylece kullanıcılar, sistem yönetilemez düzeyde stres altında olmadığı sürece kullanıcılara sunulan tüm işlem gücünden yararlanabilir.
Mevcut durum
Adım | Durum |
---|---|
1. Açıklayıcı oluşturun | Tamamlandı |
2. İlk spesifikasyon taslağını oluşturma | Tamamlandı |
3. Geri bildirim alma ve tasarımı yineleme | Devam ediyor |
4. Kaynak denemesi | Eksiksiz |
5. Lansman | Tamamlandı (Chrome 125) |
Compute Pressure API'yi deneyin
Compute Pressure API'yi yerel olarak denemek için bu sayfayı okuyun.
Kaynak denemesine kaydolun
Chrome 115'te Compute Pressure API, kaynak denemesi olarak kullanılabilir. Güncellemenin Chrome 123'te (29 Mayıs 2024) sona ermesi bekleniyor. Buradan kaydolun.
Kullanım örnekleri
Mevcut Compute Pressure API'nin geliştirdiği birincil kullanım alanları, video konferans ve video oyunlarıdır.
Bu popüler gerçek zamanlı uygulamalar soft olarak sınıflandırılır. Yani sistem belirli durumların ötesinde uygulanırsa ancak toplamda bir sistem hatasına neden olmazsa hizmet kalitesi düşer. Bu yumuşak gerçek zamanlı uygulamalar, iş yüklerini CPU tüketimine veya basıncına göre uyarlayabilmesinden büyük fayda sağlar.
Özel olarak belirtmek gerekirse, bu API'nin ilk sürümü aşağıdaki uyarlama kararlarını etkinleştirmeyi amaçlamaktadır.
Video konferans
- Çok sayıda katılımcıyla görüşmeler sırasında aynı anda gösterilen video feed'lerinin sayısını ayarlayın.
- Video işleme kalitesini düşürebilir (video çözünürlüğü, saniyedeki kare sayısı).
- Bazı kamera filtreleri gibi gerekli olmayan video işlemelerini atlayın.
- WebRTC gürültü azaltma gibi gerekli olmayan ses işlemeyi devre dışı bırakın.
- Video ve ses kodlamasında (WebRTC, WebCodecs veya yazılım kodlamasında) "hız" için kalite-hız ve boyut-hız düğmelerini kullanın.
Video oyunları
- Oyunun videosunu (3D modeller, dokular, gölgelendiriciler) ve sesleri (sesler, ses efektleri) oluşturmak için düşük kaliteli öğeler kullanın.
- Gerekli olmayan ayrıntıların daha az gerçekçi olmasına neden olan efektleri (su, kumaş, ateş animasyonları, ten parlaklığı, parlama efektleri veya oyunu etkilemeyen fiziksel simülasyonlar) devre dışı bırakın.
- Oyunun oluşturma motorundaki kalite ile hız düğmelerini (gölge kalitesi, doku filtreleme, görüntüleme mesafesi) değiştirin.
Teknik olarak bunlar, sitenin kullandığı ana iş parçacığı ve çalışanlar için termal bilgi (örneğin, sistem pasif olarak soğutuluyor) ve CPU basınç durumları bilinerek gerçekleştirilebilir. Sistemin ısıl durumu genel bir durumdur ve gözlemlenen site dışındaki uygulama ve sitelerden etkilenebilir.
Arayüzler
Compute Pressure API, aşağıdaki bağlamlarda çalıştırılabilir:
- Pencere veya ana iş parçacığı
- Özel Çalışan
- Paylaşımlı Çalışan
Compute Pressure API, iki yeni arayüz tanımlar.
PressureObserver
: Önceden tanımlanmış bir örnek aralığında herhangi bir sayıda kaynağın işlem basıncını gözlemleyecek nesnedir. Chromium'daki ilk yineleme "cpu"
değerini source
olarak gösterir. Daha fazla ayrıntı için parametreler ile ilgili bölüme bakın. Her gözlemci, bir sistemdeki basınç değişikliği eğilimlerini
eşzamansız olarak gözlemleyebilir.
PressureRecord
: Belirli bir geçiş anındaki baskı eğilimini açıklar. Bu türdeki nesneler yalnızca iki şekilde alınabilir: PressureObserver geri çağırmanıza bir giriş olarak veya PressureObserver
örneğinde takeRecords()
yöntemini çağırarak.
PressureObserver
Bir PressureObserver
nesnesi oluşturulduğunda, belirtilen örnek aralığında desteklenen kaynakların baskısını izleyecek şekilde yapılandırılır. Desteklenen kaynaklar, PressureObserver
nesnesinin kullanım ömrü boyunca herhangi bir zamanda tek tek gözlemlenebilir veya gözlemlenmeyebilir. Örnek aralığı, nesnenin oluşturulmasından sonra değiştirilemez.
Marka
PressureObserver(callback, options)
: Gözlemlenen kaynağın değerlerinde bir değişiklik olduğunu algıladığında, belirtilen bir geri çağırma işlevini çağıracak yeni bir PressureObserver
nesnesi oluşturur.
Oluşturucu, zorunlu bir geri çağırma işlevini ve isteğe bağlı seçenekleri parametre olarak alır.
Geri Arama
callback()
: Geri çağırma, bir dizi okunmamış PressureRecord
nesneyle çağrılır.
Seçenekler
PressureObserverOptions
: Kullanıcının güncelleme istediği sampleInterval
örnek aralığını (milisaniye cinsinden) içerir.
Yöntemler
PressureObserver.observe(source)
: "BasınçObserver"a hangi kaynağın gözlemleneceğini bildirir.
PressureObserver.unobserve(source)
: "pressureObserver"a bir kaynağı gözlemlemeyi durdurmasını söyler.
PressureObserver.disconnect()
: "pressureObserver"a, tüm kaynakları gözlemlemeyi bırakmasını söyler.
PressureObserver.takeRecords()
: Son geri çağırma çağrısından itibaren bir kayıt dizisi döndürür.
static PressureObserver.supportedSources()
(salt okunur): Donanıma göre desteklenen kaynak türlerini döndürür.
Parametreler
source
: Gözlemlenecek kaynak, örneğin "cpu"
. Bu, desteklenen kaynak türlerinden biri olmalıdır.
Compute Pressure'un mevcut sürümünde yalnızca "cpu"
desteklenmektedir.
PressureRecord
Compute Pressure API'nin PressureRecord
arayüzü, bir kaynağın belirli bir geçiş anındaki basınç eğilimini açıklar.
Örnek Özellikleri
PressureRecord.source
(Salt okunur): Kaydın alındığı kaynak kaynağı temsil eden bir dize döndürür.
PressureRecord.state
(Salt okunur): Kaydedilen basınç durumunu temsil eden bir dize döndürür.
PressureRecord.time
(Salt okunur): Yüksek çözünürlüklü bir zaman damgasını temsil eden bir sayı döndürür.
Örnekler
Compute Pressure API destekleniyor mu?
if ('PressureObserver' in globalThis) {
// The Compute Pressure API is supported.
}
Basınç gözlemleyicisi oluşturma
Baskı güncellemesi olduğunda çalıştırılacak bir geri çağırma işleviyle oluşturucuyu çağırarak basınç gözlemleyicisini oluşturun:
const observer = new PressureObserver(
(records) => { /* ... */ },
{ sampleInterval: 2000 }
);
2.000 ms'lik örnek aralığı, sampleInterval
en fazla her iki saniyede bir güncelleme olacağı anlamına gelir.
İstenen örnek aralığı sistem tarafından sunulamıyorsa. Sistem, var olan en uygun aralıkta numune sağlar. Örneğin, 2.000 ms'lik aralık isteniyorsa ancak sistem yalnızca maksimum 1.000 ms'lik hızda örnekler sağlayabiliyorsa 1.000 ms seçilir.
Basınç gözlemleyicisi kullanma
Baskı gözlemcisini başlatmanın tek bir yolu vardır. Her kaynak çağrı için
observer.observe(source)
.
observer.observe("cpu");
Bu örnekte "cpu"
, ilgilendiğimiz baskı kaynağıdır. Şimdilik mevcut tek
kaynak bu. Gelecekte "gpu"
, "power"
veya "thermals"
gibi başka kaynaklar da kullanılabilir.
Bir kaynağı gözlemlemeyi durdurmak için aşağıdaki örnekte olduğu gibi unobserve()
yöntemini kullanın:
observer.unobserve("cpu");
Aynı anda tüm kaynakların gözlemini kaldırmak için aşağıdaki örnekte olduğu gibi disconnect()
yöntemini kullanın:
observer.disconnect();
Baskı kayıtlarını alma
Basınç kayıtları, basınç durumunda her değişiklik gerçekleştiğinde çağrılacak olan bir geri çağırma işleviyle alınabilir.
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, { sampleInterval: 1000 });
await observer.observe("cpu");
Kullanıcı, takeRecords()
yöntemini çağırarak PressureRecord
okumasını da zorlayabilir.
PressureObserver
arayüzünün takeRecords()
yöntemi, basınç gözlemleyicisinde depolanan bir PressureRecords
nesne dizisini döndürerek nesneyi boşaltır.
Bunun en yaygın kullanım alanı, gözlemcinin bağlantısı kesilmeden önce, henüz gözlemcinin geri çağırma işlevi tarafından işlenmemiş, bekleyen tüm baskı kayıtlarını hemen getirmektir. Böylece, gözlemleyici kapatılırken bekleyen tüm kayıtlar işlenebilir.
Bu yöntemin çağrılması, beklemedeki kayıtlar listesini temizlediğinden geri çağırma çalıştırılmaz.
const observer = new PressureObserver(
(records) => { /* Do something with records. */ },
{ sampleInterval: 1000 }
);
await observer.observe("cpu");
setTimeout(() => {
// Forced records reading.
const records = observer.takeRecords();
observer.disconnect();
// Do something with last records if any.
}, 2000);
Bize API tasarımı hakkında bilgi verin
API'de beklediğiniz gibi çalışmayan bir durum var mı? API kullanımınızla ilgili eksik bir yöntem veya özellik görüyor musunuz? İlgili GitHub deposunda spesifikasyon sorunu oluşturun veya mevcut bir sorun hakkında yorum yapın.
Uygulamayla ilgili bir sorunu bildirin
Chromium'un uygulamasında bir hata buldunuz mu? Yoksa uygulama, spesifikasyondan farklı mı? new.crbug.com adresinden hata bildiriminde bulunun. Mümkün olduğunca çok ayrıntı eklediğinizden ve yeniden oluşturma için basit talimatları eklediğinizden emin olun ve Bileşenler kutusuna Blink>PerformanceAPIs>ComputePressure yazın.