Systrace Profiler

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

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

SystraceProfiler инициализируется при запуске приложения, но для начала профилирования требуется явная разметка начала и конца секции анализа – время выполнения будет считаться между этими точками. Такой подход позволяет оценить скорость выполнения вплоть до конкретных методов и запросов.

Собранные данные профилирования находятся в разделе «Секционный профайлер». Здесь отображены данные о версии приложения, устройстве, ОС, теге, с которым было выполнено профилирование, и длительности его выполнения:

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

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

Подключение зависимостей к проекту

Перед началом использования инструмента в вашем проекте, необходимо подключить зависимости:

Для cocoapods Podfile

source 'https://github.com/odnoklassniki/tracer-ios.git' pod 'OKTracer'

Более подробное описание зависимостей ищите на странице Быстрый старт.

Описание FeatureConfiguration.systrace()

За настройку профилирования отвечает SysTraceConfiguration:

ПараметрТипОписание
autoStartBool?Определяет, должен ли мониторинг использования диска запускаться автоматически. По умолчанию true.
durationTimeInterval?Определяет длительность профилирования. По умолчанию 10.

Описание FeatureObject.systrace()

FeatureObject используется для привязки конфигурации к отслеживаемым объектам и сценариям. В случае systrace определяется дополнительным параметром:

ПараметрТипОписание
scenariosSysTraceScenario?Определение сценария для секционного профайлера (алиас к строке)

Для инициализации профайлера:

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: diskUsageConfiguration)] let tracerService = TracerFactory.tracerService(token: "Ваш appToken", features: features, items: items) tracerService.start()

Профилирование и разметка секций

Методы, позоляющие управлять профилированием, определены в расширении TracerServiceProtocol и доступны в вашем tracerService при корректном подключении фичи.

beginSysTrace

Метод начинает системную трассировку для указанного сценария и секции кода.

ПараметрТипОписание
scenarioSysTraceScenarioСценарий системной трассировки.
sectionStringНазвание секции, для которой начинается трассировка.
functionStaticStringИмя функции (по умолчанию текущая функция).
lineIntНомер строки (по умолчанию текущая строка).

endSysTrace

Метод завершает системную трассировку для указанного сценария и секции кода.

ПараметрТипОписание
scenarioSysTraceScenarioСценарий системной трассировки.
sectionStringНазвание секции, для которой завершается трассировка.
functionStaticStringИмя функции (по умолчанию текущая функция).
lineIntНомер строки (по умолчанию текущая строка).

beginSysTraceObjC

Метод начинает системную трассировку для указанного сценария и секции кода (для Objective-C).

ПараметрТипОписание
scenarioSysTraceScenarioСценарий системной трассировки.
sectionStringНазвание секции, для которой начинается трассировка.
functionStringИмя функции (по умолчанию текущая функция).
lineIntНомер строки (по умолчанию текущая строка).

endSysTraceObjC

Метод завершает системную трассировку для указанного сценария и секции кода (для Objective-C).

ПараметрТипОписание
scenarioSysTraceScenarioСценарий системной трассировки.
sectionStringНазвание секции, для которой завершается трассировка.
functionStringИмя функции (по умолчанию текущая функция).
lineIntНомер строки (по умолчанию текущая строка).

startSysTrace

Метод запускает системную трассировку с необязательной конфигурацией.

ПараметрТипОписание
scenarioSysTraceScenarioСценарий системной трассировки.
configurationSysTraceConfiguration?Опциональная конфигурация для трассировки.

stopSysTrace

Метод завершает системную трассировку для указанного сценария.

ПараметрТипОписание
scenarioSysTraceScenarioСценарий системной трассировки.

Пример использования:

Отправка события

// инициализация профайлера tracerService.beginSysTrace(scenario: "launch", section: "\(ViewController.self)") ... tracerService.endSysTrace(scenario: "launch", section: "\(ViewController.self)")