Комментарии 9
Скорость работы приложений важна.
Донесите эту мысль до команды Yandex Go, пожалуйста. 4 секунды смотреть на загрузочный экран - так себе удовольствие.
Почему macrobemchmark не рассматриваете? Он для этих кейсов подходит идеально же.
Не пробовали такое решение.
Это, я так понимаю, в качестве альтернативы Timeline.
Мы используем Timeline и в проде, чтобы пользователи, у кого есть доступ к меню разработчика, могли делиться таймлайнами с внутренней информацией о запросах и т.п.
Для прода Macrobenchmark не особо подходит.
Но для своих кейсов - норм.
Да, если вы хотите смотреть прям в проде не вариант, но вроде firebase performance что-то такое может собирать, но сам не щупал, точно не скажу.
Macrobemchmark позволяет локально на физ устройстве прогонять тесты по нужным кейсам, смотреть время старта, медленные кадры и прочее - что Android vitals отслеживает.
Расскажите подробнее про то, как отслеживаете количество инстансов созданных даггером и время на их создание.
Используется аспектно-ориентированное программировние. Статья1 и статья2.
И такой код для того, чтобы замерить время выполнения создания инстанса через Dagger2.
@Aspect
public final class InjectedConstructorAspect extends AspectJExtension {
@Pointcut("call(@javax.inject.Inject *.new(..))")
public void injectConstructor() {
// Выбираем вызовы конструкторов с аннотацией @Inject
}
@SuppressWarnings("UnknownNullness")
@Around("injectConstructor()")
public Object proceedAndMeasure(@NonNull final ProceedingJoinPoint joinPoint) throws Throwable {
final long start = currentMillis();
final Object result = joinPoint.proceed();
final long stop = currentMillis();
DiagnosticEventDispatcher.injectedConstructorExecutedEvent(
start, stop,
result.getClass()
);
return result;
}
}Также есть экстеншены для того, чтобы замерять время создания объектов, которые не создаются через Dagger2:
Activity
Fragment
Presenter (Если создаётся через аннотацию Moxy
@ProvidePresenter)
Тулза работает только у разработчика, то есть в проде нет ни следа от неё. Включается только через специальный тип сборки, так как развешивать и выполнять join'ы - не бесплатно.
Ну и есть экран, в котором отображаются результаты, полученные в DiagnosticEventDispatcher
Отображается время создания инстанса (в персентиле) и количество созданных объектов конкретного класса.
Где и как можно ускорить приложение на Android