Fiquei me perguntando o que as pessoas abordam ou pensam sobre como automatizar o teste de desempenho no XNA. Atualmente, estou olhando apenas para trabalhar em 2D, mas isso representa muitas áreas em que o desempenho pode ser aprimorado com diferentes implementações.
Um exemplo seria se você tivesse duas implementações diferentes de particionamento espacial, uma pode ser mais rápida que a outra, mas sem fazer alguns testes de desempenho reais, você não seria capaz de dizer qual deles com certeza (a menos que visse que o código estava descaradamente lento em certos peças). Você pode escrever um teste de unidade que, por um determinado período, continue adicionando / atualizando / removendo entidades para ambas as implementações e veja quantas foram feitas em cada período de tempo e quanto maior, mais rápido será o mais rápido (neste exemplo).
Outro exemplo de nível superior seria se você quisesse ver quantas entidades você pode ter na tela aproximadamente sem ficar abaixo de 60fps. O problema disso é que, para automatizá-lo, você precisará usar o truque de forma oculta ou alguma outra coisa para iniciar um jogo falso e testar puramente quais partes são importantes e desativar todo o resto.
Sei que esse não é um caso simples, realmente, mesmo que você possa automatizar os testes; realmente depende de um ser humano interpretar se os resultados têm desempenho suficiente, mas, como parte de uma etapa de construção, você pode executar esses testes e publicar os resultados em algum lugar para comparação.
Dessa forma, se você for da versão 1.1 para 1.2, mas alterou alguns algoritmos subjacentes, poderá perceber que geralmente a pontuação de desempenho teria aumentado, o que significa que você melhorou o desempenho geral do aplicativo e, em seguida, de 1.2 para 1.3, pode perceber que você diminuiu um pouco o desempenho geral.
Então, alguém automatizou esse tipo de coisa em seus projetos? Em caso afirmativo, como você mede suas comparações de desempenho em alto nível e quais estruturas você usa para testar? Ao fornecer o código que você escreveu para que seja testável / ridicularizado na maioria das partes, você pode apenas usar seus testes como um mecanismo para obter alguns resultados de desempenho ...
=== Editar ===
Apenas para maior clareza, estou mais interessado na melhor maneira de usar testes automatizados no XNA para rastrear seu desempenho, não para testar ou adivinhar executando manualmente o jogo em uma máquina. Isso é completamente diferente de ver se o seu jogo pode ser jogado no hardware X, é mais sobre acompanhar a mudança no desempenho à medida que o mecanismo / estrutura do jogo muda.
Conforme mencionado em um dos comentários, você pode testar facilmente "quantos nós posso inserir / remover / atualizar dentro do QuadTreeA em 2 segundos", mas você deve examinar fisicamente esses resultados sempre para ver se foram alterados, o que pode ser bem e ainda é melhor do que apenas jogar, para ver se você percebe alguma diferença entre as versões. No entanto, se você colocar uma declaração para notificá-lo de uma falha, se ela for menor do que, digamos, 5000 em 2 segundos, você terá um teste quebradiço, pois é contextual ao hardware, não apenas à implementação. Embora isso seja dito, esse tipo de teste automatizado é realmente útil se você estiver executando seus testes como algum tipo de pipeline de criação, ou seja:
Caixa -> Executar testes de unidade -> Executar testes de integração -> Executar testes de desempenho -> Pacote
Portanto, você pode comparar facilmente as estatísticas de uma construção para outra no servidor de IC como um relatório de algum tipo e, novamente, isso pode não significar muito para ninguém, se você não estiver acostumado à Integração Contínua. O principal ponto crucial dessa questão é ver como as pessoas gerenciam isso entre compilações e como elas acham melhor informar sobre elas. Como eu disse, pode ser subjetivo, mas como o conhecimento será obtido com as respostas, parece uma pergunta que vale a pena.