Как программно запускать/останавливать инструменты (Time Profiler)?

Есть ли способ запустить/остановить профилирование инструментов программно? Мне нужно надежно профилировать только определенный раздел моего кода OS X, но я не могу найти документацию для инструментов, которая могла бы рассказать мне, как я могу это сделать. В CHUD/Shark был программный API и инструмент командной строки для поддержки этого, но я нигде не вижу эквивалента для инструментов? FWIW Я нашел несколько старых постов на форуме примерно с 2009 года, в которых сетовали на отсутствие функциональности инструментов в этой области, но ничего более свежего.


person Paul R    schedule 25.06.2013    source источник


Ответы (1)


Да. Найдите DTPerformanceSession. Это была появился в Инструментах 4.0. Это была улучшено в Инструментах 4.1.

Эти документы содержат этот пример кода:

CFStringRef process = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%d"), getpid());
CFErrorRef error = NULL;
DTPerformanceSessionRef session = DTPerformanceSessionCreate(NULL, process, NULL, &error);
DTPerformanceSessionAddInstrument(session, (CFStringRef)@DTPerformanceSession_TimeProfiler, NULL, NULL, &error);
CFMutableArrayRef instrumentIDs = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks);
CFArrayAppendValue(instrumentIDs, @DTPerformanceSession_TimeProfiler);
DTPerformanceSessionStart(session, instrumentIDs, &error);

// do something in your app

DTPerformanceSessionStop(session, instrumentIDs, &error);
DTPerformanceSessionSave(session, (CFStringRef)@"/tmp/myAppProfile", &error);
DTPerformanceSessionDispose(session, &error);
person Ken Thomases    schedule 25.06.2013
comment
Отлично — с C API тоже — как раз то, что мне было нужно — спасибо! - person Paul R; 25.06.2013