API Áp suất tính toán

Nhận thông báo về áp lực điện toán của hệ thống.

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

API Áp suất tính toán cung cấp các trạng thái cấp cao đại diện cho áp lực của hệ thống. Việc này cho phép quá trình triển khai sử dụng các chỉ số phần cứng cơ bản phù hợp để đảm bảo người dùng có thể tận dụng tất cả sức mạnh xử lý có sẵn, miễn là hệ thống không gặp phải tình trạng quá tải không thể kiểm soát.

Trạng thái hiện tại

Bước Trạng thái
1. Tạo thông báo giải thích Hoàn tất
2. Tạo bản nháp ban đầu của quy cách Hoàn tất
3. Thu thập ý kiến phản hồi và cải tiến thiết kế Đang tiến hành
4. Bản dùng thử theo nguyên gốc Hoàn chỉnh
5. Chạy Hoàn tất (Chrome 125)

Dùng thử Compute Compute API

Để thử nghiệm với Compute Compute API cục bộ, hãy đọc trang này.

Đăng ký dùng thử theo nguyên gốc

Từ Chrome 115, Compute Áp lực API được cung cấp dưới dạng bản dùng thử theo nguyên gốc. Dự kiến phiên bản này sẽ ngừng hoạt động trong Chrome 123 (ngày 29 tháng 5 năm 2024). Đăng ký tại đây.

Trường hợp sử dụng

Các trường hợp sử dụng chính được tăng cường bởi Compute Compute API hiện tại là hội nghị truyền hình và trò chơi video.

Các ứng dụng theo thời gian thực phổ biến này được phân loại là ứng dụng mềm. Tức là chất lượng dịch vụ suy giảm nếu hệ thống thực thi vượt quá một số trạng thái nhất định, nhưng không dẫn đến toàn bộ lỗi hệ thống. Các ứng dụng mềm theo thời gian thực này được hưởng nhiều lợi ích nhờ khả năng điều chỉnh khối lượng công việc dựa trên mức tiêu thụ hoặc áp lực của CPU.

Cụ thể, phiên bản đầu tiên của API này nhằm hỗ trợ các quyết định điều chỉnh sau đây.

Hội nghị truyền hình

  • Điều chỉnh số lượng nguồn cấp dữ liệu video hiển thị đồng thời trong cuộc gọi có nhiều người tham gia.
  • Giảm chất lượng xử lý video (độ phân giải video, số khung hình/giây).
  • Bỏ qua bước xử lý video không thiết yếu, chẳng hạn như một số bộ lọc của máy ảnh.
  • Tắt tính năng xử lý âm thanh không thiết yếu, chẳng hạn như tính năng khử tiếng ồn WebRTC.
  • Biến các nút chất lượng so với tốc độ và kích thước so với tốc độ thành "tốc độ" trong phương thức mã hoá video và âm thanh (trong WebRTC, WebCodecs hoặc mã hoá phần mềm).

Trò chơi video

  • Sử dụng các thành phần có chất lượng thấp hơn để soạn video (mô hình 3D, hoạ tiết, đổ bóng) và âm thanh (giọng nói, hiệu ứng âm thanh) của trò chơi.
  • Tắt các hiệu ứng dẫn đến các chi tiết không cần thiết ít thực tế hơn (nước, vải, ảnh động hoả hoạn, độ chói trên da, hiệu ứng ánh sáng loá hoặc mô phỏng vật lý không ảnh hưởng đến lối chơi).
  • Các nút chỉnh sửa so với chất lượng so với tốc độ trong công cụ kết xuất của trò chơi (chất lượng bóng, lọc hoạ tiết, khoảng cách xem).

Về mặt kỹ thuật, những việc này có thể thực hiện được bằng cách biết được nhiệt độ (ví dụ: hệ thống được làm mát thụ động) và trạng thái áp suất CPU cho luồng chính và các trình chạy mà trang web đang sử dụng. Trạng thái nhiệt của hệ thống là một trạng thái chung và có thể chịu ảnh hưởng của các ứng dụng cũng như trang web khác ngoài trang web đang quan sát.

Giao diện

Bạn có thể chạy Compute Compute API trong các ngữ cảnh sau:

  • Cửa sổ hoặc luồng chính
  • Nhân viên chuyên trách
  • Trình sử dụng chung

API Áp suất tính toán xác định 2 giao diện mới.

PressureObserver: Một đối tượng để quan sát áp lực điện toán của số lượng nguồn bất kỳ tại một khoảng thời gian mẫu được xác định trước. Lần lặp đầu tiên trong Chromium cho thấy "cpu" dưới dạng source. Hãy xem phần về tham số để biết thêm thông tin chi tiết. Mỗi đối tượng tiếp nhận dữ liệu có thể quan sát một cách không đồng bộ các xu hướng thay đổi áp lực trong một hệ thống.

PressureRecord: Mô tả xu hướng áp suất tại một thời điểm chuyển tiếp cụ thể. Bạn chỉ có thể lấy các đối tượng thuộc loại này theo 2 cách: dưới dạng dữ liệu đầu vào cho lệnh gọi lại Áp lực quan sát hoặc bằng cách gọi phương thức takeRecords() trên thực thể PressureObserver.

PressureObserver

Khi được tạo, đối tượng PressureObserver được định cấu hình để theo dõi áp lực của các nguồn được hỗ trợ tại một khoảng thời gian mẫu nhất định. Bạn có thể quan sát hoặc quan sát riêng các nguồn được hỗ trợ bất cứ lúc nào trong suốt thời gian hoạt động của đối tượng PressureObserver. Bạn không thể thay đổi khoảng thời gian lấy mẫu sau khi tạo đối tượng.

Hàm dựng

PressureObserver(callback, options): Tạo một đối tượng PressureObserver mới sẽ gọi một hàm callback được chỉ định khi phát hiện thấy có sự thay đổi về giá trị của nguồn đang được quan sát.

Hàm khởi tạo sẽ dùng một hàm callback bắt buộc và các tuỳ chọn không bắt buộc làm thông số.

Số nhận cuộc gọi lại

callback(): Lệnh gọi lại được gọi bằng một mảng các đối tượng PressureRecord chưa đọc.

Tùy chọn

PressureObserverOptions: Chứa khoảng thời gian mẫu (sampleInterval tính bằng mili giây) mà người dùng yêu cầu cập nhật.

Phương thức

PressureObserver.observe(source): Cho "PressureObserver" biết nguồn nào sẽ quan sát.

PressureObserver.unobserve(source): Yêu cầu "PressureObserver" ngừng quan sát một nguồn.

PressureObserver.disconnect(): Yêu cầu "PressureObserver" ngừng quan sát tất cả các nguồn.

PressureObserver.takeRecords(): Trả về một chuỗi bản ghi kể từ lệnh gọi lại gần đây nhất.

static PressureObserver.supportedSources() (chỉ có thể đọc): Trả về các loại nguồn được phần cứng hỗ trợ.

Thông số

source: Nguồn cần quan sát, ví dụ: "cpu". Đây phải là một trong các loại nguồn được hỗ trợ.

Trong phiên bản hiện tại của Áp suất tính toán, chỉ có "cpu" được hỗ trợ.

PressureRecord

Giao diện PressureRecord của Compute Compute API mô tả xu hướng áp lực của một nguồn tại một thời điểm chuyển đổi cụ thể.

Thuộc tính thực thể

PressureRecord.source (Chỉ đọc): Trả về một chuỗi biểu thị nguồn gốc nơi bản ghi đang đến.

PressureRecord.state (Chỉ đọc): Trả về một chuỗi biểu thị trạng thái áp lực đã ghi lại.

PressureRecord.time (Chỉ đọc): Trả về một số đại diện cho dấu thời gian có độ phân giải cao.

Ví dụ

API Áp suất tính toán có được hỗ trợ không?

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

Tạo trình quan sát áp lực

Tạo trình quan sát áp lực bằng cách gọi hàm khởi tạo với hàm callback sẽ chạy bất cứ khi nào có bản cập nhật áp lực:

const observer = new PressureObserver(
  (records) => { /* ... */ },
  { sampleInterval: 2000 }
);

Khoảng thời gian mẫu sampleInterval là 2000 mili giây có nghĩa là cứ hai giây một lần sẽ có bản cập nhật.

Nếu hệ thống không thể phân phát khoảng thời gian lấy mẫu đã yêu cầu. Hệ thống sẽ cung cấp các mẫu tại khoảng thời gian phù hợp nhất hiện có. Ví dụ: nếu yêu cầu khoảng thời gian 2000 mili giây, nhưng hệ thống chỉ có thể cung cấp mẫu ở tối đa 1000 mili giây, thì 1000 mili giây sẽ được chọn.

Sử dụng thiết bị quan sát áp lực

Chỉ có một cách để khởi động trình quan sát áp lực. Đối với mỗi lệnh gọi nguồn observer.observe(source).

observer.observe("cpu");

Trong ví dụ này, "cpu" là nguồn áp lực mà chúng ta quan tâm. Hiện tại, đây là nguồn duy nhất có sẵn. Trong tương lai, có thể có các nguồn khác như "gpu", "power" hoặc "thermals".

Để dừng quan sát một nguồn, hãy sử dụng phương thức unobserve() như trong ví dụ sau:

observer.unobserve("cpu");

Để bỏ quan sát tất cả các nguồn cùng một lúc, hãy sử dụng phương thức disconnect() như trong ví dụ sau:

observer.disconnect();

Truy xuất bản ghi áp lực

Các bản ghi áp suất có thể được truy xuất bằng hàm callback. Hàm này sẽ được gọi mỗi khi có thay đổi xảy ra ở trạng thái áp lực.

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, { sampleInterval: 1000 });
await observer.observe("cpu");

Người dùng cũng có thể buộc đọc PressureRecord bằng cách gọi phương thức takeRecords().

Phương thức takeRecords() của giao diện PressureObserver sẽ trả về một mảng các đối tượng PressureRecords được lưu trữ trong trình quan sát áp lực, làm trống đối tượng đó.

Trường hợp sử dụng phổ biến nhất cho việc này là tìm nạp ngay lập tức tất cả các bản ghi áp lực đang chờ xử lý, chưa được xử lý bằng hàm callback của trình quan sát, trước khi ngắt kết nối trình quan sát, để mọi bản ghi đang chờ xử lý đều có thể được xử lý khi tắt trình quan sát.

Khi gọi phương thức này, danh sách bản ghi đang chờ xử lý sẽ bị xoá, do đó lệnh gọi lại sẽ không chạy được.

const observer = new PressureObserver(
  (records) => { /* Do something with records. */ },
  { sampleInterval: 1000 }
);

await observer.observe("cpu");

setTimeout(() => {
  // Forced records reading.
  const records = observer.takeRecords();
  observer.disconnect();
  // Do something with last records if any.
}, 2000);

Cho chúng tôi biết về thiết kế của API

Có điều gì về API không hoạt động như bạn mong đợi không? Bạn có thấy bất kỳ phương thức hoặc thuộc tính nào bị thiếu khi sử dụng API không? Gửi vấn đề về thông số kỹ thuật hoặc nhận xét về vấn đề hiện có trong kho lưu trữ GitHub tương ứng.

Báo cáo sự cố với quá trình triển khai

Bạn có phát hiện thấy lỗi khi triển khai Chromium không? Hay cách triển khai có khác với thông số kỹ thuật không? Báo cáo lỗi tại new.crbug.com. Hãy nhớ cung cấp nhiều thông tin chi tiết nhất có thể, hướng dẫn đơn giản để tái tạo và nhập Blink>PerformanceAPIs>ComputePressure vào hộp Components.

Các đường liên kết hữu ích