SystraceProfiler
– это инструмент профилирования, который позволяет измерять время выполнения конкретных участков кода, называемых «секциями». Путем измерения времени выполнения каждой секции вы можете выявить факторы, которые вызывают задержки в работе вашего приложения.
Использование секционного профайлера особенно полезно в крупных приложениях с распределенной системой из множества компонентов и сервисов. Профайлер позволяет быстрее идентифицировать проблемные участки кода и сосредоточиться на их улучшении для повышения общей производительности приложения. Применять его можно и при внесении изменений в проект, чтобы оценить, какое влияние оказали эти изменения.
SystraceProfiler
инициализируется при запуске приложения, но для начала профилирования требуется явная разметка начала и конца секции анализа – время выполнения будет считаться между этими точками. Такой подход позволяет оценить скорость выполнения вплоть до конкретных методов и запросов.
Собранные данные профилирования находятся в разделе «Секционный профайлер». Здесь отображены данные о версии приложения, устройстве, ОС, теге, с которым было выполнено профилирование, и длительности его выполнения:
Количество отчётов ограничено – не более 500 штук в день. Все они автоматически сгруппированы по версии приложения и тэгу. Просмотреть результаты профилирования можно прямо в браузере по клику на интересующий отчет. Для каждого метода высчитано время выполнения, количество вхождений конкретного метода в секцию профилирования и прочие метрики:
Таким образом, секционный профайлер – мощный инструмент для анализа производительности кода, который помогает выявлять узкие места и проблемные участки, требующие оптимизации. В результате это ведет к повышению не только эффективности работы приложения, но и общего качества пользовательского опыта.
Перед началом использования инструмента в вашем проекте, необходимо подключить зависимости:
Для cocoapods Podfile
source 'https://github.com/odnoklassniki/tracer-ios.git' pod 'OKTracer'
Более подробное описание зависимостей ищите на странице Быстрый старт.
За настройку профилирования отвечает 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: diskUsageConfiguration)] 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)")