Android AR App с Unity имеют потрясающие представления - PullRequest
0 голосов
/ 16 января 2020

Мы разрабатываем приложение AR, используя Unity с Ar-foundation, для устройств Android. Наше приложение использует основы дополненной реальности и выполняет вывод нейронной сети, используя tflite 1.14 внутри пакета .aar.

Мой код выглядит следующим образом:

void Update() {

    if (!Thread1.IsAlive  && !Thread2.IsAlive) 
    {
        ProcessTaskResultsIfAvailables();
        Thread1 = new Thread(FunctionToPerform);    
        Thread2 = new Thread(FunctionToPerform);
        Thread1.Start();
        Thread2.Start();
    }
}
void FunctionToPerform() 
{
   //use of Android JNI.
   var result = myJavaObject.Call<AndroidJavaObject>("tfliteTaskThatTakesALotOfTime");
}

Когда пара выводов закончена, два новый поток создается для двух новых задач, и т. д. c ...

Однако это довольно медленно, две задачи всегда выполняются в двух параллельных потоках. Вывод занимает 5 секунд, хотя в собственном приложении android java это займет в среднем 600 мс. Телефон холодный, поэтому мы не думаем, что он связан с перегревом телефона.

При профилировании приложения мы видим пары потоков tflite. зеленый график - использование ЦП приложением, синий - общее использование ЦП системой: profiling of the app

Однако при приостановке приложения (перейдя в диспетчер задач android или вернувшись к например, в главном меню) и возобновляя его, приложение неожиданно набирает производительность: enter image description here

Мы можем видеть лучшее использование процессора, поток намного короче, как минимум, до 800 мс до медленно движется в среднем до 1300 мс через несколько минут. Эти показатели в 4 раза лучше.

Это доказывает, что приложение не вызывало восторга до паузы,

Я попытался автоматически запустить Android Activity поверх него, но, как ни странно, оно только уменьшило время вывода до 2500 мс.

Мы сожалеем о том, что просим пользователя сделать паузу и перезапустить приложение при его запуске, и хотели бы найти способ обеспечить наилучшую доступную производительность во время запуска, не останавливая его.

Есть ли способ сделать это? Спасибо за потраченное время.

Характеристики: Unity версия: 2019.2.8f1 Android SDK 28. (P ie 9.0) На Samsung galaxy S9. Tflite 1.14 Arfoundation 2.1.4 Использование фонового моно-скриптинга

...