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 stres altında olmadığı sürece 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
Compute Pressure API, Chrome 115'ten itibaren kaynak denemesi olarak kullanılabilir. Güncellemenin Chrome 123'te (29 Mayıs 2024) sona ermesi bekleniyor. Kaynak denemesine 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 hizmet kalitesi düşer, ancak toplam bir sistem arızasına neden olmaz. Bu yumuşak gerçek zamanlı uygulamalar, iş yüklerini CPU tüketimi veya basıncına göre uyarlayabilmesinden büyük fayda sağlar.
Özellikle bu API'nin ilk sürümü, aşağıdaki uyarlama kararlarını etkinleştirmeyi amaçlar.
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 kodlamada) kalite-hız ve boyut-hız düğmelerini kullanın.
Video oyunları
- Oyunun videosunu (3D modeller, dokular, gölgelendiriciler) ve sesi (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, bez, ateş animasyonları, ten parlaklığı, parlama efektleri veya oynanabilirliği 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özlemlemek için kullanılan 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 basınç eğilimini açıklar. Bu tür nesneler yalnızca iki şekilde alınabilir: PressureObserver geri çağırmanıza girdi olarak veya PressureObserver
örneğinde takeRecords()
yöntemini çağırarak.
PressureObserver
Bir PressureObserver
nesnesi oluşturulduğunda, belirtilen bir örnek aralığında desteklenen kaynakların basıncı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şturulduktan sonra
değiştirilemez.
Marka
PressureObserver(callback)
: Gözlemlenen kaynağın değerlerinde değişiklik olduğunu algıladığında belirli bir geri çağırma işlevini çağıracak yeni bir PressureObserver
nesnesi oluşturur.
Oluşturucu, zorunlu bir callback işlevi alır.
Geri Arama
callback()
: Geri çağırma, bir dizi okunmamış PressureRecord
nesnesiyle çağrılır.
Yöntemler
PressureObserver.observe(source, options)
: "BasınçObserver"a hangi kaynağın gözlemleneceğini ve isteğe bağlı options
parametresini parametre olarak bildirir.
Seçenekler
PressureObserverOptions
: Kullanıcının güncelleme istediği örnek aralığını (milisaniye cinsinden sampleInterval
) içerir.
PressureObserver.unobserve(source)
: "pressureObserver"a bir kaynağı gözlemlemeyi bırakmasını söyler.
PressureObserver.disconnect()
: "pressureObserver"a tüm kaynakları gözlemlemeyi bırakmasını bildirir.
PressureObserver.takeRecords()
: Son geri çağırma çağrısından bu yana geçen kayıt dizisini döndürür.
static PressureObserver.knownSources()
(salt okunur): Kullanıcı aracısının bilinen kaynak türlerini alfabetik sırada döndürün.
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ü zaman damgasını temsil eden bir sayı döndürür.
Örnekler
Aşağıdaki bölümlerde örnek kullanım örnekleri listelenmiştir.
API desteğini belirleyin
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) => {
/* ... */
});
Basınç gözlemleyicisinin kullanımı
Baskı gözlemcisini başlatmanın tek bir yolu vardır. Her kaynak çağrı için
observer.observe(source)
.
observer.observe("cpu" { sampleInterval: 2_000 });
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.
2.000 ms'lik bir örnek aralığı (sampleInterval
), en fazla her iki saniyede bir güncelleme olacağı anlamına gelir.
İstenen örnek aralığı sistem tarafından sunulamazsa sistem, var olan en uygun aralıkta örnekleri sağlar. Örneğin, 2.000 ms'lik bir aralık isteniyorsa ancak sistem yalnızca maksimum 1.000 ms'de örnek sağlayabiliyorsa 1.000 ms seçilir.
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 meydana geldiğ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);
await observer.observe('cpu', { sampleInterval: 1_000 });
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 dizisi döndürerek nesneyi boşaltır.
Bunun en yaygın kullanım alanı, gözlemcinin bağlantısı kesilmeden önce gözlemcinin geri çağırma işlevi tarafından işlenmemiş tüm bekleyen baskı kayıtlarını hemen getirmektir. Böylece, gözlemci kapatılırken bekleyen tüm kayıtlar işlenebilir.
Bu yöntemin çağrılması, beklemedeki kayıtlar listesini temizler ve geri çağırma çalışmaz.
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);
Görüşlerinizi paylaşın
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? Bir spesifikasyon sorunu kaydı oluşturun veya ilgili GitHub deposundaki 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 fazla ayrıntı eklediğinizden ve yeniden oluşturma talimatlarını eklediğinizden emin olun ve Bileşenler kutusuna Blink>PerformanceAPIs>ComputePressure yazın.