Sistem bilgi işlem baskınız hakkında bilgi edinin.
Compute Pressure API, sistemdeki baskıyı temsil eden üst düzey durumlar sunar. Sistem yönetilemez bir stres altında olmadığı sürece kullanıcıların kullanabilecekleri tüm işleme gücünden yararlanabilmeleri için uygulamanın temel donanım metriklerini doğru şekilde kullanmasına olanak tanır.
Mevcut durum
Step | Durum |
---|---|
1. Açıklayıcı oluşturma | Tamamlandı |
2. Spesifikasyonun ilk taslağını oluşturma | Tamamlandı |
3. Geri bildirim toplayın ve tasarımda iterasyon yapın | Devam ediyor |
4. Kaynak denemesi | Tamamlandı |
5. Lansman | Tamamlandı (Chrome 125) |
Compute Pressure API'yi deneyin
Compute Pressure API ile yerel olarak denemeler yapmak için bu sayfayı inceleyin.
Kaynak denemesine kaydolma
Chrome 115'ten itibaren Compute Pressure API, kaynak denemesi olarak kullanılabilir. Bu özelliğin, Chrome 123 sürümünde (29 Mayıs 2024) sona ermesi bekleniyor. Kaynak denemesine kaydolun.
Kullanım örnekleri
Mevcut Compute Pressure API tarafından geliştirilen 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 çalışırsa hizmet kalitesi düşer ancak toplam sistem hatasına yol açmaz. Bu yumuşak gerçek zamanlı uygulamalar, iş yüklerini CPU tüketimine veya basıncına göre uyarlayabilme olanağından büyük fayda sağlar.
Bu API'nin ilk sürümü, özellikle aşağıdaki uyarlama kararlarını etkinleştirmeyi amaçlamaktadır.
Video konferans
- Çok sayıda katılımcının bulunduğu görüşmelerde aynı anda gösterilen video feed'lerinin sayısını ayarlayın.
- Video işleme kalitesini (video çözünürlüğü, saniyedeki kare sayısı) düşürün.
- Bazı kamera filtreleri gibi gerekli olmayan video işlemlerini atlayabilirsiniz.
- WebRTC gürültü azaltma gibi gereksiz ses işlemeyi devre dışı bırakın.
- Video ve ses kodlamasında (WebRTC, WebCodecs veya yazılım kodlamasında) kalite ve hız ile boyut ve hız düğmelerini "hız"a doğru çevirin.
Video oyunları
- Oyunun videosunu (3D modeller, dokular, gölgelendiriciler) ve sesini (sesler, ses efektleri) oluşturmak için düşük kaliteli öğeler kullanın.
- Daha az gerçekçi ve gerekli olmayan ayrıntılara yol açan efektleri (su, kumaş, ateş animasyonları, ten parlaklığı, parlama efektleri veya fiziksel simülasyonlar) devre dışı bırakın.
- Oyunun oluşturma motorundaki kalite ve hız ayarlarını (gölge kalitesi, doku filtreleme, görüntü mesafesi) değiştirin.
Teknik olarak bu işlemler, sitenin kullandığı ana iş parçacığı ve işleyiciler için termal (ör. sistem pasif olarak soğutuluyor mu?) ve CPU baskısı durumları bilinerek yapılabilir. Sistem termal durumu global bir durumdur ve gözlemlenen site dışındaki uygulamalardan 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
- Ortak Ç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 bir nesne. Chromium'daki ilk yinelemede "cpu"
, source
olarak gösterilir. Daha fazla bilgi için parametreler bölümüne bakın. Her gözlemci, sistemdeki basınç değişimi trendlerini eşzamansız olarak gözlemleyebilir.
PressureRecord
: Belirli bir geçiş anında basınç trendini açıklar. Bu tür nesneler yalnızca iki şekilde elde edilebilir: PressureObserver geri çağırma işlevinize giriş olarak veya PressureObserver
örneğinde takeRecords()
yöntemi çağrılarak.
PressureObserver
Bir PressureObserver
nesnesi oluşturulduğunda, belirli 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özlemden kaldırılabilir. Örnek aralığı, nesne oluşturulduktan sonra değiştirilemez.
Marka
PressureObserver(callback)
: Gözlemlenen kaynağın değerlerinde bir değişiklik olduğunu algıladığında belirtilen 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 işlevi, okunmamış PressureRecord
nesneleri içeren bir dizi ile çağrılır.
Yöntemler
PressureObserver.observe(source, options)
: "PressureObserver"a hangi kaynağı gözlemleyeceğini ve isteğe bağlı options
parametresini bildirir.
Seçenekler
PressureObserverOptions
: Kullanıcının güncelleme isteğinde bulunduğu örnek aralığını (milisaniye cinsinden sampleInterval
) içerir.
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 bu yana bir kayıt dizisini döndürür.
static PressureObserver.knownSources()
(salt okunur): Kullanıcı aracısının bilinen kaynak türlerini alfabetik sırayla döndürür.
Parametreler
source
: Gözlemlenecek kaynak, ör. "cpu"
. Bu, desteklenen kaynak türlerinden biri olmalıdır.
Hesaplama Basıncı'nın mevcut sürümünde yalnızca "cpu"
desteklenir.
PressureRecord
Compute Pressure API'nin PressureRecord
arayüzü, belirli bir geçiş anında bir kaynağın baskı trendini açıklar.
Örnek Özellikleri
PressureRecord.source
(Salt okunur): Kaydın alındığı 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
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
Basınç güncellemesi olduğunda çalıştırılacak bir geri çağırma işleviyle kurucusunu çağırarak basınç gözlemleyicisini oluşturun:
const observer = new PressureObserver((records) => {
/* ... */
});
Basınç gözlemcisinin kullanımı
Basınç gözlemcisini başlatmanın tek bir yolu vardır. Her kaynak için observer.observe(source)
çağrısı yapın.
observer.observe("cpu" { sampleInterval: 2_000 });
Bu örnekte "cpu"
, ilgilendiğimiz basınç kaynağıdır. Şu an için kullanılabilecek tek kaynak budur. Gelecekte "gpu"
, "power"
veya "thermals"
gibi başka kaynaklar olabilir.
2.000 ms'lik bir örnek aralık (sampleInterval
), en fazla iki saniyede bir güncelleme yapılacağı anlamına gelir.
İstenen örnek aralığı sistem tarafından sağlanamazsa sistem, mevcut en uygun aralıkta örnekler sağlar. Örneğin, 2.000 ms'lik bir aralık istenirse ancak sistem yalnızca maksimum 1.000 ms'de örnek sağlayabilirse 1.000 ms seçilir.
Bir kaynağı gözlemlemeyi durdurmak için aşağıdaki örnekte gösterildiği gibi unobserve()
yöntemini kullanın:
observer.unobserve('cpu');
Tüm kaynakların gözlemini tek seferde kaldırmak için aşağıdaki örnekte gösterildiği gibi disconnect()
yöntemini kullanın:
observer.disconnect();
Basınç kayıtlarını alma
Basınç kayıtları, basınç durumunda her değişiklik yapıldığında çağrılacak 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ı ayrıca takeRecords()
yöntemini çağırarak PressureRecord
işlevinin okunmasını da zorlayabilir.
PressureObserver
arayüzünün takeRecords()
yöntemi, basınç gözlemcisinde depolanan bir PressureRecords
nesnesi dizisi döndürerek gözlemciyi boşaltır.
Bunun en yaygın kullanım alanı, gözlemcinin bağlantısını kesmeden önce, gözlemcinin geri çağırma işlevi tarafından henüz işlenmemiş olan bekleyen tüm basınç kayıtlarını hemen almaktır. Böylece, gözlemci kapatıldığında bekleyen kayıtlar işlenebilir.
Bu yöntem çağrıldığında bekleyen kayıtlar listesi temizlenir. Bu nedenle geri çağırma işlevi çalıştırılmaz.
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 ile ilgili olarak beklediğiniz gibi çalışmayan bir şey var mı? API kullanımınız için eksik bir yöntem veya özellik görüyor musunuz? İlgili GitHub deposunda bir spesifikasyon sorunu bildirin veya mevcut bir soruyla ilgili yorum yapın.
Uygulamayla ilgili bir sorunu bildirin
Chromium'un uygulanmasıyla ilgili bir hata buldunuz mu? Yoksa uygulama, spesifikasyondan farklı mı? new.crbug.com adresinden hata kaydı oluşturun. Mümkün olduğunca fazla ayrıntı ve hatayı yeniden oluşturma talimatları eklediğinizden emin olun. Bileşenler kutusuna Blink>PerformanceAPIs>ComputePressure yazın.