Me preguntaba qué enfoques o ideas tenían las personas sobre la automatización de las pruebas de rendimiento en XNA. Actualmente solo estoy buscando trabajar en 2d, pero eso plantea muchas áreas donde el rendimiento puede mejorarse con diferentes implementaciones.
Un ejemplo sería si tuviera 2 implementaciones diferentes de particionamiento espacial, una puede ser más rápida que otra, pero sin hacer algunas pruebas de rendimiento reales, no podría saber cuál es seguro (a menos que haya visto que el código era descaradamente lento en ciertos casos). partes). Podría escribir una prueba unitaria que, durante un período de tiempo determinado, siguiera agregando / actualizando / eliminando entidades para ambas implementaciones y ver cuántas se hicieron en cada período de tiempo y la más alta sería la más rápida (en este ejemplo dado).
Otro ejemplo de nivel superior sería si quisiera ver cuántas entidades puede tener en la pantalla aproximadamente sin pasar de 60 fps. El problema con esto es automatizarlo, necesitaría usar el truco de forma oculta o alguna otra cosa para comenzar un juego simulado y probar puramente qué partes le importan y desactivar todo lo demás.
Sé que esto no es un asunto simple, ya que incluso si puede automatizar las pruebas, realmente depende de un humano interpretar si los resultados son lo suficientemente efectivos, pero como parte de un paso de compilación, puede hacer que ejecute estas pruebas y publique Los resultados en algún lugar para la comparación.
De esta manera, si pasa de la versión 1.1 a la 1.2 pero ha cambiado algunos algoritmos subyacentes, puede notar que, en general, la puntuación de rendimiento habría aumentado, lo que significa que ha mejorado el rendimiento general de la aplicación, y luego de 1.2 a 1.3 puede notar que luego bajó un poco el rendimiento general
Entonces, ¿alguien ha automatizado este tipo de cosas en sus proyectos, y si es así, cómo mide sus comparaciones de rendimiento a un alto nivel y qué marcos utiliza para probar? Como siempre que haya escrito su código para que sea comprobable / imitable para la mayoría de las partes, puede usar sus pruebas como un mecanismo para obtener algunos resultados de rendimiento ...
=== Editar ===
Solo por claridad, estoy más interesado en la mejor manera de hacer uso de pruebas automatizadas dentro de XNA para rastrear su rendimiento, no para probar o adivinar ejecutando manualmente su juego en una máquina. Esto es completamente diferente a ver si su juego se puede jugar en hardware X, se trata más de rastrear el cambio en el rendimiento a medida que cambia el motor / marco del juego.
Como se menciona en uno de los comentarios, podría probar fácilmente "cuántos nodos puedo insertar / eliminar / actualizar dentro de QuadTreeA en 2 segundos", pero debe ver estos resultados físicamente cada vez para ver si ha cambiado, lo que puede ser bien y aún es mejor que solo confiar en jugarlo para ver si notas alguna diferencia entre las versiones. Sin embargo, si tuviera que colocar un Assert para notificarle de un error si es inferior a, digamos 5000 en 2 segundos, tiene una prueba frágil, ya que es contextual al hardware, no solo a la implementación. Aunque dicho esto, este tipo de pruebas automatizadas solo son realmente útiles si está ejecutando sus pruebas como algún tipo de tubería de compilación, es decir:
Pago -> Ejecutar pruebas de unidad -> Ejecutar pruebas de integración -> Ejecutar pruebas de rendimiento -> Paquete
Entonces, puede comparar fácilmente las estadísticas de una compilación a otra en el servidor CI como un informe de algún tipo, y nuevamente esto puede no significar mucho para nadie si no está acostumbrado a la Integración continua. El quid principal de esta pregunta es ver cómo las personas manejan esto entre las compilaciones y cómo les resulta mejor informar. Como dije, puede ser subjetivo, pero como el conocimiento se obtendrá de las respuestas, parece una pregunta que vale la pena.