Как проверить производительность пользовательского представления

Aug 19 2020

Я хочу протестировать производительность рендеринга пользовательского интерфейса пользовательского компонента. Я использовал следующий тестовый пример, чтобы проверить производительность рендеринга.

private long getLayoutTime(int layoutRes) {
        final Context targetContext = getInstrumentation().getTargetContext();
        final LayoutInflater layoutInflater = LayoutInflater.from(targetContext);

        final long startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            final View view = layoutInflater.inflate(layoutRes, null);
            view.setLayoutParams(new ViewGroup.LayoutParams(0, 0));

            view.measure(View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            final int measuredHeight = view.getMeasuredHeight();
            final int measuredWidth = view.getMeasuredWidth();

            view.layout(0, 0, measuredWidth, measuredHeight);
        }
        return System.currentTimeMillis() - startTime;
    }

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

Мое изображение Profiler.

Ответы

1 EsjayIT Aug 27 2020 at 16:55

вы можете легко измерить производительность с помощью встроенного профилировщика инструментов студии Android (в нижней левой панели). важно: производительность просмотра клиентов зависит от работающего устройства вот образец, который я тестировал для Redmi 7a

устройство: redmi 7a Оперативная память: 2 ГБ

 private fun startTest() {
    for (x in 0..10000) {
        val textview = TextView(this)?.apply { text = "Dummy Text $x" }
        mLinearLayout?.addView(textview)
    }
}
  1. запустить проект
  2. запускаем профайлер, ждем пока график станет нормальным
  3. на кнопке Нажмите startTest (), вы увидите, что график стал нормальным до высокого
  4. выберите область, которая покрывает верхнюю область графика, и посмотрите время начала и время окончания
  5. используйте простой калькулятор и измерьте разницу

результат моего тестового примера: добавление textview 10000 раз в linearlayout занимает 32,411 с (информация об устройстве указана выше)