how to overall cpu utilization of iphone device

Hi,


I want to get overall cpu utilization of device programmatically in my iphone app. I am able to get cpu utilization for my app using the below code. Can you please help me to get overall cpu utilization of device not just my app?




float cpu_usage() { kern_return_t kr; task_info_data_t tinfo; mach_msg_type_number_t task_info_count; task_info_count = TASK_INFO_MAX; kr = task_info(mach_task_self(), TASK_BASIC_INFO, (task_info_t)tinfo, &task_info_count); if (kr != KERN_SUCCESS) { return -1; } task_basic_info_t basic_info; thread_array_t thread_list; mach_msg_type_number_t thread_count; thread_info_data_t thinfo; mach_msg_type_number_t thread_info_count; thread_basic_info_t basic_info_th; uint32_t stat_thread = 0; / basic_info = (task_basic_info_t)tinfo; / kr = task_threads(mach_task_self(), &thread_list, &thread_count); if (kr != KERN_SUCCESS) { return -1; } if (thread_count > 0) stat_thread += thread_count; long tot_sec = 0; long tot_usec = 0; float tot_cpu = 0; int j; for (j = 0; j < thread_count; j++) { thread_info_count = THREAD_INFO_MAX; kr = thread_info(thread_list[j], THREAD_BASIC_INFO, (thread_info_t)thinfo, &thread_info_count); if (kr != KERN_SUCCESS) { return -1; } basic_info_th = (thread_basic_info_t)thinfo; if (!(basic_info_th->flags & TH_FLAGS_IDLE)) { tot_sec = tot_sec + basic_info_th->user_time.seconds + basic_info_th->system_time.seconds; tot_usec = tot_usec + basic_info_th->system_time.microseconds + basic_info_th->system_time.microseconds; tot_cpu = tot_cpu + basic_info_th->cpu_usage / (float)TH_USAGE_SCALE * 100.0; } } / kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t)); assert(kr == KERN_SUCCESS); return tot_cpu; }
Answered by DTS Engineer in 29336022

You should look at the Mach host APIs, starting with

<mach/host_info.h>
.

Do you want do this just for debugging? Or are you planning to leave this code in your shipping app?

IMO this latter is a long-term compatibility concern. The philosophy of the iOS sandbox is that apps should only be able to get information about themselves, not about other apps or the system as a whole. Certain low-level APIs that were grandfathered in from OS X run counter to this philosophy. Over time the sandbox has a habit of catching up with these discrepancies. For example, in iOS 9 the sandbox prevents you from getting a [list of all processes on the system via sysctl]706]. While I don't have anything specific to say about the Mach host APIs, it's not hard to imagine them running afoul of the sandbox at some point in the future.

Share and Enjoy

Quinn "The Eskimo!"
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"
Accepted Answer

You should look at the Mach host APIs, starting with

<mach/host_info.h>
.

Do you want do this just for debugging? Or are you planning to leave this code in your shipping app?

IMO this latter is a long-term compatibility concern. The philosophy of the iOS sandbox is that apps should only be able to get information about themselves, not about other apps or the system as a whole. Certain low-level APIs that were grandfathered in from OS X run counter to this philosophy. Over time the sandbox has a habit of catching up with these discrepancies. For example, in iOS 9 the sandbox prevents you from getting a [list of all processes on the system via sysctl]706]. While I don't have anything specific to say about the Mach host APIs, it's not hard to imagine them running afoul of the sandbox at some point in the future.

Share and Enjoy

Quinn "The Eskimo!"
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"
how to overall cpu utilization of iphone device
 
 
Q