Repository navigation
Underground 2 v0.14.7 — rendimiento
Mejora de FPS a partir de un perfil de CPU real en carrera (simpleperf en un Redmi Note 8). En la misma carrera y con la misma carga de dibujo, el Redmi pasó de 20 a 28 FPS (~25.000 llamadas gráficas por frame) y de 28 a 34–36 FPS (~19.000 llamadas), sin cortes de audio.
Qué se encontró
- El hilo que dibuja el juego pasaba el 56 % del tiempo parado, esperando a recuperar la CPU emulada que comparte con los hilos de audio y carga del juego. Cedía su turno cada 0,5 ms (unas 100 veces por frame) y cada traspaso costaba más que el trabajo de los otros hilos.
- Además, el plazo del turno era compartido: el hilo que recibía la CPU heredaba un plazo ya vencido y la devolvía casi sin trabajar.
- El hilo de audio gastaba un tercio de su tiempo en sobrecarga del runtime: por cada una de sus ~100 subllamadas por mezcla guardaba y restauraba todo el estado de la CPU y reservaba memoria.
Cambios
- El hilo de dibujo usa turnos de 3 ms y cede una vez por frame; cada turno se cuenta desde que el hilo recibe la CPU. La espera bajó del 56 % a cerca del 18 % del frame.
- Las subllamadas del mezclador de audio generado por el juego son llamadas directas, como en x86, sin guardar el estado completo ni reservar memoria.
- Puente Direct3D 9: lee los argumentos directamente de la pila del juego, recuerda el último objeto usado en lugar de buscarlo en cada una de las ~40.000 llamadas por frame, y la librería enlaza sus símbolos internos sin pasar por la PLT.
- El registro indica cada 120 frames qué métodos Direct3D 9 cuestan más y cuántas veces cede la CPU el hilo de dibujo, para diagnosticar los informes de rendimiento.
Pruebas y alcance
Las dos arquitecturas compilan. La APK ARM64 se probó en carrera en el Redmi Note 8 (Snapdragon 665): FPS medidos en los registros del juego antes y después, y salud de audio sin interrupciones (xruns=0). Las comparaciones son con carga similar, no con una repetición idéntica de la carrera.
No se probó en los Dimensity 9300/8500 ni en otros teléfonos de gama alta de los reportes; el problema corregido (traspasos entre hilos) también afectaba a esos equipos, pero la mejora concreta allí no está medida. Queda como siguiente objetivo el código de efectos D3DX del juego, que sigue siendo ~25 % del tiempo de CPU del hilo de dibujo. La APK de 32 bits no se probó en un dispositivo para esta versión.
Dos APK: arm64 (64 bits) y armeabi-v7a (32 bits). Android 10+, Vulkan 1.1+, datos de tu copia de PC en nfsu2. Ambas conservan la firma anterior y se instalan como actualización. Se adjuntan sumas SHA-256.