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 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.

Faydalı bağlantılar