fuchsia.memorypressure

新增:7

通訊協定

供應商

fuchsia.memorypressure/memorypressure.fidl 中定義

註冊通訊協定

RegisterWatcher

用於註冊記憶體壓力層級變更。watcherProvider 會用來將層級變更訊息傳送至用戶端的記憶體壓力 Watcher 管道。

目前的記憶體壓力等級會立即傳送至監看器 呼叫此方法時

建議在元件樹狀結構中登錄根工作以獲取變更 而不是讓個別工作在樹狀結構的暫存處更低。 客戶數量越少,系統就越不容易因同時傳送大量記憶體壓力訊息而流失。此外,工作擁有的背景資訊越多,就越能透過控制樹狀結構中子項工作的行為,對記憶體壓力做出反應。

要求

名稱類型
watcher client_end:Watcher

Watcher

fuchsia.memorypressure/memorypressure.fidl 中定義

Watcher 通訊協定 希望收到記憶體壓力等級變更通知的用戶端應實作此通訊協定。

OnLevelChanged

當記憶體壓力等級變更時,傳送至已註冊的用戶端。 level:表示目前的記憶體壓力等級。

也會在初始連線時透過 RegisterWatcher 叫用,因此新的 已註冊的用戶端可以探索目前的記憶體壓力等級。

監看員必須立即回覆訊息來確認已接收 收到層級變更通知,已開始透過 結果。隨後系統可能會在傳送後,繼續以非同步方式收回記憶體 確認輸入狀態

以下提供一些實用的客戶指南:

  1. 只有在提供者收到與先前訊息相符的回覆時,監控器才會收到新的壓力層級變更通知。如果在該期間發生多次層級轉換,監控器就會收到最新的壓力層級通知。

  2. 關卡變更由邊緣觸發,且用戶端應維持 追蹤目前的壓力水平 (如有需要)。舉例來說,工作可能會收到「CRITICAL」等級的通知,並因此捨棄所有快取。在一段時間後,系統可能會觸發活動,導致分配相當大量的記憶體。此時,工作項目 別忘了,它的最後一個壓力等級是重大,而且 觸發會耗用大量記憶體的活動

  3. 為了提升效能,供應商可能會決定略過傳送某些壓力等級變更的訊息。舉例來說,若碰到 都不需要告知客戶 單轉效果在這種情況下,供應商可能會為訊息設定頻率限制。 同樣地,供應商可能會決定以相同的壓力等級 (尤其是「嚴重」等級) 重複傳送訊息,表示需要採取進一步行動。

要求

名稱類型
level Level

回應

<EMPTY>

ENUMS

等級嚴格

類型:uint32

fuchsia.memorypressure/memorypressure.fidl 中定義

表示記憶體壓力等級。

名稱說明
1

記憶體壓力水平良好。

已註冊的用戶端可以自由保留快取,並無限制地分配記憶體。

不過,用戶端應小心不要主動重新建立 過渡到 NORMAL 層級 導致記憶體立即激增 將層級再次推送到 WARNING。

2

記憶體壓力等級有點受限,而且可能會跨越 減少的關鍵壓力範圍

已註冊的用戶端應將作業最佳化以限制記憶體 而非達到最佳效能,例如縮減快取大小 以及非必要的記憶體配置

客戶必須謹慎控管工作量 才能取回記憶體,並確保系統不會顯示 效能會降低存在一些記憶體壓力,但數量不足 因為這類遊戲可以彌補使用者回應的不足,讓他們收回記憶體。

3

記憶體壓力等級受到嚴格限制。

註冊的用戶端應會捨棄所有非必要的記憶體,並避免分配更多記憶體。否則可能會導致工作終止,或在全球記憶體壓力下重新啟動系統。

如有需要,用戶端可能會執行耗用大量資源的作業來回收記憶體,因為未執行這項作業可能會導致終止。客戶可能會判斷 在此例中,效能命中是公平的取捨。