কম্পিউট প্রেসার API

আপনার সিস্টেম কম্পিউট চাপ সম্পর্কে অবগত হন.

কেনেথ ক্রিশ্চিয়ানসেন
Kenneth Christiansen
Arnaud (Arno) Mandy

কম্পিউট প্রেসার এপিআই উচ্চ-স্তরের স্টেট অফার করে যা সিস্টেমে চাপের প্রতিনিধিত্ব করে। এটি বাস্তবায়নকে সঠিক অন্তর্নিহিত হার্ডওয়্যার মেট্রিকগুলি ব্যবহার করার অনুমতি দেয় যাতে ব্যবহারকারীরা তাদের কাছে উপলব্ধ সমস্ত প্রক্রিয়াকরণ শক্তির সুবিধা নিতে পারে যতক্ষণ না সিস্টেমটি নিয়ন্ত্রণযোগ্য চাপের মধ্যে না থাকে।

বর্তমান অবস্থা

ধাপ স্ট্যাটাস
1. ব্যাখ্যাকারী তৈরি করুন সম্পূর্ণ
2. স্পেসিফিকেশনের প্রাথমিক খসড়া তৈরি করুন সম্পূর্ণ
3. প্রতিক্রিয়া সংগ্রহ করুন এবং ডিজাইনের উপর পুনরাবৃত্তি করুন চলছে
4. মূল বিচার সম্পূর্ণ
5. লঞ্চ করুন সম্পূর্ণ (Chrome 125)

কম্পিউট প্রেসার API ব্যবহার করে দেখুন

স্থানীয়ভাবে কম্পিউট প্রেসার API নিয়ে পরীক্ষা করতে, এই পৃষ্ঠাটি পড়ুন।

মূল বিচারের জন্য নিবন্ধন করুন

Chrome 115 থেকে, Compute Pressure API একটি অরিজিন ট্রায়াল হিসাবে উপলব্ধ। এটি Chrome 123 (মে 29, 2024) এ শেষ হবে বলে আশা করা হচ্ছে। মূল বিচারের জন্য নিবন্ধন করুন

ব্যবহারের ক্ষেত্রে

বর্তমান কম্পিউট প্রেসার API দ্বারা উন্নত প্রাথমিক ব্যবহারের ক্ষেত্রে ভিডিও কনফারেন্সিং এবং ভিডিও গেম।

এই জনপ্রিয় রিয়েল-টাইম অ্যাপ্লিকেশনগুলিকে নরম হিসাবে শ্রেণীবদ্ধ করা হয়। অর্থাৎ, পরিষেবার মান হ্রাস পায় যদি সিস্টেমটি নির্দিষ্ট রাজ্যের বাইরে ব্যবহার করা হয়, কিন্তু সম্পূর্ণ সিস্টেম ব্যর্থতার দিকে পরিচালিত করে না। এই নরম রিয়েল-টাইম অ্যাপ্লিকেশনগুলি সিপিইউ খরচ বা চাপের উপর ভিত্তি করে তাদের কাজের চাপগুলিকে মানিয়ে নিতে সক্ষম হওয়ার ফলে ব্যাপকভাবে উপকৃত হয়।

বিশেষত, এই API-এর প্রথম সংস্করণের লক্ষ্য নিম্নলিখিত অভিযোজন সিদ্ধান্তগুলিকে সক্ষম করা।

ভিডিও কনফারেন্সিং

  • অনেক অংশগ্রহণকারীদের সাথে কল করার সময় একই সাথে দেখানো ভিডিও ফিডের সংখ্যা সামঞ্জস্য করুন।
  • ভিডিও প্রক্রিয়াকরণের গুণমান হ্রাস করুন (ভিডিও রেজোলিউশন, প্রতি সেকেন্ডে ফ্রেম)।
  • অপ্রয়োজনীয় ভিডিও প্রসেসিং এড়িয়ে যান, যেমন কিছু ক্যামেরা ফিল্টার।
  • অ-প্রয়োজনীয় অডিও প্রক্রিয়াকরণ অক্ষম করুন, যেমন WebRTC শব্দ দমন।
  • ভিডিও এবং অডিও এনকোডিংয়ে (WebRTC, WebCodecs, বা সফ্টওয়্যার এনকোডিং-এ) গুণমান-বনাম-গতি এবং আকার-বনাম-গতির নবগুলিকে "গতির" দিকে ঘুরিয়ে দিন।

ভিডিও গেম

  • গেমের ভিডিও (3D মডেল, টেক্সচার, শেডার) এবং অডিও (ভয়েস, সাউন্ড এফেক্ট) রচনা করতে নিম্ন-মানের সম্পদ ব্যবহার করুন।
  • কম বাস্তবসম্মত অপ্রয়োজনীয় বিবরণ (জল, কাপড়, ফায়ার অ্যানিমেশন, ত্বকের আলো, গ্লেয়ার ইফেক্ট বা শারীরিক সিমুলেশন যা গেমপ্লেকে প্রভাবিত করে না) এর প্রভাবগুলি অক্ষম করুন।
  • গেমের রেন্ডারিং ইঞ্জিনে গুণমান-বনাম-গতির নবগুলিকে পরিবর্তন করুন (ছায়ার গুণমান, টেক্সচার ফিল্টারিং, দূরত্ব দেখুন)।

প্রযুক্তিগতভাবে এগুলি থার্মাল (উদাহরণস্বরূপ, সিস্টেমটিকে প্যাসিভভাবে ঠান্ডা করা হচ্ছে) এবং সাইটটি ব্যবহার করা মূল থ্রেড এবং শ্রমিকদের জন্য CPU চাপের অবস্থা জেনে সম্পন্ন করা যেতে পারে। সিস্টেম থার্মাল স্টেট একটি গ্লোবাল স্টেট এবং পর্যবেক্ষক সাইট ব্যতীত অন্যান্য অ্যাপ এবং সাইট দ্বারা প্রভাবিত হতে পারে।

ইন্টারফেস

কম্পিউট প্রেসার API নিম্নলিখিত প্রসঙ্গে চালানো যেতে পারে:

  • উইন্ডো বা প্রধান থ্রেড
  • নিবেদিতপ্রাণ কর্মী
  • ভাগ করা কর্মী

Compute Pressure API দুটি নতুন ইন্টারফেস সংজ্ঞায়িত করে।

PressureObserver : পূর্বনির্ধারিত নমুনা ব্যবধানে যেকোন সংখ্যক উৎসের গণনা চাপ পর্যবেক্ষণ করার জন্য একটি বস্তু। ক্রোমিয়ামে প্রথম পুনরাবৃত্তি "cpu" source হিসাবে প্রকাশ করে। আরো বিস্তারিত জানার জন্য পরামিতি সম্পর্কে বিভাগ দেখুন। প্রতিটি পর্যবেক্ষক অসিঙ্ক্রোনাসভাবে একটি সিস্টেমে চাপ পরিবর্তনের প্রবণতা পর্যবেক্ষণ করতে পারে।

PressureRecord : পরিবর্তনের একটি নির্দিষ্ট মুহূর্তে চাপের প্রবণতা বর্ণনা করে। এই ধরনের বস্তুগুলি শুধুমাত্র দুটি উপায়ে প্রাপ্ত করা যেতে পারে: আপনার PressureObserver কলব্যাকের একটি ইনপুট হিসাবে, অথবা PressureObserver উদাহরণে takeRecords() পদ্ধতিতে কল করে।

প্রেসার অবজারভার

যখন একটি 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" । এটি অবশ্যই সমর্থিত উত্স প্রকারগুলির মধ্যে একটি হতে হবে৷

কম্পিউট প্রেসারের বর্তমান সংস্করণে, শুধুমাত্র "cpu" সমর্থিত।

প্রেসার রেকর্ড

Compute Pressure API-এর PressureRecord ইন্টারফেস স্থানান্তরের একটি নির্দিষ্ট মুহূর্তে একটি উৎসের চাপের প্রবণতা বর্ণনা করে।

উদাহরণ বৈশিষ্ট্য

PressureRecord.source (শুধু-পঠন): মূল উৎসের প্রতিনিধিত্বকারী একটি স্ট্রিং প্রদান করে যেখান থেকে রেকর্ডটি আসছে।

PressureRecord.state (শুধু-পঠন): রেকর্ড করা চাপের অবস্থার প্রতিনিধিত্বকারী একটি স্ট্রিং প্রদান করে।

PressureRecord.time (কেবল-পঠন): একটি উচ্চ রেজোলিউশন টাইমস্ট্যাম্প প্রতিনিধিত্ব করে এমন একটি সংখ্যা প্রদান করে।

উদাহরণ

নিম্নলিখিত বিভাগে অনুকরণীয় ব্যবহারের উদাহরণ তালিকা.

API সমর্থন নির্ধারণ করুন

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 , 2000 ms, মানে প্রতি দুই সেকেন্ডে সর্বাধিক আপডেট হবে৷

যদি অনুরোধকৃত নমুনা ব্যবধানটি সিস্টেম দ্বারা পরিবেশন করা না যায়, তবে সিস্টেমটি বিদ্যমান সেরা উপযুক্ত ব্যবধানে নমুনা সরবরাহ করবে। উদাহরণস্বরূপ, যদি 2000 ms-এর ব্যবধানের অনুরোধ করা হয়, কিন্তু সিস্টেম শুধুমাত্র সর্বোচ্চ 1000 ms-এ নমুনা প্রদান করতে পারে, 1000 ms নির্বাচন করা হবে।

একটি উত্স পর্যবেক্ষণ বন্ধ করতে, নিম্নলিখিত উদাহরণের মতো 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);

আপনার মতামত শেয়ার করুন

API সম্পর্কে এমন কিছু আছে যা আপনার প্রত্যাশা অনুযায়ী কাজ করে না? আপনি কি আপনার API ব্যবহারের জন্য কোনো অনুপস্থিত পদ্ধতি বা সম্পত্তি দেখতে পাচ্ছেন? একটি নির্দিষ্ট সমস্যা ফাইল করুন বা সংশ্লিষ্ট গিটহাব রেপোতে বিদ্যমান একটিতে মন্তব্য করুন।

বাস্তবায়নের সাথে একটি সমস্যা রিপোর্ট করুন

আপনি কি Chromium এর বাস্তবায়নের সাথে একটি বাগ খুঁজে পেয়েছেন? অথবা বাস্তবায়ন বৈশিষ্ট থেকে ভিন্ন? new.crbug.com এ একটি বাগ ফাইল করুন। আপনি যতটা পারেন বিশদ বিবরণ, পুনরুত্পাদনের জন্য নির্দেশাবলী অন্তর্ভুক্ত করতে ভুলবেন না এবং উপাদান বাক্সে Blink>PerformanceAPIs>ComputePressure লিখুন।

সম্পদ