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

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

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

API Áp lực điện toán cung cấp các trạng thái cấp cao biểu thị áp lực trên hệ thống. API 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 rằng 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 chịu áp lực không thể kiểm soát.

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

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

Dùng thử Compute Pressure API

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

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

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

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

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

Các ứng dụng phổ biến theo thời gian thực này được phân loại là mềm. Điều đó nghĩa là chất lượng dịch vụ sẽ suy giảm nếu hệ thống được vận hành ngoài một số trạng thái nhất định, nhưng không dẫn đến lỗi hệ thống hoàn toàn. Các ứng dụng thời gian thực mềm này được hưởng lợi rất nhiều từ việc có thể đ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 mục đích hỗ trợ các quyết định điều chỉnh sau.

Hội nghị truyền hình

  • Điều chỉnh số lượng nguồn cấp dữ liệu video xuất hiện đồng thời trong các 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 các bước xử lý video không cần thiết, chẳng hạn như một số bộ lọc máy ảnh.
  • Tắt tính năng xử lý âm thanh không cần thiết, chẳng hạn như tính năng giảm tiếng ồn WebRTC.
  • Xoay núm chất lượng so với tốc độ và kích thước so với tốc độ về phía "tốc độ" trong quá trình 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 tài sản chất lượng thấp hơn để biên soạn video (mô hình 3D, hoạ tiết, chương trình đổ 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 làm giảm độ chân thực của các chi tiết không cần thiết (nước, vải, ảnh động lửa, độ sáng da, hiệu ứng chói hoặc mô phỏng vật lý không ảnh hưởng đến lối chơi).
  • Chỉnh sửa các nút điều chỉnh chất lượng và tốc độ trong công cụ kết xuất của trò chơi (chất lượng bóng, bộ lọc kết cấu, khoảng cách xem).

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

Giao diện

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

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

Compute Áp API xác định 2 giao diện mới.

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

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

PressureObserver

Khi tạo đối tượng PressureObserver, đối tượng này được định cấu hình để theo dõi áp suất của các nguồn được hỗ trợ, tại một khoảng thời gian lấy mẫu nhất định. Bạn có thể quan sát riêng lẻ hoặc không quan sát các nguồn được hỗ trợ bất cứ lúc nào trong 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): Tạo một đối tượng PressureObserver mới sẽ gọi một hàm gọi lại đã chỉ định khi phát hiện thấy sự thay đổi về giá trị của nguồn đang được quan sát.

Hàm khởi tạo sẽ lấy một hàm gọi lại bắt buộc.

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.

Phương thức

PressureObserver.observe(source, options): Cho "PressureObserver" biết nguồn nào cần quan sát và options không bắt buộc, dưới dạng tham số.

Tùy chọn

PressureObserverOptions: Chứa khoảng thời gian mẫu, sampleInterval tính bằng mili giây, mà tại thời điểm đó người dùng yêu cầu cập nhậ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" dừng quan sát mọi nguồn.

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

static PressureObserver.knownSources() (chỉ có thể đọc): Trả về các loại nguồn đã biết của tác nhân người dùng theo thứ tự bảng chữ cái.

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 tính toán Áp suất điện hiện tại, chỉ có "cpu" được hỗ trợ.

PressureRecord

Giao diện PressureRecord của Compute Pressure 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ó thể đọc): Trả về một chuỗi đại diện cho nguồn gốc của bản ghi.

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ó thể đọc): Trả về một số đại diện cho dấu thời gian có độ phân giải cao.

Ví dụ

Các phần sau đây liệt kê ví dụ về cách sử dụng.

Xác định khả năng hỗ trợ API

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

Tạo trình quan sát áp suất

Tạo trình quan sát áp lực bằng cách gọi hàm khởi tạo của trình quan sát đó với một hàm gọi lại để chạy bất cứ khi nào có thông tin cập nhật về áp lực:

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

Cách sử dụng trình quan sát áp suất

Chỉ có một cách để bắt đầu quan sát áp lực. Đối với mỗi nguồn, hãy gọi observer.observe(source).

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

Trong ví dụ này, "cpu" là nguồn áp suất mà chúng ta quan tâm. Hiện tại, đó 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".

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

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

Để ngừ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');

Để ngừng quan sát tất 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 suất

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

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

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 trả về một mảng các đối tượng PressureRecords được lưu trữ trong trình quan sát áp suất, làm trống mảng đó.

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

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

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

Chia sẻ ý kiến phản hồi của bạn

API có hoạt động như mong đợi không? Bạn có thấy 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 bình luận về vấn đề hiện có trong kho lưu trữ GitHub tương ứng.

Báo cáo sự cố về triển khai

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

Tài nguyên