Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS - Get CPU usage from application

Does anyone know how to obtain CPU usage for an application? It's definitely possible, because there are application in app store (Activity Monitor Touch) which can show it.

like image 772
ivanzoid Avatar asked Nov 22 '11 07:11

ivanzoid


People also ask

Is there an activity monitor on iPhone?

iOS does not have an Activity Monitor or task manager the way that desktop Macs do within OS X, but if you'd like to see what apps and processes are running in the background of an iPhone, iPad, or iPod touch, you can do so using a few different methods.

Why is my CPU usage so high on iPhone?

Apps which are open in the background use large memory is a myth and quitting them is counterproductive. Location services to be allowed only while using the app. Set your iPhone to fetch email and calendar data from internet less frequently. Turning off Background App Refresh.


1 Answers

Update. This code is working for me:

Update 2. The thread_list was leaking, so added vm_deallocate

#import <mach/mach.h> #import <assert.h>  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; // Mach threads      basic_info = (task_basic_info_t)tinfo;      // get threads in the task     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 < (int)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->user_time.microseconds + basic_info_th->system_time.microseconds;             tot_cpu = tot_cpu + basic_info_th->cpu_usage / (float)TH_USAGE_SCALE * 100.0;         }      } // for each thread      kr = vm_deallocate(mach_task_self(), (vm_offset_t)thread_list, thread_count * sizeof(thread_t));     assert(kr == KERN_SUCCESS);      return tot_cpu; } 
like image 93
ivanzoid Avatar answered Sep 22 '22 05:09

ivanzoid