kperf_helpers.c   [plain text]


#include "kperf_helpers.h"

#include <darwintest.h>
#include <kperf/kperf.h>
#include <unistd.h>

void
configure_kperf_stacks_timer(pid_t pid, unsigned int period_ms, bool quiet)
{
	kperf_reset();

	(void)kperf_action_count_set(1);
	(void)kperf_timer_count_set(1);

	if (quiet) {
		T_QUIET;
	}
	T_ASSERT_POSIX_SUCCESS(kperf_action_samplers_set(1,
	    KPERF_SAMPLER_USTACK | KPERF_SAMPLER_KSTACK), NULL);

	if (pid != -1) {
		if (quiet) {
			T_QUIET;
		}
		T_ASSERT_POSIX_SUCCESS(kperf_action_filter_set_by_pid(1, pid), NULL);
	}

	if (quiet) {
		T_QUIET;
	}
	T_ASSERT_POSIX_SUCCESS(kperf_timer_action_set(0, 1), NULL);
	if (quiet) {
		T_QUIET;
	}
	T_ASSERT_POSIX_SUCCESS(kperf_timer_period_set(0,
	    kperf_ns_to_ticks(period_ms * NSEC_PER_MSEC)), NULL);
}