Compute Basınç API'si

Sisteminizin işlem baskısı hakkında bilgi edinin.

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

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.

Kaynaklar