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

Kaynaklar