X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/3903760236c30e3b5ace7a4eefac3a269d68957c..b226f5e54a60dc81db17b1260381d7dbfea3cdf1:/osfmk/kperf/task_samplers.c diff --git a/osfmk/kperf/task_samplers.c b/osfmk/kperf/task_samplers.c index ae49da4b4..3d521b782 100644 --- a/osfmk/kperf/task_samplers.c +++ b/osfmk/kperf/task_samplers.c @@ -33,26 +33,15 @@ #include -extern boolean_t workqueue_get_pwq_exceeded(void *v, boolean_t *exceeded_total, - boolean_t *exceeded_constrained); -extern boolean_t memorystatus_proc_is_dirty_unsafe(void *v); +extern void memorystatus_proc_flags_unsafe(void * v, boolean_t *is_dirty, + boolean_t *is_dirty_tracked, boolean_t *allow_idle_exit); void -kperf_task_snapshot_sample(struct kperf_task_snapshot *tksn, - struct kperf_context *ctx) +kperf_task_snapshot_sample(task_t task, struct kperf_task_snapshot *tksn) { - thread_t thread; - task_t task; - boolean_t wq_state_available = FALSE; - boolean_t exceeded_total, exceeded_constrained; - BUF_INFO(PERF_TK_SNAP_SAMPLE | DBG_FUNC_START); assert(tksn != NULL); - assert(ctx != NULL); - - thread = ctx->cur_thread; - task = get_threadtask(thread); tksn->kptksn_flags = 0; if (task->effective_policy.tep_darwinbg) { @@ -65,26 +54,18 @@ kperf_task_snapshot_sample(struct kperf_task_snapshot *tksn, tksn->kptksn_flags |= KPERF_TASK_FLAG_BOOSTED; } #if CONFIG_MEMORYSTATUS - if (memorystatus_proc_is_dirty_unsafe(task->bsd_info)) { + boolean_t dirty = FALSE, dirty_tracked = FALSE, allow_idle_exit = FALSE; + memorystatus_proc_flags_unsafe(task->bsd_info, &dirty, &dirty_tracked, &allow_idle_exit); + if (dirty) { tksn->kptksn_flags |= KPERF_TASK_FLAG_DIRTY; } -#endif - - if (task->bsd_info) { - wq_state_available = - workqueue_get_pwq_exceeded(task->bsd_info, &exceeded_total, - &exceeded_constrained); + if (dirty_tracked) { + tksn->kptksn_flags |= KPERF_TASK_FLAG_DIRTY_TRACKED; } - if (wq_state_available) { - tksn->kptksn_flags |= KPERF_TASK_FLAG_WQ_FLAGS_VALID; - - if (exceeded_total) { - tksn->kptksn_flags |= KPERF_TASK_FLAG_WQ_EXCEEDED_TOTAL; - } - if (exceeded_constrained) { - tksn->kptksn_flags |= KPERF_TASK_FLAG_WQ_EXCEEDED_CONSTRAINED; - } + if (allow_idle_exit) { + tksn->kptksn_flags |= KPERF_TASK_ALLOW_IDLE_EXIT; } +#endif tksn->kptksn_suspend_count = task->suspend_count; tksn->kptksn_pageins = task->pageins; @@ -116,3 +97,11 @@ kperf_task_snapshot_log(struct kperf_task_snapshot *tksn) LOWER_32(tksn->kptksn_system_time_in_terminated_threads)); #endif /* defined(__LP64__) */ } + +void +kperf_task_info_log(struct kperf_context *ctx) +{ + assert(ctx != NULL); + + BUF_DATA(PERF_TK_INFO_DATA, ctx->cur_pid); +}