Как я могу подразделить функцию при использовании Instruments Time Profiler - PullRequest
3 голосов
/ 01 апреля 2011

У меня есть относительно длинная функция, которая доминирует в приборе времени инструментов. Есть ли способ добавить дополнительные символы в эту функцию, чтобы выборка показала время, выделенное для различных частей функции? Я ищу что-то вроде макроса MARK, который существовал для prof (1) года назад.

Ответы [ 4 ]

6 голосов
/ 06 мая 2011

Использование макроса:

#define MARK(K) asm("M."#K":");

работал хорошо для меня. Это на самом деле просто упрощение старого макроса MARK, который я упоминал в своем первоначальном вопросе. Размещение МАРКА (LOOP1); где-то в функции добавится новый символ, M.LOOP1, который будет отображаться в списке функций, отображаемых акулой или инструментами.

5 голосов
/ 03 мая 2011

Недавно я обнаружил, что в профилировщике времени в инструментах, если вы дважды щелкните метод, он покажет вам ваш исходный код с процентами времени, потраченного на каждую строку.

http://douglasheriot.com/blog/2011/04/xcode-4-instruments-awesomeness/

Я нашел это очень полезным, но я не уверен, что это то, что вы просите.

1 голос
/ 04 мая 2011

ОБНОВЛЕНИЕ:

Я обновил код и создал отдельный проект:

https://github.com/nielsbot/Profiler


У меня есть код, который может сделать это здесь:У меня есть некоторый код, который вы можете найти, который может сделать это здесь: https://gist.github.com/952456 HTH

Вы можете профилировать разделы вашей функции, используя этот код следующим образом:

-(void)myMethod
{
    ProfilerEnter( __PRETTY_FUNCTION__ );

    // ... code ...
    {
        ProfilerEnter("operation x");

        // your code here
        // ...

        ProfilerExit("operation x");
    }

    ProfilerExit(__PRETTY_FUNCTION__);
}
1 голос
/ 01 апреля 2011

Мне сказали, что Акула может сделать это, так что инструменты тоже должны, но вы должны сказать ему, что делать:

  • Делать выборку по времени настенных часов (нетолько процессорное время), из стека вызовов функций (не только ПК счетчика программ).

  • Чтобы сообщить вам строки кода (не только функции), которые появляются на значительном процентевыборки стека.

Выборка стека включает ПК и каждую инструкцию вызова, ведущую к тому месту, где находится ПК.Каждая инструкция в стеке несет совместную ответственность за этот отрезок времени.

Таким образом, любая строка кода, ответственная за X% времени, будет находиться в стеке X% времени.Если он достаточно большой, чтобы на него смотреть, вы увидите его на примерах.Вы можете получить много образцов, но на самом деле вам не нужно много.Это потому, что более важно определить местонахождение проблемы, чем измерить ее с большой точностью.

Если ваша самая большая проблема, если ее устранить, сэкономит вам 5%, она будет отображаться на 5% или более выборок.Если он меньше, ваш код довольно оптимален.Скорее всего, он намного больше, поэтому у вас не будет проблем с точным определением, где он находится.

Добавлено: Пример профилировщика, который выполняет выборку стека в настенное время и показывает процент за строкой Zoom , поэтому я предлагаю вам посмотреть это видео.Затем попытайтесь заставить инструменты делать то же самое.

...