通訊協定
供應商
在 fuchsia.memorypressure/memorypressure.fidl 中定義
註冊通訊協定
RegisterWatcher
用於註冊記憶體壓力層級變更。watcher
:Provider
會用來將層級變更訊息傳送至用戶端的記憶體壓力 Watcher
管道。
目前的記憶體壓力等級會立即傳送至監看器 呼叫此方法時
建議在元件樹狀結構中登錄根工作以獲取變更 而不是讓個別工作在樹狀結構的暫存處更低。 客戶數量越少,系統就越不容易因同時傳送大量記憶體壓力訊息而流失。此外,工作擁有的背景資訊越多,就越能透過控制樹狀結構中子項工作的行為,對記憶體壓力做出反應。
要求
名稱 | 類型 |
---|---|
watcher |
client_end:Watcher
|
Watcher
在 fuchsia.memorypressure/memorypressure.fidl 中定義
Watcher 通訊協定 希望收到記憶體壓力等級變更通知的用戶端應實作此通訊協定。
OnLevelChanged
當記憶體壓力等級變更時,傳送至已註冊的用戶端。
level
:表示目前的記憶體壓力等級。
也會在初始連線時透過 RegisterWatcher
叫用,因此新的
已註冊的用戶端可以探索目前的記憶體壓力等級。
監看員必須立即回覆訊息來確認已接收 收到層級變更通知,已開始透過 結果。隨後系統可能會在傳送後,繼續以非同步方式收回記憶體 確認輸入狀態
以下提供一些實用的客戶指南:
-
只有在提供者收到與先前訊息相符的回覆時,監控器才會收到新的壓力層級變更通知。如果在該期間發生多次層級轉換,監控器就會收到最新的壓力層級通知。
-
關卡變更由邊緣觸發,且用戶端應維持 追蹤目前的壓力水平 (如有需要)。舉例來說,工作可能會收到「CRITICAL」等級的通知,並因此捨棄所有快取。在一段時間後,系統可能會觸發活動,導致分配相當大量的記憶體。此時,工作項目 別忘了,它的最後一個壓力等級是重大,而且 觸發會耗用大量記憶體的活動
-
為了提升效能,供應商可能會決定略過傳送某些壓力等級變更的訊息。舉例來說,若碰到 都不需要告知客戶 單轉效果在這種情況下,供應商可能會為訊息設定頻率限制。 同樣地,供應商可能會決定以相同的壓力等級 (尤其是「嚴重」等級) 重複傳送訊息,表示需要採取進一步行動。
要求
名稱 | 類型 |
---|---|
level |
Level
|
回應
<EMPTY>
ENUMS
等級嚴格
類型:uint32
在 fuchsia.memorypressure/memorypressure.fidl 中定義
表示記憶體壓力等級。
名稱 | 值 | 說明 |
---|---|---|
一般 |
1 |
記憶體壓力水平良好。 已註冊的用戶端可以自由保留快取,並無限制地分配記憶體。 不過,用戶端應小心不要主動重新建立 過渡到 NORMAL 層級 導致記憶體立即激增 將層級再次推送到 WARNING。 |
警告 |
2 |
記憶體壓力等級有點受限,而且可能會跨越 減少的關鍵壓力範圍 已註冊的用戶端應將作業最佳化以限制記憶體 而非達到最佳效能,例如縮減快取大小 以及非必要的記憶體配置 客戶必須謹慎控管工作量 才能取回記憶體,並確保系統不會顯示 效能會降低存在一些記憶體壓力,但數量不足 因為這類遊戲可以彌補使用者回應的不足,讓他們收回記憶體。 |
嚴重 |
3 |
記憶體壓力等級受到嚴格限制。 註冊的用戶端應會捨棄所有非必要的記憶體,並避免分配更多記憶體。否則可能會導致工作終止,或在全球記憶體壓力下重新啟動系統。 如有需要,用戶端可能會執行耗用大量資源的作業來回收記憶體,因為未執行這項作業可能會導致終止。客戶可能會判斷 在此例中,效能命中是公平的取捨。 |