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 doğru temel donanım metriklerini 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 deneme
Compute Pressure API'yi yerel olarak denemek için bu sayfayı okuyun.
Kaynak denemesine kaydolma
Chrome 115'ten itibaren Compute Pressure API, kaynak denemesi olarak kullanılabilir. Bu desteğin Chrome 123'te (29 Mayıs 2024) sona ermesi beklenmektedir. 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ıştırılırsa hizmet kalitesi düşer ancak sistem tamamen arızalanmaz. Bu yumuşak gerçek zamanlı uygulamalar, iş yüklerini CPU tüketimine veya baskısına göre uyarlayabilmekten 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 düşürün (video çözünürlüğü, saniyedeki kare sayısı).
- Bazı kamera filtreleri gibi gerekli olmayan video işlemlerini atlayabilirsiniz.
- 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) 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 daha 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ı, cilt parlaklığı, parlama efektleri veya oynanabilirliği etkilemeyen 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
- Paylaşılan Ç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 bilgi işlem baskısını gözlemlemek için kullanılan bir nesne. Chromium'daki ilk iterasyonda "cpu"
, source
olarak gösterilir. Daha fazla bilgi için parametreler hakkındaki bölüme 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 örnekleme aralığında desteklenen kaynakların basıncını izlemek üzere 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 geri çağırma 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 bırakmasını söyler.
PressureObserver.disconnect()
: "PressureObserver"a tüm kaynakları gözlemlemeyi durdurmasını söyler.
PressureObserver.takeRecords()
: Son geri çağırma çağrısından bu yana bir kayıt dizisi 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 belirleme
if ('PressureObserver' in globalThis) {
// The Compute Pressure API is supported.
}
Basınç gözlemcisi oluşturma
Basınç güncellemesi olduğunda çalıştırılacak bir geri çağırma işleviyle oluşturucusunu çağırarak basınç gözlemcisini 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 anda kullanılabilen tek kaynak budur. Gelecekte "gpu"
, "power"
veya "thermals"
gibi başka kaynaklar da 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 aralığı istenirse ancak sistem yalnızca en fazla 1.000 ms'de örnek sağlayabiliyorsa 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ı, takeRecords()
yöntemini çağırarak PressureRecord
değerinin 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'yi kullanırken eksik bir yöntem veya mülk görüyor musunuz? İlgili GitHub deposunda spesifikasyon sorunu oluşturun veya mevcut bir soruna yorum ekleyin.
Uygulamayla ilgili sorunları bildirme
Chromium'un uygulamasında bir hata mı buldunuz? Yoksa uygulama, spesifikasyondan farklı mı? new.crbug.com adresinden hata kaydı oluşturun. Mümkün olduğunca fazla ayrıntı ve yeniden oluşturma talimatları eklediğinizden emin olun. Bileşenler kutusuna Blink>PerformanceAPIs>ComputePressure yazın.