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

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

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

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

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

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

Compute Pressure API आज़माना

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

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

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

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

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

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

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

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

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

वीडियो गेम

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

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

इंटरफ़ेस

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

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

Compute Pressure 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 डालें.

संसाधन