API ความกดดันการประมวลผล

รับการแจ้งเตือนเกี่ยวกับแรงกดดันในการประมวลผลของระบบ

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

Compute Pressure API มีสถานะระดับสูงที่แสดงถึงแรงกดดันในระบบ ซึ่งช่วยให้การติดตั้งใช้งานใช้เมตริกฮาร์ดแวร์พื้นฐานที่เหมาะสมเพื่อให้ผู้ใช้ใช้ประโยชน์จากกำลังประมวลผลทั้งหมดที่มีได้ตราบใดที่ระบบไม่อยู่ภายใต้ความเครียดที่จัดการไม่ได้

สถานะปัจจุบัน

ขั้นตอน สถานะ
1. สร้างคําอธิบาย เสร็จสมบูรณ์
2. สร้างฉบับร่างแรกของข้อกําหนด เสร็จสมบูรณ์
3. รวบรวมความคิดเห็นและปรับปรุงการออกแบบ กำลังดำเนินการ
4. ช่วงทดลองใช้จากต้นทาง เสร็จสมบูรณ์
5. เปิดตัว เสร็จสมบูรณ์ (Chrome 125)

ลองใช้ Compute Pressure API

หากต้องการทดสอบด้วย Compute Pressure API ในเครื่อง โปรดอ่านหน้านี้

ลงทะเบียนช่วงทดลองใช้จากต้นทาง

ตั้งแต่ Chrome 115 เป็นต้นไป Compute Pressure API จะพร้อมใช้งานเป็นช่วงทดลองใช้จากต้นทาง โดยคาดว่าจะสิ้นสุดใน Chrome 123 (29 พฤษภาคม 2024) ลงทะเบียนช่วงทดลองใช้จากต้นทาง

กรณีการใช้งาน

Use Case หลักที่ Compute Pressure API ปัจจุบันปรับปรุงให้ดีขึ้นคือการประชุมทางวิดีโอและวิดีโอเกม

แอปพลิเคชันเรียลไทม์ยอดนิยมเหล่านี้จัดอยู่ในประเภทซอฟต์ กล่าวคือ คุณภาพของบริการจะลดลงหากระบบทำงานเกินสถานะหนึ่งๆ แต่จะไม่ทําให้ระบบใช้งานไม่ได้ทั้งหมด แอปพลิเคชันที่พร้อมใช้งานแบบเรียลไทม์เหล่านี้จะได้รับประโยชน์อย่างมากจากความสามารถในการปรับภาระงานตามการใช้งานหรือแรงกดของ CPU

โดยเฉพาะอย่างยิ่ง API เวอร์ชันแรกมีเป้าหมายเพื่อกระตุ้นการตัดสินใจเกี่ยวกับการปรับเปลี่ยนต่อไปนี้

การประชุมทางวิดีโอ

  • ปรับจำนวนฟีดวิดีโอที่แสดงพร้อมกันระหว่างการโทรที่มีผู้เข้าร่วมหลายคน
  • ลดคุณภาพของการประมวลผลวิดีโอ (ความละเอียดวิดีโอ เฟรมต่อวินาที)
  • ข้ามการประมวลผลวิดีโอที่ไม่จำเป็น เช่น ฟิลเตอร์กล้องบางรายการ
  • ปิดใช้การประมวลผลเสียงที่ไม่จำเป็น เช่น การลดเสียงรบกวนของ WebRTC
  • หมุนปุ่มคุณภาพเทียบกับความเร็วและขนาดเทียบกับความเร็วไปที่ "ความเร็ว" ในการเข้ารหัสวิดีโอและเสียง (ใน WebRTC, WebCodecs หรือการเข้ารหัสซอฟต์แวร์)

วิดีโอเกม

  • ใช้ชิ้นงานคุณภาพต่ำในการประกอบวิดีโอ (โมเดล 3 มิติ พื้นผิว ชิดเดอร์) และเสียง (เสียงพูด เสียงประกอบ) ของเกม
  • ปิดใช้เอฟเฟกต์ที่ทำให้รายละเอียดที่ไม่จำเป็นดูไม่สมจริง (น้ำ ผ้า ภาพเคลื่อนไหวของไฟ ความสว่างของผิว เอฟเฟกต์แสงสะท้อน หรือการจำลองทางกายภาพที่ไม่ส่งผลต่อเกมเพลย์)
  • ปรับแต่งปุ่มคุณภาพเทียบกับความเร็วในเครื่องมือแสดงผลของเกม (คุณภาพเงา ฟิลเตอร์พื้นผิว ระยะมอง)

ในทางเทคนิคแล้ว การดำเนินการเหล่านี้ทำได้โดยการทำความเข้าใจความร้อน (เช่น ระบบมีการระบายความร้อนแบบพาสซีฟหรือไม่) และสถานะการกดดันของ CPU สำหรับเธรดหลักและเวิร์กเกอร์ที่เว็บไซต์ใช้ สถานะความร้อนของระบบเป็นสถานะระดับโลกและอาจได้รับผลกระทบจากแอปและเว็บไซต์อื่นๆ ที่ไม่ใช่เว็บไซต์ที่สังเกตการณ์

อินเทอร์เฟซ

Compute Pressure API สามารถเรียกใช้ได้ในบริบทต่อไปนี้

  • หน้าต่างหรือเทรดหลัก
  • ผู้ปฏิบัติงานเฉพาะ
  • ผู้ปฏิบัติงานที่แชร์

Compute Pressure API จะกำหนดอินเทอร์เฟซใหม่ 2 รายการ

PressureObserver: ออบเจ็กต์สำหรับสังเกตการณ์ภาระงานการประมวลผลของแหล่งที่มาจำนวนเท่าใดก็ได้ในช่วงเวลาที่เลือกไว้ล่วงหน้า การทำซ้ำครั้งแรกใน Chromium แสดง "cpu" เป็น source ดูรายละเอียดเพิ่มเติมได้ในส่วนพารามิเตอร์ ผู้สังเกตการณ์แต่ละรายสามารถสังเกตแนวโน้มการเปลี่ยนแปลงความดันในระบบแบบไม่พร้อมกัน

PressureRecord: อธิบายแนวโน้มแรงกด ณ ช่วงเวลาที่เจาะจงของการเปลี่ยน ออบเจ็กต์ประเภทนี้มีได้ 2 วิธีเท่านั้น ได้แก่ เป็นอินพุตสำหรับ Callback ของ PressureObserver หรือโดยการเรียกใช้เมธอด takeRecords() ในอินสแตนซ์ PressureObserver

PressureObserver

เมื่อสร้างออบเจ็กต์ PressureObserver ระบบจะกําหนดค่าให้ตรวจสอบแรงดันของแหล่งที่มาที่รองรับในช่วงเวลาที่เลือก แหล่งที่มาที่รองรับจะสังเกตหรือไม่สังเกตได้ทีละรายการทุกเมื่อตลอดอายุการใช้งานของออบเจ็กต์ PressureObserver คุณจะเปลี่ยนช่วงเวลาของตัวอย่างไม่ได้หลังจากสร้างออบเจ็กต์แล้ว

ผู้ผลิต

PressureObserver(callback): สร้างออบเจ็กต์ PressureObserver ใหม่ซึ่งจะเรียกใช้ฟังก์ชัน Callback ที่ระบุเมื่อตรวจพบว่ามีการเปลี่ยนแปลงค่าของแหล่งที่มาที่สังเกตการณ์

เครื่องมือสร้างจะใช้ฟังก์ชัน callback ที่ต้องระบุ

การติดต่อกลับ

callback(): Callback จะถูกเรียกใช้ด้วยอาร์เรย์ของออบเจ็กต์ PressureRecord ที่ยังไม่อ่าน

เมธอด

PressureObserver.observe(source, options): บอกแหล่งที่มาที่จะสังเกตการณ์และ options (ไม่บังคับ) เป็นพารามิเตอร์ให้กับ "PressureObserver"

ตัวเลือก

PressureObserverOptions: มีช่วงเวลาของตัวอย่าง sampleInterval เป็นมิลลิวินาทีที่ผู้ใช้ขอการอัปเดต

PressureObserver.unobserve(source): บอกให้ "PressureObserver" หยุดการสังเกตการณ์แหล่งที่มา

PressureObserver.disconnect(): บอก "PressureObserver" ให้หยุดสังเกตแหล่งที่มาทั้งหมด

PressureObserver.takeRecords(): แสดงผลลำดับของ record ตั้งแต่การเรียกใช้ Callback ล่าสุด

static PressureObserver.knownSources() (อ่านอย่างเดียว): แสดงประเภทแหล่งที่มาที่รู้จักของ User Agent ตามลําดับตัวอักษร

พารามิเตอร์

source: แหล่งที่มาที่จะสังเกต เช่น "cpu" ต้องเป็นประเภทแหล่งที่มาที่รองรับ

ในเวอร์ชันปัจจุบันของ Compute Pressure ระบบรองรับเฉพาะ "cpu" เท่านั้น

PressureRecord

อินเทอร์เฟซ PressureRecord ของ Compute Pressure API จะอธิบายแนวโน้มของแรงกดดันของแหล่งที่มา ณ ช่วงเวลาหนึ่งๆ ของการเปลี่ยนผ่าน

พร็อพเพอร์ตี้ของอินสแตนซ์

PressureRecord.source (อ่านอย่างเดียว): แสดงสตริงที่แสดงแหล่งที่มาของต้นทางที่ระเบียนนั้นมาจาก

PressureRecord.state (อ่านอย่างเดียว): แสดงผลสตริงที่แสดงสถานะแรงดันที่บันทึกไว้

PressureRecord.time (อ่านอย่างเดียว): แสดงผลตัวเลขที่แสดงการประทับเวลาความละเอียดสูง

ตัวอย่าง

ส่วนต่อไปนี้แสดงตัวอย่างการใช้งาน

ตรวจสอบการรองรับ API

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

สร้างเครื่องมือวัดความดัน

สร้างเครื่องมือตรวจสอบความดันโดยการเรียกคอนสตรัคเตอร์ด้วยฟังก์ชัน Callback เพื่อเรียกใช้ทุกครั้งที่มีการอัปเดตความดัน

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

การใช้เครื่องวัดความดัน

การเริ่มเครื่องมือวัดความดันทำได้เพียงวิธีเดียว สําหรับการเรียกแหล่งที่มาแต่ละครั้ง observer.observe(source)

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

ในตัวอย่างนี้ "cpu" คือแรงกดดันที่เราสนใจ ซึ่งตอนนี้เป็นช่องทางเดียวที่ใช้ได้ ในอนาคตอาจมีแหล่งที่มาอื่นๆ เช่น "gpu", "power" หรือ "thermals"

ช่วงเวลาตัวอย่าง sampleInterval เท่ากับ 2,000 มิลลิวินาที หมายความว่าจะมีการอัปเดตทุก 2 วินาทีเป็นอย่างช้าที่สุด

หากระบบไม่สามารถแสดงตัวอย่างตามช่วงเวลาที่ขอ ระบบจะแสดงตัวอย่างในช่วงเวลาที่เหมาะสมที่สุดที่มีอยู่ ตัวอย่างเช่น หากมีการขอช่วงเวลา 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 });

นอกจากนี้ ผู้ใช้ยังบังคับให้อ่าน PressureRecord ได้โดยเรียกใช้เมธอด takeRecords()

เมธอด takeRecords() ของอินเทอร์เฟซ PressureObserver จะแสดงผลอาร์เรย์ของออบเจ็กต์ PressureRecords ที่เก็บไว้ในเครื่องมือวัดความดัน โดยล้างข้อมูลออก

กรณีการใช้งานที่พบบ่อยที่สุดก็คือการดึงข้อมูลบันทึกแรงกดดันที่รอดำเนินการทั้งหมดทันที และยังไม่ได้ประมวลผลโดยฟังก์ชัน Callback ของผู้สังเกตการณ์ก่อนที่จะยกเลิกการเชื่อมต่อผู้สังเกตการณ์ เพื่อให้ประมวลผลบันทึกที่รอดำเนินการทั้งหมดได้เมื่อปิดผู้สังเกตการณ์

การเรียกใช้เมธอดนี้จะล้างรายการระเบียนที่รอดําเนินการ ดังนั้นระบบจะไม่เรียกใช้การเรียกกลับ

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 ไหม แจ้งปัญหาเกี่ยวกับข้อกำหนดหรือแสดงความคิดเห็นในปัญหาที่มีอยู่ในที่เก็บ GitHub ที่เกี่ยวข้อง

รายงานปัญหาเกี่ยวกับการติดตั้งใช้งาน

คุณพบข้อบกพร่องในการใช้งาน Chromium ไหม หรือการใช้งานแตกต่างจากข้อกําหนดหรือไม่ รายงานข้อบกพร่องที่ new.crbug.com โดยระบุรายละเอียดให้มากที่สุดเท่าที่จะเป็นไปได้ วิธีการจำลอง และป้อน Blink>PerformanceAPIs>ComputePressure ในช่องคอมโพเนนต์

แหล่งข้อมูล