如何在xcode 4.3中找到CPU采样器?

时间:2012-03-31 13:52:57

标签: iphone ipad instruments xcode4.3 xcode-instruments

我想在我的Project for CPU Measurement中使用“CPU Sampler”,但是我找不到它。我正在使用XCode 4.3

4 个答案:

答案 0 :(得分:2)

首先在界面文件中导入所有必需的头文件。

#include <sys/sysctl.h>
#include <sys/types.h>
#include <mach/mach.h>
#include <mach/processor_info.h>
#include <mach/mach_host.h>

processor_info_array_t cpuInfo, prevCpuInfo;
mach_msg_type_number_t numCpuInfo, numPrevCpuInfo;
unsigned numCPUs;
NSLock *CPUUsageLock;

并在您的实施文件中。

- (void)cpuSampler:(NSTimer *)timer
  {
    natural_t numCPUsU = 0U;
    kern_return_t err = host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO,&numCPUsU, &cpuInfo, &numCpuInfo);
    if(err == KERN_SUCCESS) {
           [CPUUsageLock lock];

           for(unsigned i = 0U; i < numCPUs; ++i) {
               float inUse, total;
               if(prevCpuInfo) {
                      inUse = (
                     (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER]   - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER])
                     + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM])
                     + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE]   - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE])
                     );
                     total = inUse + (cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE] - prevCpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE]);
               } else {
                        inUse = cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_USER] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_SYSTEM] + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_NICE];
                        total = inUse + cpuInfo[(CPU_STATE_MAX * i) + CPU_STATE_IDLE];
               }
               if (i == 0) {
                 NSString *string0 = [NSString stringWithFormat:@"Core: %u Usage: %f%",i,(inUse / total)*100];
               }
              if (i == 1) {
                 NSString *string1 = [NSString stringWithFormat:@"Core: %u Usage: %f%",i,(inUse / total)*100];
              }
          }
      [CPUUsageLock unlock];

    if(prevCpuInfo) {
        size_t prevCpuInfoSize = sizeof(integer_t) * numPrevCpuInfo;
        vm_deallocate(mach_task_self(), (vm_address_t)prevCpuInfo, prevCpuInfoSize);
    }

    prevCpuInfo = cpuInfo;
    numPrevCpuInfo = numCpuInfo;

    cpuInfo = NULL;
    numCpuInfo = 0U;
    }
}

NSlog string0和string1的值,以了解CPU测量并通过计时器调用此方法。

答案 1 :(得分:1)

您可以使用Time Profiler仪器代替Sampler仪器。他们记录了类似的信息。

如果您需要使用适用于iOS的Sampler乐器,请选择OpenGL ES Driver模板。 OpenGL ES Driver模板包括Sampler仪器。选择OpenGL ES Driver模板后,从仪器列表中选择OpenGL ES Driver仪器,然后按Delete(退格键)键从文档中删除仪器。

答案 2 :(得分:1)

采样器仪器始终位于仪器中。要启动它,请启动Instruments并使用空白分析会话或从OpenGL ES Driver模板(如Mark建议)开始,该模板中已有Sampler工具。要将Sampler仪器添加到模板,请单击Library工具栏选项,然后将Sampler拖到模板中。

就个人而言,我更喜欢使用Time Profiler,原因是我在this answer中描述的原因。

答案 3 :(得分:0)

左上方有一个运行按钮,看起来像一个播放按钮。如果单击该按钮,则会出现一个下拉菜单,选择配置文件。这将打开“Instruments”,您可以在其中选择“Time Profiler”。如果应用程序未在模拟器中自动启动,请单击“录制”。

我建议选中“隐藏系统库”和“仅显示Obj-C”复选框,以便查看代码。

*请注意,如果您双击一个函数,它将显示一个百分比细分它花在一些代码上的时间,这非常方便。