कंप्यूट प्रेशर एपीआई

अपने सिस्टम के कंप्यूट प्रेशर के बारे में जानकारी पाएं.

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

Compute Pressure API, सिस्टम पर पड़ने वाले दबाव की जानकारी देने वाली हाई-लेवल की स्थितियां दिखाता है. इससे लागू करने पर, सही हार्डवेयर मेट्रिक का इस्तेमाल किया जा सकता है. इससे यह पक्का किया जा सकता है कि जब तक सिस्टम मैनेज करने में मुश्किल न हो, तब तक उपयोगकर्ता अपने लिए उपलब्ध प्रोसेसिंग पावर का फ़ायदा ले सकते हैं.

मौजूदा स्थिति

चरण स्थिति
1. जानकारी देने वाला वीडियो बनाएं पूरा हुआ
2. स्पेसिफ़िकेशन का शुरुआती ड्राफ़्ट बनाना पूरा हो गया
3. सुझाव/राय इकट्ठा करना और डिज़ाइन में बदलाव करना प्रोसेस जारी है
4. ऑरिजिन ट्रायल पूरा हुआ
5. लॉन्च करें Complete (Chrome 125)

Compute Pressure API आज़माएं

Compute प्रेशर API को स्थानीय तौर पर एक्सपेरिमेंट करने के लिए, यह पेज पढ़ें.

ऑरिजिन ट्रायल के लिए रजिस्टर करना

Chrome 115 में, Compute Pressure API को ऑरिजिन ट्रायल के तौर पर उपलब्ध कराया गया है. यह सुविधा, Chrome 123 (29 मई, 2024) में बंद हो जाएगी. ऑरिजिन ट्रायल के लिए रजिस्टर करें.

इस्तेमाल के उदाहरण

मौजूदा Compute प्रेशर API के इस्तेमाल के लिए, मुख्य तौर पर वीडियो कॉन्फ़्रेंसिंग और वीडियो गेम इस्तेमाल किए जा सकते हैं.

रीयल-टाइम में काम करने वाले इन लोकप्रिय ऐप्लिकेशन को सॉफ़्ट कैटगरी में रखा जाता है. इसका मतलब है कि सिस्टम को कुछ खास स्थितियों से ज़्यादा इस्तेमाल करने पर, सेवा की क्वालिटी खराब हो जाती है. हालांकि, इससे सिस्टम पूरी तरह से काम नहीं करता. सॉफ़्ट रीयल-टाइम ऐप्लिकेशन को सीपीयू के इस्तेमाल या दबाव के आधार पर, अपने वर्कलोड में बदलाव करने की सुविधा से काफ़ी फ़ायदा होता है.

खास तौर पर, इस एपीआई के पहले वर्शन का मकसद, इन बदलावों के फ़ैसले लेने की सुविधा चालू करना है.

वीडियो कॉन्फ़्रेंसिंग ऐप्लिकेशन

  • कई लोगों के साथ कॉल के दौरान, एक साथ दिखाए जाने वाले वीडियो फ़ीड की संख्या में बदलाव करना.
  • वीडियो प्रोसेस करने की क्वालिटी कम करें (वीडियो रिज़ॉल्यूशन, फ़्रेम प्रति सेकंड).
  • वीडियो पर कुछ गै़र-ज़रूरी प्रोसेसिंग न करें. जैसे, कैमरे के कुछ फ़िल्टर.
  • यह विकल्प, ग़ैर-ज़रूरी ऑडियो प्रोसेस करने की सुविधा को बंद करता है. जैसे- WebRTC के शोर को कम करने की सुविधा.
  • वीडियो और ऑडियो एन्कोडिंग (WebRTC, WebCodecs या सॉफ़्टवेयर एन्कोडिंग में) में, क्वालिटी बनाम स्पीड और साइज़ बनाम स्पीड वाले नॉब को "स्पीड" पर सेट करें.

वीडियो गेम

  • गेम का वीडियो (3D मॉडल, टेक्सचर, शेडर) और ऑडियो (आवाज़, साउंड इफ़ेक्ट) तैयार करने के लिए, हल्की क्वालिटी वाली ऐसेट इस्तेमाल करें.
  • ऐसे इफ़ेक्ट बंद करें जिनसे गेमप्ले पर असर न पड़ने वाली ग़ैर-ज़रूरी जानकारी (पानी, कपड़ा, आग का ऐनिमेशन, त्वचा की चमक, चमकदार इफ़ेक्ट या ऐसे फ़िज़िकल सिम्युलेशन जिनसे गेमप्ले पर असर न पड़ता हो) कम असल लगती है.
  • गेम के रेंडरिंग इंजन में, क्वालिटी बनाम स्पीड वाले नॉब में बदलाव करें. जैसे, परछाई की क्वालिटी, टेक्स्चर फ़िल्टरिंग, व्यू की दूरी.

तकनीकी तौर पर, इन चीज़ों को जानने के लिए, थर्मल (उदाहरण के लिए, सिस्टम को पैसिव कूलिंग दी जा रही है या नहीं) और साइट के इस्तेमाल किए जा रहे मुख्य थ्रेड और वर्कर्स के लिए सीपीयू प्रेशर की स्थितियों के बारे में पता होना चाहिए. सिस्टम की थर्मल स्टेटस एक ग्लोबल स्टेटस होती है. इस पर, निगरानी वाली साइट के अलावा अन्य ऐप्लिकेशन और साइटों का असर पड़ सकता है.

इंटरफ़ेस

Compute Pressure API को इन संदर्भों में चलाया जा सकता है:

  • विंडो या मुख्य थ्रेड
  • खास तौर पर इसके लिए काम करने वाला वर्कर
  • शेयर किया गया वर्कर

Compute प्रेशर API, दो नए इंटरफ़ेस के बारे में जानकारी देता है.

PressureObserver: यह एक ऐसा ऑब्जेक्ट है जिससे किसी तय किए गए सैंपल इंटरवल में, किसी भी संख्या के सोर्स के कंप्यूट प्रेशर को देखा जा सकता है. Chromium में पहले वर्शन में, "cpu" को source के तौर पर दिखाया जाता है. ज़्यादा जानकारी के लिए, पैरामीटर सेक्शन देखें. हर ऑब्ज़र्वर, किसी सिस्टम में प्रेशर में होने वाले बदलावों के रुझानों को अलग-अलग समय पर देख सकता है.

PressureRecord: ट्रांज़िशन के किसी खास पलों पर, दबाव के रुझान के बारे में बताता है. इस तरह के ऑब्जेक्ट सिर्फ़ दो तरीकों से पाए जा सकते हैं: आपके PressureObserver कॉलबैक के इनपुट के तौर पर या PressureObserver इंस्टेंस पर takeRecords() तरीके को कॉल करके.

PressureObserver

PressureObserver ऑब्जेक्ट बनाने पर, उसे सैंपल इंटरवल के हिसाब से, काम करने वाले सोर्स के दबाव को देखने के लिए कॉन्फ़िगर किया जाता है. PressureObserver ऑब्जेक्ट के ऐक्टिव रहने के दौरान, काम करने वाले सोर्स को किसी भी समय अलग-अलग देखा जा सकता है या बिना निगरानी के रखा जा सकता है. ऑब्जेक्ट बनाने के बाद, सैंपल इंटरवल नहीं बदला जा सकता.

निर्माता

PressureObserver(callback): यह एक नया PressureObserver ऑब्जेक्ट बनाता है. यह ऑब्जेक्ट, उस समय तय किए गए कॉलबैक फ़ंक्शन को शुरू करता है जब सोर्स की वैल्यू में बदलाव का पता चलता है.

कंस्ट्रक्टर एक ज़रूरी कॉलबैक फ़ंक्शन लेता है.

कॉलबैक

callback(): कॉलबैक को, नहीं पढ़े गए PressureRecord ऑब्जेक्ट के कलेक्शन के साथ कॉल किया जाता है.

तरीके

PressureObserver.observe(source, options): 'PressureObserver' को यह बताता है कि किस सोर्स को पैरामीटर के तौर पर मॉनिटर करना है और options को वैकल्पिक तौर पर मॉनिटर करना है.

विकल्प

PressureObserverOptions: इसमें सैंपल इंटरवल होता है, जो मिलीसेकंड में sampleInterval होता है. इस दौरान, उपयोगकर्ता अपडेट का अनुरोध करता है.

PressureObserver.unobserve(source): 'PressureObserver' को किसी सोर्स को मॉनिटर करना बंद करने के लिए कहता है.

PressureObserver.disconnect(): 'PressureObserver' को सभी सोर्स को मॉनिटर करना बंद करने के लिए कहता है.

PressureObserver.takeRecords(): यह आखिरी कॉलबैक शुरू होने के बाद से रिकॉर्ड का क्रम दिखाता है.

static PressureObserver.knownSources() (सिर्फ़ पढ़ने के लिए): उपयोगकर्ता एजेंट के जाने-पहचाने सोर्स टाइप को वर्णमाला के क्रम में दिखाता है.

पैरामीटर

source: वह सोर्स जिसे मॉनिटर करना है, जैसे कि "cpu". यह इस्तेमाल किए जा सकने वाले सोर्स टाइप में से कोई एक होना चाहिए.

Compute Pressure के मौजूदा वर्शन में, सिर्फ़ "cpu" का इस्तेमाल किया जा सकता है.

PressureRecord

Compute Pressure API के PressureRecord इंटरफ़ेस से, ट्रांज़िशन के किसी खास समय पर किसी सोर्स के दबाव के रुझान के बारे में पता चलता है.

इंस्टेंस प्रॉपर्टी

PressureRecord.source (रीड-ओनली): वह स्ट्रिंग दिखाता है जिससे रिकॉर्ड आ रहा है.

PressureRecord.state (रीड-ओनली): रिकॉर्ड किए गए दबाव की स्थिति दिखाने वाली स्ट्रिंग दिखाता है.

PressureRecord.time (रीड-ओनली): यह एक संख्या दिखाता है, जो हाई रिज़ॉल्यूशन वाले टाइमस्टैंप को दिखाता है.

उदाहरण

नीचे दिए सेक्शन में, इस्तेमाल के उदाहरण दिए गए हैं.

एपीआई के लिए सहायता तय करना

if ('PressureObserver' in globalThis) {
  // The Compute Pressure API is supported.
}

प्रेशर ऑब्ज़र्वर बनाना

प्रेशर ऑब्ज़र्वर बनाएं. इसके लिए, कंस्ट्रक्टर को कॉलबैक फ़ंक्शन के साथ कॉल करें, ताकि प्रेशर अपडेट होने पर यह फ़ंक्शन चल सके:

const observer = new PressureObserver((records) => {
  /* ... */
});

प्रेशर ऑब्ज़र्वर का इस्तेमाल

प्रेशर ऑब्ज़र्वर को शुरू करने का सिर्फ़ एक तरीका है. हर सोर्स कॉल के लिए observer.observe(source).

observer.observe("cpu" { sampleInterval: 2_000 });

इस उदाहरण में, "cpu" वह दबाव सोर्स है जिसमें हमारी दिलचस्पी है. फ़िलहाल, यह ही एकमात्र सोर्स उपलब्ध है. आने वाले समय में, इस तरह के और भी सोर्स हो सकते हैं "gpu", "power" या "thermals".

सैंपल इंटरवल, sampleInterval के 2,000 मिलीसेकंड का मतलब है कि ज़्यादा से ज़्यादा हर दो सेकंड में अपडेट होंगे.

अगर सिस्टम, सैंपल के लिए अनुरोध किए गए इंटरवल को पूरा नहीं कर पाता है, तो सिस्टम सबसे सही इंटरवल पर सैंपल उपलब्ध कराएगा. उदाहरण के लिए, अगर 2,000 मिलीसेकंड के इंटरवल का अनुरोध किया जाता है, लेकिन सिस्टम सिर्फ़ 1,000 मिलीसेकंड पर सैंपल दे सकता है, तो 1,000 मिलीसेकंड चुना जाएगा.

किसी सोर्स को निगरानी में रखने की सुविधा बंद करने के लिए, unobserve() तरीके का इस्तेमाल करें. उदाहरण के लिए:

observer.unobserve('cpu');

सभी सोर्स को एक साथ अनअब्ज़र्व करने के लिए, disconnect() तरीके का इस्तेमाल करें, जैसा कि नीचे दिए गए उदाहरण में बताया गया है:

observer.disconnect();

ब्लड प्रेशर के रिकॉर्ड वापस पाना

प्रेशर रिकॉर्ड, कॉलबैक फ़ंक्शन की मदद से फिर से हासिल किए जा सकते हैं. दबाव की स्थिति में कोई बदलाव होने पर, इसे हर बार शुरू किया जाएगा.

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 });

उपयोगकर्ता takeRecords() तरीके को कॉल करके भी, PressureRecord को ज़बरदस्ती पढ़ सकता है.

PressureObserver इंटरफ़ेस का takeRecords() तरीका, दबाव ऑब्ज़र्वर में सेव किए गए PressureRecords ऑब्जेक्ट का एक कलेक्शन दिखाता है. साथ ही, उसे खाली कर देता है.

इसका सबसे सामान्य इस्तेमाल, ऑब्ज़र्वर को डिसकनेक्ट करने से पहले, उन सभी दबाव रिकॉर्ड को तुरंत फ़ेच करना है जिन्हें अब तक ऑब्ज़र्वर के कॉलबैक फ़ंक्शन ने प्रोसेस नहीं किया है. इससे, ऑब्ज़र्वर को बंद करते समय, किसी भी रिकॉर्ड को प्रोसेस किया जा सकता है.

इस मेथड को कॉल करने से, रिकॉर्ड की सूची से वे रिकॉर्ड हट जाते हैं जिन्हें अभी तक प्रोसेस नहीं किया गया है. इसलिए, कॉलबैक नहीं चलेगा.

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);

सुझाव/राय दें या शिकायत करें

क्या एपीआई के बारे में कुछ ऐसा है जो आपकी उम्मीद के मुताबिक काम नहीं करता? क्या आपको एपीआई के इस्तेमाल के लिए, कोई ऐसा तरीका या प्रॉपर्टी नहीं दिख रही है? स्पेसिफ़िकेशन से जुड़ी कोई समस्या दर्ज करें या उससे जुड़े GitHub रेपो में मौजूद किसी समस्या पर टिप्पणी करें.

लागू करने से जुड़ी समस्या की शिकायत करना

क्या आपको Chromium को लागू करने में कोई गड़बड़ी मिली? या क्या इसे लागू करने का तरीका, स्पेसिफ़िकेशन से अलग है? new.crbug.com पर गड़बड़ी की शिकायत करें. ज़्यादा से ज़्यादा जानकारी दें और गड़बड़ी को दोहराने के निर्देश दें. साथ ही, कॉम्पोनेंट बॉक्स में Blink>PerformanceAPIs>ComputePressure डालें.

संसाधन