Compute Basınç API'si

Sistem bilgi işlem baskınız hakkında bilgi edinin.

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

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.

Kaynaklar