Мне было интересно, какие у людей подходы или мысли были относительно автоматизации тестирования производительности в XNA. В настоящее время я смотрю только на работу в 2d, но это создает много областей, где производительность может быть улучшена с помощью различных реализаций.
Примером может быть, если бы у вас было 2 разных реализации пространственного разбиения, одно может быть быстрее другого, но без проведения какого-либо реального тестирования производительности вы не сможете точно сказать, какое из них (если вы не видели, что код был явно медленным в некоторых случаях). части). Вы могли бы написать модульный тест, который для данного периода времени продолжал добавлять / обновлять / удалять сущности для обеих реализаций и видеть, сколько было выполнено в каждом таймфрейме, и чем выше, тем будет быстрее (в данном примере).
Другим примером более высокого уровня может быть, если вы хотите увидеть, сколько объектов вы можете иметь на экране примерно, не превышая 60fps. Проблема с этим автоматизировать его вам нужно будет использовать скрытую форму трюк или другую вещь , чтобы пнуть в макет игры и чисто тест , какие части вы заботитесь о и отключить все остальное.
Я знаю, что на самом деле это не простой процесс, поскольку даже если вы можете автоматизировать тесты, на самом деле это зависит от человека, чтобы интерпретировать, если результаты достаточно эффективны, но как часть шага сборки вы могли бы запустить эти тесты и опубликовать результаты где-то для сравнения.
Таким образом, если вы переходите с версии 1.1 на 1.2, но изменили несколько базовых алгоритмов, вы можете заметить, что в целом показатель производительности повысился бы, то есть вы улучшили общую производительность приложения, а затем с 1.2 до 1.3 вы можете заметить что вы немного снизили общую производительность.
Кто-нибудь автоматизировал подобные вещи в своих проектах, и если да, то как вы оцениваете свои сравнения производительности на высоком уровне и какие платформы вы используете для тестирования? Если вы написали свой код так, чтобы его можно было тестировать / макетировать для большинства частей, вы можете просто использовать свои тесты в качестве механизма для получения некоторых результатов производительности ...
=== Редактировать ===
Просто для ясности, меня больше интересует, как лучше использовать автоматизированные тесты в XNA для отслеживания вашей производительности, а не играть в тестирование или догадки, вручную запустив вашу игру на компьютере. Это совершенно не похоже на то, играется ли ваша игра на оборудовании X, это скорее отслеживание изменений производительности при изменении игрового движка / фреймворка.
Как упомянуто в одном из комментариев, вы можете легко проверить, «сколько узлов я могу вставить / удалить / обновить в QuadTreeA в течение 2 секунд», но вы должны каждый раз физически просматривать эти результаты, чтобы увидеть, изменились ли они, что может быть хорошо и все же лучше, чем просто полагаться на игру, чтобы увидеть, заметили ли вы разницу между версиями. Однако, если вы добавите Assert, чтобы уведомить вас о сбое, если оно будет ниже, чем, скажем, 5000 за 2 секунды, у вас будет хрупкий тест, так как он затем контекстуален для оборудования, а не только для реализации. Хотя, как говорится, такого рода автоматизированные тесты действительно полезны только в том случае, если вы выполняете свои тесты как своего рода конвейер сборки, то есть:
Оформить заказ -> Выполнить модульные тесты -> Выполнить интеграционные тесты -> Выполнить тесты производительности -> Пакет
Таким образом, вы можете легко сравнить статистику от одной сборки до другой на сервере CI как отчет какого-то рода, и опять же, это может ни для кого не иметь большого значения, если вы не привыкли к непрерывной интеграции. Основная суть этого вопроса заключается в том, чтобы увидеть, как люди справляются с этим между сборками и как им лучше всего сообщать. Как я уже сказал, это может быть субъективно, но поскольку знания будут получены из ответов, это кажется стоящим вопросом.