Je me demandais quelles étaient les approches ou les opinions des gens sur l'automatisation des tests de performances dans XNA. Actuellement, je ne travaille que dans 2d, mais cela pose de nombreux domaines où les performances peuvent être améliorées avec différentes implémentations.
Un exemple serait si vous aviez 2 implémentations différentes de partitionnement spatial, l'une peut être plus rapide que l'autre mais sans faire de test de performance réel, vous ne pourriez pas dire laquelle avec certitude (sauf si vous avez vu que le code était manifestement lent dans certains les pièces). Vous pouvez écrire un test unitaire qui, pendant un laps de temps donné, a continué à ajouter / mettre à jour / supprimer des entités pour les deux implémentations et à voir combien ont été effectuées dans chaque période et la plus élevée serait la plus rapide (dans cet exemple donné).
Un autre exemple de niveau supérieur serait si vous vouliez voir combien d'entités vous pouvez avoir à l'écran à peu près sans descendre en dessous de 60fps. Le problème avec cela est que pour l'automatiser, vous devrez utiliser l'astuce de forme cachée ou une autre chose pour lancer un jeu simulé et tester uniquement les parties qui vous intéressent et désactiver tout le reste.
Je sais que ce n'est pas une affaire simple, car même si vous pouvez automatiser les tests, il appartient vraiment à un humain d'interpréter si les résultats sont suffisamment performants, mais dans le cadre d'une étape de construction, vous pouvez le faire exécuter ces tests et publier les résultats quelque part pour comparaison.
De cette façon, si vous passez de la version 1.1 à 1.2 mais que vous avez modifié quelques algorithmes sous-jacents, vous remarquerez peut-être qu'en général, le score de performance aurait augmenté, ce qui signifie que vous avez amélioré vos performances globales de l'application, puis de 1.2 à 1.3, vous remarquerez peut-être que vous avez ensuite un peu baissé les performances globales.
Est-ce que quelqu'un a automatisé ce genre de chose dans ses projets, et si oui, comment mesurez-vous vos comparaisons de performances à un niveau élevé et quels cadres utilisez-vous pour tester? En fournissant que vous avez écrit votre code afin qu'il soit testable / mockable pour la plupart des parties, vous pouvez simplement utiliser vos tests comme mécanisme pour obtenir des résultats de performance ...
=== Modifier ===
Pour plus de clarté, je suis plus intéressé par la meilleure façon d'utiliser des tests automatisés au sein de XNA pour suivre vos performances, pas de jouer à des tests ou de deviner en exécutant manuellement votre jeu sur une machine. Cela est complètement différent de voir si votre jeu est jouable sur du matériel X, il s'agit davantage de suivre le changement de performances à mesure que votre moteur de jeu / framework change.
Comme mentionné dans l'un des commentaires, vous pouvez facilement tester "combien de nœuds puis-je insérer / supprimer / mettre à jour dans QuadTreeA en 2 secondes", mais vous devez regarder physiquement ces résultats à chaque fois pour voir s'il a changé, ce qui peut être très bien et c'est toujours mieux que de simplement compter sur le jouer pour voir si vous remarquez une différence entre les versions. Cependant, si vous deviez mettre un Assert pour vous informer d'un échec s'il est inférieur à 5000 disons en 2 secondes, vous avez un test fragile car il est alors contextuel au matériel, pas seulement à l'implémentation. Bien que cela étant dit, ce type de tests automatisés n'est vraiment utile que si vous exécutez vos tests comme une sorte de pipeline de construction, c'est-à-dire:
Paiement -> Exécuter les tests unitaires -> Exécuter les tests d'intégration -> Exécuter les tests de performances -> Package
Ainsi, vous pouvez facilement comparer les statistiques d'une génération à une autre sur le serveur CI sous la forme d'un rapport quelconque, et encore une fois, cela peut ne pas signifier grand-chose pour personne si vous n'êtes pas habitué à l'intégration continue. Le nœud principal de cette question est de voir comment les gens gèrent cela entre les builds et comment ils trouvent le meilleur rapport. Comme je l'ai dit, cela peut être subjectif, mais comme les connaissances seront acquises à partir des réponses, cela semble une question valable.