Mi chiedevo quali fossero gli approcci o i pensieri delle persone sull'automazione dei test delle prestazioni in XNA. Attualmente sto cercando di lavorare solo in 2d, ma ciò pone molte aree in cui le prestazioni possono essere migliorate con diverse implementazioni.
Un esempio potrebbe essere se tu avessi 2 diverse implementazioni di partizionamento spaziale, una potrebbe essere più veloce di un'altra ma senza fare qualche vero test delle prestazioni non saresti in grado di dire quale di sicuro (a meno che tu non abbia visto il codice era palesemente lento in alcuni parti). È possibile scrivere un test unitario che per un determinato periodo di tempo ha continuato ad aggiungere / aggiornare / rimuovere entità per entrambe le implementazioni e vedere quante ne sono state realizzate in ciascun intervallo di tempo e quello superiore sarebbe il più veloce (in questo esempio).
Un altro esempio di livello superiore sarebbe se volessi vedere quante entità puoi avere sullo schermo all'incirca senza andare sotto i 60 fps. Il problema è che per automatizzarlo dovresti usare il trucco della forma nascosta o qualche altra cosa per dare il via a un gioco simulato e testare semplicemente quali parti ti interessano e disabilitare tutto il resto.
So che questa non è una faccenda semplice, anche se puoi automatizzare i test, dipende davvero da un essere umano interpretare se i risultati sono abbastanza performanti, ma come parte di una fase di costruzione potresti farli eseguire questi test e pubblicare i risultati da qualche parte per il confronto.
In questo modo se passi dalla versione 1.1 alla 1.2 ma hai modificato alcuni algoritmi sottostanti potresti notare che in generale il punteggio delle prestazioni sarebbe aumentato, il che significa che hai migliorato le prestazioni complessive dell'applicazione, e quindi dalla 1.2 alla 1.3 potresti notare che hai quindi ridotto un po 'le prestazioni complessive.
Qualcuno ha quindi automatizzato questo genere di cose nei propri progetti e, in caso affermativo, come si misurano i confronti delle prestazioni ad alto livello e quali framework vengono utilizzati per testare? Dato che hai scritto il tuo codice in modo che sia testabile / deridibile per la maggior parte delle parti, puoi semplicemente usare i tuoi test come meccanismo per ottenere alcuni risultati prestazionali ...
=== Modifica ===
Solo per chiarezza, sono più interessato al modo migliore di utilizzare i test automatici all'interno di XNA per tenere traccia delle tue prestazioni, non giocare a test o indovinare eseguendo manualmente il gioco su una macchina. Questo è completamente diverso dal vedere se il tuo gioco è giocabile su hardware X, si tratta più di tenere traccia del cambiamento delle prestazioni man mano che il tuo motore di gioco / quadro cambia.
Come menzionato in uno dei commenti, è possibile testare facilmente "quanti nodi posso inserire / rimuovere / aggiornare in QuadTreeA entro 2 secondi", ma è necessario esaminare fisicamente questi risultati ogni volta per vedere se è cambiato, il che potrebbe essere bene ed è ancora meglio che fare affidamento sul giocare per vedere se noti qualche differenza tra la versione. Tuttavia, se dovessi inserire un Assert per avvisarti di un errore se scende al di sotto di quanto diciamo 5000 in 2 secondi hai un test fragile poiché è quindi contestuale all'hardware, non solo all'implementazione. Detto questo, questo tipo di test automatizzati è davvero utile solo se si eseguono i test come una sorta di pipeline di build, ovvero:
Acquista -> Esegui test unità -> Esegui test di integrazione -> Esegui test delle prestazioni -> Pacchetto
Quindi puoi facilmente confrontare le statistiche da una build all'altra sul server CI come un rapporto di qualche tipo, e di nuovo questo potrebbe non significare molto per nessuno se non sei abituato all'integrazione continua. Il nocciolo principale di questa domanda è vedere come le persone gestiscono questo tra build e come trovano meglio riferire. Come ho detto, può essere soggettivo, ma poiché la conoscenza verrà acquisita dalle risposte, sembra una domanda utile.