Автоматизируем процесс замера производительности в играх
реклама
Оглавление
- Вступление
- AutoHotkey
- Тестовый стенд
- Программное обеспечение
- Методика тестирования
- Автоматизация процесса и рассмотрение погрешности измерений
- Arcania: Gothic 4
- Battlefield Bad Company 2
- Borderlands
- Call of Duty: Black Ops
- Dragon Age Origins
- Medal of Honor (2010)
- Metro 2033
- S.T.A.L.K.E.R.: Call of Pripyat
- Заключение
Вступление
Проблема тестирования производительности в играх не нова. Встроенные бенчмарки присутствуют не во всех играх, а среди тех немногих продуктов, где они есть – существуют те, которые, в общем-то, малопригодны, поскольку не отражают реальной картины происходящего и мало сопоставимы с непосредственно игровым процессом.
В таком случае для авторов статей остаётся два варианта:
- Тестировать железо в редко-обновляемом и небольшом тестовом пакете, состоящем либо только из игр, в которых присутствует возможность легко и без лишних усилий получить результаты, либо с минимумом ручных тестов.
- Тестировать вручную, при помощи таких утилит, как Fraps. Тут уже требуется сноровка и концентрация, вдобавок затрачивается немалое количество времени.
Казалось бы, что тут ещё думать, остаётся только принимать ситуацию такой, какая она есть. Но как там говорил Эйнштейн? "Все с детства знают, что то-то и то-то невозможно. Но всегда находится невежда, который этого не знает. Он-то и делает открытие".
реклама
Тема данного материала - попытка избавиться от человеческого фактора при исследовании производительности в играх с помощью скриптового языка программирования AutoHotkey. А еще - шаг в сторону унификации методики тестирования, с возможностью перепроверки результатов читателями. Ну и, разумеется, непосредственно автоматизация процесса тестирования.
Перед тем, как приступить к разбору конкретно взятых игр – пара слов об AutoHotkey.
AutoHotkey
Официальный сайт, где можно скачать программу. А вот документация на русском языке.AutoHotkey - это свободная утилита под Windows с открытыми исходными кодами. Популярна среди любителей онлайн-шутеров, часто используется ими в качестве инструмента для создания макросов.
Сприпты под AutoHotkey пишутся в виде текстовых файлов с последовательностью команд, итоговый файл сохраняется с расширением .ahk, выполняется при открытии. Научить за пять минут я никого не смогу, кому интересно – все ссылки даны выше.
Суть автоматизации процесса тестирования сведена к программированию и к выполнению последовательности команд. Последняя включает в себя запуск игры, загрузку сохранения, несколько проходов тестовой сцены, а после – выход из игры. При правильно написанных скриптах остается только собирать итоговые цифры.
Для тех, кто не желает знакомиться с документацией, постараюсь максимально подробно комментировать получившийся код по каждой игре.
Тестовый стенд
реклама
Тестирование производилось на следующей конфигурации:
- Материнская плата: MSI P55-GD65, bios 1.9;
- Процессор: Intel Core i5-760 @ 3,5 ГГц (166,6x21);
- Система охлаждения: Zalman CNPS10X Performa (120*120*25, ~1200 об/мин);
- Термоинтерфейс: Xilence Silver Tim;
- Оперативная память: Corsair CMX4GX3M2A1600C7 2*2 Гбайт DDR3-1600 (7-8-7-20, 1,65 В) @ 1666 МГц 7-8-7-20-1Т;
- Видеокарта: NVIDIA GeForce GTX 295 1792 Мбайт 576/1242/1000 МГц;
- Жесткий диск: Western Digital Caviar Blue (WD500AAKS), 500 Гбайт;
- Блок питания: Corsair CMPSU-750HX (750 Вт);
- Корпус: Открытый тестовый стенд.
Программное обеспечение
- Операционная система: Windows 7 Ultimate, build 7600.16385 RTM, x64;
- Драйвер видеокарты: nVidia ForceWare 260.99 WHQL;
- Дополнительное ПО: AutoHotkey 1.0.48.05; FRAPS 3.2.3, build 11797.
Методика тестирования
В играх, используемых в качестве тестовых приложений, выставлялось разрешение 1920х1080. Соответственно, присутствует оптимизация только под него, хотя в большинстве игр полученные скрипты должны работать и при других разрешениях. Настройки графики в играх не менялись, оставшись теми же, что и в недавнем материале по сравнению производительности процессоров.
Для анализа повторяемости результатов во всех играх проводились по три замера производительности. Каждый из них состоял из четырех запусков одной и той же сцены. Между замерами тестовой стенд перезагружался.
Автоматизированные измерения осуществлялись с помощью утилиты Fraps, в них участвовали следующие игры:
- Arcania: Gothic 4 (1.0);
- Battlefield Bad Company 2 (1.0.1);
- Borderlands (1.2);
- Call of Duty: Black Ops (1.0);
- Dragon Age Origins (1.0.9353);
- Medal of Honor (2010) (1.0.75);
- Metro 2033 (1.0.0.1);
- S.T.A.L.K.E.R.: Call of Pripyat (1.6).
(В скобках указана версия .exe файла игры).
Все скрипты и необходимые сохранения для игр прикреплены общим архивом в конце статьи.
Автоматизация процесса и рассмотрение погрешности измерений
На самом деле статья начинается здесь. Теория была дана выше, настало время приступить к практике. Начну по алфавиту.
Arcania: Gothic 4
Для многих эта игра не оправдала надежд, но все же снискала популярность среди игроков. Требования к аппаратному обеспечению у игры большие, обеспечен высокий интерес к тестированию производительности в ней.
Особенности, которые следует учитывать:
- Игра позволяет загрузить уровень, не прибегая к использованию мыши, скрипт должен подойти к любому разрешению экрана. Это хорошо.
- Надо учесть, что время загрузки уровня – величина непостоянная. Выбор сцены в таком случае обусловлен отсутствием действий в игре сразу после загрузки уровня, а также возможностью начать замер только через несколько секунд после загрузки сохранения, без влияния на итоговый результат.
Последовательность действий:
Run, arcania.exe ;Запуск игры. Если .ahk файл скрипта не находится в одной папке с .exe файлом игры, то в этой строке необходимо указать полный путь к файлу. рекламаSleep 20000 ;Время паузы в миллисекундах. Лучше ставить с запасом. Может быть больше на слабых конфигурациях. i=0 ;Инициализация переменной, которая понадобится в дальнейшем. Loop 5 ;Команда, реализующая пятикратное повторение операций, заключённых в фигурные скобки. { Sleep 1000 ; Необязательная пауза, но пусть будет. Send {down down} ; К этому моменту в игре открывается главное меню. Зажатие стрелки вниз. Sleep 80 ; Пауза 80 миллисекунд. Стрелка вниз зажата. Send {down up} ; Отпускание стрелки вниз. Вообще, можно обойтись и простой командой формата Send {down}, указав в начале скрипта задержку на нажатие клавиш и время их зажатия. Но игра глючная, сработать может не всегда. Так надёжней. Sleep 500 ; Небольшая пауза. Send {Enter down} ; Далее, по аналогии с прошлой командой на 80 миллисекунд зажимается клавиша Enter, после чего совершается переход в меню загрузки сохранений. Sleep 80 Send {Enter up} Sleep 1000 ; Пауза после нажатия Enter’а. Она необходима, чтобы переход в меню загрузки сохранений осуществился до начала следующего действия. Send {down down} ; Переход на строку вниз, аккурат на кнопку «загрузка». Sleep 80 Send {down up} Sleep 500 Send {Enter down} ; Начинается загрузка сохранения. Sleep 80 Send {Enter up} Sleep 1000 if (i<>0) ; Переменная i была введена ранее. Здесь она используется в операторе условия, и если она не равна нулю, что характерно для второго и последующих запусков теста – произойдёт действие, заключённое в фигурные скобки. В данном случае – будет дополнительно нажат Enter, ибо между запусками тестовой сцены перехода в главное меню не будет и для загрузки сохранения из меню паузы потребуется подтверждение. { Send {Enter down} Sleep 80 Send {Enter up} } if (i==0) ; Ещё один оператор условия. Актуален для i=0. Так как фигурных скобок нет – оператор условия выполняется только для последующей строки, а в данном случае - вносит дополнительные 20 секунд паузы, необходимых для первой загрузки уровня. На слабых конфигурациях это число может быть выше. Sleep 20000 Sleep 9000 ; Пауза – время загрузки уровня. if (i>0) ; Оператор условия, который включает в себя всю тестовую сцену. Как можно заметить – проход тестовой сцены не осуществляется для первого запуска. Иначе это внесёт сильные погрешности в итоговый результат, ибо при первом запуске игра тормозит. { Send {F10} ; Горячая клавиша Fraps’а для снятия скриншота. Нужна, чтобы удостовериться в том, что замер производительности начнётся там, где надо. Если не сидеть перед монитором, а заняться на время тестирования своими делами и потом собирать результаты – эти скриншоты пригодятся. Sleep 500 Send {F11} ; Горячая клавиша Fraps’а для начала замера производительности. Отсюда и далее запрограммирована последовательность действий, приводящих персонажа игры к прохождению определённого маршрута. Sleep 2000 Send {d down} Sleep 6000 Send {d up} Sleep 1500 Send {w down} Sleep 10000 Send {w up} Sleep 2000 Send {s down} Sleep 5000 Send {space down} Sleep 100 Send {space up} Sleep 1500 Send {Rclick down} Sleep 500 Send {space down} Sleep 100 Send {space up} Send {Rclick up} Sleep 7000 Send {s up} Sleep 1000 Send {F11} ; Окончание замера производительности. Sleep 500 Send {F10} ;Ещё один скриншот, теперь по окончанию замера производительности. Цель та же, данный снимок позволит убедиться, что сцена пройдена именно по заданному маршруту. } ;Закрытие оператора условия, окончание тестовой сцены. Sleep 1000 Send {Esc down} ;Выход в меню паузы. Опять-таки через зажатие клавиши на временной промежуток, а не просто через нажатие. Для надёжности. Sleep 60 Send {Esc up} Sleep 1000 Send {down down} ;Переход на строчку вниз. Sleep 80 Send {down up} i++ ;Переменная счётчика цикла увеличивается на единицу. } ;Переход на следующую итерацию/окончание цикла. Переход в главное меню не осуществлён, ибо не нужен, поскольку необходимые далее для загрузки уровня действия из данной позиции курсора совпадают с оными из главного меню. За исключением дополнительного нажатия Enter’а, о котором было оговорено ранее. Sleep 500 ;Отсюда и далее выход в главное меню. Для этого осуществлён переход на три строки вниз и последующее нажатие Enter. Send {down down} Sleep 80 Send {down up} Sleep 500 Send {down down} Sleep 80 Send {down up} Sleep 500 Send {down down} Sleep 80 Send {down up} Sleep 500 Send {Enter down} Sleep 80 Send {Enter up} Sleep 500 Send {Enter down} ;Игра требует подтверждения, чтобы выйти в меню. Для этого необходимо нажать Enter ещё раз. Sleep 80 Send {Enter up} Sleep 4000 ;Пауза, к этому моменту переход в главное меню будет осуществлён. Send {down down} ;Отсюда и далее – пятикратное нажатие клавиши вниз, и последующее нажатие Enter – выход из игры. Sleep 80 Send {down up} Sleep 500 Send {down down} Sleep 80 Send {down up} Sleep 500 Send {down down} Sleep 80 Send {down up} Sleep 500 Send {down down} Sleep 80 Send {down up} Sleep 500 Send {down down} Sleep 80 Send {down up} Sleep 500 Send {Enter down} Sleep 80 Send {Enter up} ;Собственно на этом все, скрипт для Gothic 4 окончен.
|
Дополнительно - скриншоты начала и окончания замера производительности:
Итак, всё необходимое для замера производительности есть, теперь остаётся только получить результаты.
Настройки графики малоинтересны при данной тематике, но всё же:
- Разрешение экрана: 1920x1080;
- Быстродействие: Высоко;
- Качество теней: Высоко;
- Тени: Мир и геометрия;
- Динамичные тени: Мир и геометрия;
- Качество текстур: Средне;
- Качество SSAO: Высоко;
- Качество света: Высоко;
- Качество персонажей: Высоко;
- Качество мира: Высоко;
- Качество частиц: Высоко;
- Радиус обзора: 100%.
Дополнительные настройки:
- Экспозиция;
- Блики;
- Детализация лиц;
- Постобработка.
Arcania: Gothic 4
Min | Avg FPS
Включите JavaScript, чтобы видеть графики
Если отбросить по два крайних результата и усреднить пару оставшихся, то получится следующая картина:
- Тест 1: Min FPS 41,5 | AVG FPS 52,486
- Тест 2: Min FPS 40 | AVG FPS 52,432
- Тест 3: Min FPS 40,5 | AVG FPS 52,479
Как видно, разброса по минимальному FPS избежать проблематично, это значение зависит от множества факторов, включая и непосредственно глючность игры. Максимальный разброс цифр достигает 1,5 FPS, что в данном случае около 4%. Хотелось бы большего, но такая погрешность вполне приемлема. А вот по AVG FPS получены на удивление точные результаты, с минимальными погрешностями. Хорошее начало.
Battlefield Bad Company 2
Популярная игра, оставленная разработчиками (на горе всей пишущей братии) без встроенного теста производительности.
Особенности, которые следует учитывать:
- Всё управление в меню осуществляется только мышкой. Это плохо, ведь скрипт становится привязанным к одному разрешению экрана, а для других придётся менять код. Но это как-нибудь потом, а пока используется 1920x1080.
- В выбранной тестовой сцене после загрузки уровня нам показывают видеоролик, который можно пропустить. Это позволяет задать одну и ту же точку начала тестовой сцены независимо от времени её загрузки.
Последовательность действий:
SetKeyDelay [, 20, 20] ;Установка задержки и времени зажатия клавиш в миллисекундах. Местами необходимо, но, как правило, лучше всё делать вручную. SetDefaultMouseSpeed, 30 ;Так как переход по меню будет осуществляться при помощи мыши – необходимо задать скорость её перемещения. Иначе перемещение будет не плавным, а мгновенным, и действие может не сработать. run, BFBC2Game.exe ;Уже знакомая команда запуска .exe файла игры. Sleep 14000 ;Пауза. Значение может быть выше на слабых системах. Send {Esc down} ;Тут идёт показ вступительной рекламы, дабы не тратить зря время, её можно пропустить нажатием Escape. Sleep 60 Send {Esc up} Sleep 12000 ;До перехода в главное меню следует подождать. i=0 ;Переменная понадобится в дальнейшем. Loop 4 ;Задаётся четырёхкратное выполнение действий, заключённых в фигурные скобки. { SendEvent {Click 800, 130} ;Клик по кнопке меню «Индивидуальная». Sleep 2000 SendEvent {Click 800, 245} ;Выбор подпункта «Моя компания». Sleep 1500 SendEvent {Click 300, 670} ;Клик по выбору миссии. В данном случае это: «7.Тяжелый металл». Sleep 1000 SendEvent {Click 1150, 940} ;Клик по меню «Начать». Sleep 2000 SendEvent {Click 400, 600} ;Клик по выбору уровня сложности. Здесь - «Легкий». Sleep 1000 SendEvent {Click 1600, 880} ;Клик по кнопке «Начать». С этого момента начинается процесс загрузки уровня. Sleep 500 if (i==0) ;Оператор условия. Для первого запуска тестовой сцены добавляет к длительности паузы пять секунд. Большего, как правило, не требуется, хотя для слабых ПК, возможно, придётся это значение увеличить. { Sleep 5000 i++ } Sleep 15000 ;Игра грузится не так долго, но наличие после загрузки уровня вступительного видеоролика позволяет значительно перестраховаться. Send {Space down} ;Нажатие пробела. Приводит к пропуску вступления, после чего начинается собственно тестирование. Sleep 60 Send {Space up} Sleep 3000 Send {F10} ;Хотя, в отличии от Gothic 4, здесь в силу объективных причин точка начала замера будет одна и та же – лишним скриншот не будет. Удалить его потом не сложно. Sleep 500 Send {F11} ;Начало замера производительности и тестовой сцены. Суть сцены сводится к прохождению на танке тестового отрезка и к попытке уничтожить выстрелом из орудия уезжающий от него автомобиль. Sleep 460 Send c ;Нажатие клавиши «c». Подразумевает смену камеры между положениями «Вид сверху» и «Вид из кабины». Sleep 200 Send {down down} Sleep 1000 Send {down up} Sleep 1000 Send {w down} Sleep 7000 Send {a down} Sleep 500 Send {a up} Sleep 4000 Send {a down} Sleep 950 Send {a up} Sleep 1000 Send {d down} Sleep 200 Send {d up} Send {down down} Send {down up} Sleep 10000 Send c Send {a down} Sleep 900 Send {a up} Sleep 500 Send {w up} Send {down down} Sleep 10 Send {down up} Send {LButton down} sleep 60 Send {LButton up} Sleep 1500 Send {w down} Sleep 1000 Send {d down} Sleep 930 Send {d up} Send {up down} Sleep 10 Send {up up} Send {LButton down} sleep 60 Send {LButton up} Sleep 2000 Send c Sleep 500 Send {w up} Sleep 4000 Send {F11} ;Окончание замера производительности. Sleep 500 Send {F10} ;Ещё один скриншот. По сравнению с первым – более полезен. Sleep 1000 Send {Esc down} ;Выход в меню паузы Sleep 60 Send {Esc up} Sleep 2000 SendEvent {Click 1800, 130} ;Клик по меню «Выйти». Sleep 2000 SendEvent {Click 800, 645} ;Подтверждение выхода. Осуществляется переход в главное меню. Sleep 3000 ;Пауза. Переход в главное меню осуществлён. } ;Переход на следующую итерацию/окончание цикла. SendEvent {Click 1800, 130} ;Клик по меню «Выйти». Sleep 2000 SendEvent {Click 800, 645} ;Подтверждение выхода. Осуществляется выход из игры.
|
Дополнительно - скриншоты начала и окончания замера производительности:
Перейду непосредственно к результатам:
Настройки графики:
- Разрешение: 1920*1080;
- Уровень детализации: Выс;
- Качество текстур: Выс;
- Качество теней: Выс;
- Качество эффектов: Выс;
- Сглаживание: 4x;
- Анизотропный фильтр: 16x;
- Вертикальная синхронизация: Выкл;
- HBAO: Вкл.
Battlefield Bad Company 2
Min | Avg FPS
Включите JavaScript, чтобы видеть графики
Если отбросить по два крайних результата и усреднить пару оставшихся, то получится следующая картина:
- Тест 1: Min FPS 52 | AVG FPS 76,122
- Тест 2: Min FPS 52 | AVG FPS 76,0215
- Тест 3: Min FPS 52 | AVG FPS 76,4105
Солидный разброс по Min FPS в рамках одного цикла тестирования и отсутствие каких-либо отличий между тремя разными циклами. Для всех тестов показаны максимально-близкие цифры. А с учётом того, что замер производительности происходит автоматически – ну просто цены таким результатам нет.
реклама
Теги
Лента материалов раздела
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила