摘要
检索在给定时间范围内内存暂停级别超过给定阈值时发出信号的事件。
声明
#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
resource 不是资源类型 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
因内存不足而失败。用户空间没有很好的方式来处理这种(不太可能发生的)错误。在未来的 build 中,此错误将不再出现。
备注
即使 API 将阈值和时间范围定义为时长类型(即以纳秒为单位),内核也可能不会使用请求值的完整精度。
另请参阅
zx_object_get_info()
中的ZX_INFO_MEMORY_STALL
主题