SystraceProfiler – это инструмент профилирования, который позволяет измерять время выполнения конкретных участков кода, называемых «секциями». Путем измерения времени выполнения каждой секции вы можете выявить факторы, которые вызывают задержки в работе вашего приложения.
Использование секционного профайлера особенно полезно в крупных приложениях с распределенной системой из множества компонентов и сервисов. Профайлер позволяет быстрее идентифицировать проблемные участки кода и сосредоточиться на их улучшении для повышения общей производительности приложения. Применять его можно и при внесении изменений в проект, чтобы оценить, какое влияние оказали эти изменения.
SystraceProfiler инициализируется при запуске приложения, но для начала профилирования требуется явная разметка начала и конца секции анализа – время выполнения будет считаться между этими точками. Такой подход позволяет оценить скорость выполнения вплоть до конкретных методов и запросов.
Собранные данные профилирования находятся в разделе «Секционный профайлер». Здесь отображены данные о версии приложения, устройстве, ОС, теге, с которым было выполнено профилирование, и длительности его выполнения:

Количество отчётов ограничено – не более 500 штук в день. Все они автоматически сгруппированы по версии приложения и тэгу. Просмотреть результаты профилирования можно прямо в браузере по клику на интересующий отчет. Для каждого метода высчитано время выполнения, количество вхождений конкретного метода в секцию профилирования и прочие метрики:

Таким образом, секционный профайлер – мощный инструмент для анализа производительности кода, который помогает выявлять узкие места и проблемные участки, требующие оптимизации. В результате это ведет к повышению не только эффективности работы приложения, но и общего качества пользовательского опыта.
Перед началом использования инструмента в вашем проекте, необходимо подключить зависимости:
Для cocoapods Podfile
source 'https://github.com/odnoklassniki/tracer-ios.git' pod 'OKTracer'
Следите за актуальностью версии SDK, самая свежая: 1.4.0.
Более подробное описание зависимостей ищите на странице Быстрый старт.
За настройку профилирования отвечает SysTraceConfiguration:
| Параметр | Тип | Описание |
|---|---|---|
autoStart | Bool? | Определяет, должен ли мониторинг использования диска запускаться автоматически. По умолчанию true. |
duration | TimeInterval? | Определяет длительность профилирования. По умолчанию 10. |
FeatureObject используется для привязки конфигурации к отслеживаемым объектам и сценариям. В случае systrace определяется дополнительным параметром:
| Параметр | Тип | Описание |
|---|---|---|
scenarios | SysTraceScenario? | Определение сценария для секционного профайлера (алиас к строке) |
Для инициализации профайлера:
import OKTracer let sysTraceScenarios: [SysTraceScenario] = ["launch", "urlSession"] let sysTraceConfiguration = SysTraceConfiguration(autoStart: false, duration: 20) let features: [FeatureConfiguration] = [.systrace(probability: 1)] let items: [FeatureObject] = [.systrace(scenarios: sysTraceScenarios, configuration: sysTraceConfiguration)] let tracerService = TracerFactory.tracerService(token: "Ваш appToken", features: features, items: items) tracerService.start()
Методы, позоляющие управлять профилированием, определены в расширении TracerServiceProtocol и доступны в вашем tracerService при корректном подключении фичи.
beginSysTraceМетод начинает системную трассировку для указанного сценария и секции кода.
| Параметр | Тип | Описание |
|---|---|---|
scenario | SysTraceScenario | Сценарий системной трассировки. |
section | String | Название секции, для которой начинается трассировка. |
function | StaticString | Имя функции (по умолчанию текущая функция). |
line | Int | Номер строки (по умолчанию текущая строка). |
endSysTraceМетод завершает системную трассировку для указанного сценария и секции кода.
| Параметр | Тип | Описание |
|---|---|---|
scenario | SysTraceScenario | Сценарий системной трассировки. |
section | String | Название секции, для которой завершается трассировка. |
function | StaticString | Имя функции (по умолчанию текущая функция). |
line | Int | Номер строки (по умолчанию текущая строка). |
beginSysTraceObjCМетод начинает системную трассировку для указанного сценария и секции кода (для Objective-C).
| Параметр | Тип | Описание |
|---|---|---|
scenario | SysTraceScenario | Сценарий системной трассировки. |
section | String | Название секции, для которой начинается трассировка. |
function | String | Имя функции (по умолчанию текущая функция). |
line | Int | Номер строки (по умолчанию текущая строка). |
endSysTraceObjCМетод завершает системную трассировку для указанного сценария и секции кода (для Objective-C).
| Параметр | Тип | Описание |
|---|---|---|
scenario | SysTraceScenario | Сценарий системной трассировки. |
section | String | Название секции, для которой завершается трассировка. |
function | String | Имя функции (по умолчанию текущая функция). |
line | Int | Номер строки (по умолчанию текущая строка). |
startSysTraceМетод запускает системную трассировку с необязательной конфигурацией.
| Параметр | Тип | Описание |
|---|---|---|
scenario | SysTraceScenario | Сценарий системной трассировки. |
configuration | SysTraceConfiguration? | Опциональная конфигурация для трассировки. |
stopSysTraceМетод завершает системную трассировку для указанного сценария.
| Параметр | Тип | Описание |
|---|---|---|
scenario | SysTraceScenario | Сценарий системной трассировки. |
Пример использования:
Отправка события
// инициализация профайлера tracerService.beginSysTrace(scenario: "launch", section: "\(ViewController.self)") ... tracerService.endSysTrace(scenario: "launch", section: "\(ViewController.self)")