Nhận thông tin về áp lực điện toán của hệ thống.
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 quy cách | 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. 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
Kể từ Chrome 115, Compute Pressure API sẽ đượ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ử.
Những ứng dụng thời gian thực phổ biến này được phân loại là mềm. Tức là chất lượng dịch vụ sẽ giảm nếu hệ thống được thực thi ngoài một số trạng thái nhất định, nhưng không dẫn đến sự cố toàn bộ hệ thống. 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 thích ứng sau.
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 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 quá trình 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 thành phần có chất lượng thấp hơn để tạo video của trò chơi (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).
- 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).
- Điều chỉnh các núm 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, 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
- Worker dùng chung
Compute Pressure API xác định hai giao diện mới.
PressureObserver
: Một đối tượng để quan sát áp lực tính toán của bất kỳ số lượng nguồn nào tại một khoảng thời gian lấy mẫu được xác định trước. Lần 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 đối tượng tiếp nhận dữ liệu có thể quan sát không đồng bộ các xu hướng thay đổi áp suất 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 đổi cụ thể. Bạn chỉ có thể lấy các đố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 lấy mẫu, sampleInterval
tính bằng
mili giây, tại đó 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" ngừng quan sát tất cả các 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.
Tham 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 Compute Pressure, chỉ hỗ trợ "cpu"
.
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ó thể đọc): Trả về một chuỗi đại diện cho trạng thái áp suất đã 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 trình quan sát áp suất. Đố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ể sẽ 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 vấn đề về việc triển khai
Bạn có tìm thấy lỗi khi 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 tạo và nhập Blink>PerformanceAPIs>ComputePressure vào hộp Components (Thành phần).