摘要
在一段時間內,如果記憶體停滯層級超過指定的門檻,就會擷取信號的事件。
宣告
#include <zircon/syscalls-next.h>
zx_status_t zx_system_watch_memory_stall(zx_handle_t resource,
zx_system_memory_stall_type_t kind,
zx_duration_mono_t threshold,
zx_duration_mono_t window,
zx_handle_t* event);
說明
resource 必須是停滯資源的句柄。
kind 必須是下列其中一種 (請參閱 zx_object_get_info()
中的 ZX_INFO_MEMORY_STALL
):
ZX_SYSTEM_MEMORY_STALL_SOME
ZX_SYSTEM_MEMORY_STALL_FULL
threshold 是觸發信號的最低停滯時間。
window 是觀察期間的時間長度。
必須滿足 0 < threshold <= window <= 10 秒的條件。
如果在最後的時間範圍內,監控的停滯計時器至少增加了 threshold,則核心會在傳回的事件上設定 (ZX_EVENT_SIGNALED
),並在不再符合情況時清除。
權限
呼叫端工作政策必須允許 ZX_POL_NEW_EVENT
。
傳回值
zx_system_watch_memory_stall()
會在成功時傳回 ZX_OK,而 event 會是有效的句柄,或在失敗時傳回下列的錯誤代碼。
錯誤
ZX_ERR_BAD_HANDLE
resource 不是有效的句柄。
ZX_ERR_WRONG_TYPE
資源不是資源類型 ZX_RSRC_KIND_SYSTEM
。
ZX_ERR_OUT_OF_RANGE
resource 不在 [ZX_RSRC_SYSTEM_STALL_BASE
, ZX_RSRC_SYSTEM_STALL_BASE
+1) 的範圍內。
ZX_ERR_INVALID_ARGS
kind 不是上述值。
ZX_ERR_INVALID_ARGS
閾值或視窗不在允許的範圍內。
ZX_ERR_NO_MEMORY
記憶體不足導致失敗。使用者空間沒有適當的方式來處理這個 (不太可能發生的) 錯誤。日後的版本將不會再發生這個錯誤。
附註
即使 API 將threshold 和 window 定義為持續時間類型 (即以奈秒為單位),核心可能不會使用要求值的完整精確度。
另請參閱
zx_object_get_info()
中的ZX_INFO_MEMORY_STALL
主題