Автоматизируем процесс замера производительности в играх (страница 3)
реклама
Medal of Honor (2010)
Не всем игра понравилась, но как-никак это очередной Medal of Honor, и обходить стороной данную игру ценителям жанра не стоит.
Особенности, которые следует учитывать:
- Игра позволяет загрузить уровень не прибегая к использованию мыши, соответственно скрипт должен подойти к любому разрешению экрана.
- Надо учесть, что время загрузки уровня – величина непостоянная.
- Каждая миссия начинается с длительной непропускаемой сцены. Так как эти сцены реализованы в большинстве своём на движке игры, то снятые в них цифры производительности должны неплохо отражать действительную расстановку сил среди аппаратного обеспечения. Но из особенности под номером два вытекает необходимость подбора паузы, отводящейся на загрузку уровня под каждую отдельно взятую конфигурацию.
Последовательность действий:
SetKeyDelay [, 30, 30] ;Установка задержки и времени зажатия клавиш в миллисекундах. На сей раз больше, чем обычно. При 20, 20 могут возникнуть проблемы. run, moh.exe ;Запуск игры. рекламаSleep 46000 ;Игра стартует долго, показывает неотключаемую рекламу. Так что пауза длинная. Возможно, для перестраховки на слабых системах стоит установить значение около минуты. i=0 ;Инициализация уже привычной и знакомой по другим скриптам переменной. Loop 5 ;Начало цикла. { Send {up} ;Переход на строку вверх. Sleep 500 Send {up} ;Ещё на строку вверх, к строке «Выбор задания». Sleep 500 рекламаSend {Enter} ;Клик по выбранной строке. Sleep 2000 Send {down} ;Отсюда и далее – выбор необходимого уровня, здесь - «Сети Нептуна». Sleep 500 Send {down} Sleep 500 Send {left} Sleep 500 Send {Enter} Sleep 500 Send {down} Sleep 500 Send {down} Sleep 500 Send {Enter} ;К этому моменту выбор уровня осуществлён, клик по строке «Далее». рекламаSleep 500 Send {left} ;Игра сообщает о наличии сохранения и спрашивает удалить ли его, начав миссию заново. Нажатием стрелки влево осуществляется переход к выбору кнопки «Да». Sleep 500 Send {Enter} ;Клик по выбранной кнопке. Sleep 2000 Send {down} ;Выбор сложности. Sleep 500 Send {Enter} ;Подтверждение. После него начинается загрузка тестовой сцены. If (i==0) ;Оператор условия, вносит десятисекундную паузу при первой загрузке тестовой сцены. Sleep 10000 If (i>0) ;Оператор условия. Для второй и каждой последующей загрузки уровня выполняется замер производительности. { Sleep 6000 ;Пауза, необходимая для загрузки уровня. Send {F10} ;Скриншот. В данном случае важный. Под этот скриншот будет «подгоняться» пауза строчкой выше. Sleep 1000 Send {F11} ;Начало замера. Sleep 105500 Send {F11} ;Окончание замера. Sleep 1000 Send {F10} ;Второй скриншот, в данном случае гораздо менее важный, чем первый. Sleep 1000 } Send {Esc} ;Выход в меню паузы. Sleep 1000 Send {up} Sleep 500 Send {up} ;Переход к строке «Выйти в главное меню». Sleep 500 Send {Enter} ;Клик по выбранной строке. Sleep 1000 Send {left} ;Переход к кнопке подтверждения выхода. Sleep 500 Send {Enter} ;Подтверждение выхода. Sleep 5000 i++ ;Увеличение переменной i на единицу. } ;Переход на следующую итерацию/окончание главного цикла. Send {left} ;Переход к меню «Выход». Sleep 1000 Send {Enter} ;Клик по выбранному меню. Sleep 1000 Send {left} ;Переход к кнопке подтверждения выхода. Sleep 1000 Send {Enter} ;Подтверждение выхода.
|
Дополнительно - скриншоты начала и окончания замера производительности:
Перейду непосредственно к результатам:
Настройки графики:
Разрешение: 1920х1080;
Вертикальная синхронизация: Выкл;
Качество: Выс;
Качество текстур: Выс;
Качество окружающего мира: Выс;
Качество теней: Выс;
Сглаживание: Вкл.
Medal of Honor (2010)
Min | Avg FPS
Включите JavaScript, чтобы видеть графики
Если отбросить по два крайних результата и усреднить пару оставшихся, то получится следующая картина:
- Тест 1: Min FPS 63 | AVG FPS 105,473
- Тест 2: Min FPS 63 | AVG FPS 106,1815
- Тест 3: Min FPS 62 | AVG FPS 105,8255
При смежных запусках тестовой сцены наблюдается разброс значений по Min FPS, однако между тремя запусками четырёхкратного теста разница в результатах минимальна.
Metro 2033
В особом представлении игра не нуждается. Одна из наиболее требовательных к производительности графических адаптеров игра, если не самая-самая. Да, в Metro2033 есть готовое средство измерения производительности, но этот бенчмарк создаёт нагрузку, нетипичную для игрового процесса, что ставит под сомнение результаты. Конечно, производительность лучше мерить непосредственно в игре, что и произойдет ниже.
Особенности, которые следует учитывать:
- Игра позволяет загрузить уровень, не прибегая к использованию мыши, соответственно скрипт должен подойти к любому разрешению экрана.
- После загрузки уровня появляется диалоговое окно с предложением нажать любую клавишу для продолжения. Момент начала замера производительности будет один и тот же, в отдельном слежении он не нуждается.
Последовательность действий:
SetKeyDelay [, 20, 20] ;Установка задержки и времени зажатия клавиш в миллисекундах. Run, metro2033.exe ;Запуск игры. Sleep 24500 ;Пауза до появления пропускаемого видеоролика. Возможно, стоит увеличить, но должно хватить и так. Send {enter} ;Пропуск видеоролика. i=0 ;Инициализация переменной. Loop 5 ;Начало главного цикла. { j=0 ;Инициализация ещё одной переменной. Она нужна, поскольку тестовая сцена сложная и вокруг персонажа происходит много активных действий. Sleep 1800 Send {enter} ;Осуществление перехода в главное меню. Sleep 2500 Send {up} ;Отсюда и далее – переход на три строки вверх – к кнопке «Загрузка». Sleep 800 Send {up} Sleep 800 Send {up} Sleep 800 Send {Enter} ;Клик по выбранной кнопке. Sleep 3000 Send {up} ;Выбор уровня, здесь - «Глава7 - Башня». Sleep 800 Send {up} Sleep 800 Send {Enter} ;Клик по строке с выбранным уровнем. Sleep 800 Send {Enter} ;Клик по кнопке «Продолжить». Sleep 800 Send {Enter} ;Ещё одно подтверждение. Sleep 8000 ;Пауза – время загрузки уровня. Send {enter} ;Она к этому моменту должна быть прекращена. Подтверждение перехода на уровень. If (i==0) ;Оператор условия, вносит десятисекундную паузу для первой итерации цикла. Sleep 10000 If (i>0) ;Оператор условия. Для второго и каждого последующего запуска сохранения обеспечивает прогон тестовой сцены. { Sleep 2000 Send {3} Send {F11} ;Начало замера производительности. Sleep 1000 Send {g down} Sleep 1200 Send {g up} Sleep 200 Send {w down} Sleep 1000 Send {w up} Sleep 2500 Send {s down} Sleep 1000 Send {s up} Sleep 2500 Send {d down} Sleep 1000 Send {d up} Sleep 2500 Send {a down} Sleep 1000 Send {a up} Send {w down} Sleep 1000 Send {w up} Send {s down} Sleep 1000 Send {s up} Send {d down} Sleep 1000 Send {d up} Send {a down} Sleep 1000 Send {a up} Sleep 2500 Send {a down} Sleep 1000 Send {a up} Sleep 1000 Send {w down} Sleep 1000 Send {w up} Send {left down} Sleep 1300 Send {left up} Send {s down} Sleep 1200 Send {s up} Sleep 1500 Send {w down} Sleep 1300 Send {w up} Sleep 300 Send {d down} Send {w down} Sleep 1000 Send {d up} Sleep 1300 Send {w up} Sleep 300 Send {d down} Sleep 1000 Send {q} Send {d up} Sleep 2200 Send {s down} Sleep 1000 Send {s up} Sleep 500 Send {s down} Sleep 1000 Send {s up} Loop 8 ;Дополнительный цикл. К этому моменту на персонажа набрасывается стая собак, запускается уворачивание. { Send {w down} Send {a down} Sleep 500 Send {w up} Send {a up} Send {Right down} Send {Space down} Sleep 300 Send {Space up} Send {Right up} Send {s down} Send {d down} Sleep 500 Send {s up} Send {d up} If ((j==2)|(j==5)) ;Оператор условия внутри дополнительного цикла. Заставляет персонажа дважды принять аптечку. Иначе велика вероятность смерти персонажа, и уход скрипта с намеченных рельсов. Send {q} j++ ;Увеличение переменной j на единицу. } ;Переход на следующую итерацию/окончание дополнительного цикла. Sleep 30000 Send {F11} ;Окончание замера производительности. Send {F10} ;Скриншот. Sleep 1000 } ;Точка выхода из оператора условия, внутри которого происходил замер производительности. Последующие строки актуальны для любых значений переменной i. Send {Escape} ;Выход в меню паузы. Sleep 3500 Send {up} Sleep 800 Send {up} ;Переход к строке «Выйти в главное меню». Sleep 800 Send {Enter} ;Клик по выбранной строке. Sleep 800 Send {left} ;Переход к кнопке подтверждение выхода. Sleep 800 Send {Enter} ;Клик по выбранной кнопке. Sleep 3000 i++ ;Увеличение переменной i на единицу. } ;Переход на следующую итерацию/окончание главного цикла. Sleep 2000 Send {Enter} ;Переход к главному меню. Sleep 3000 Send {up} Sleep 800 Send {up} ;Выбор меню «Выйти». Sleep 800 Send {Enter} ;Клик по выбранному меню. Sleep 800 Send {Enter} ;Подтверждение выхода.
|
Дополнительно - скриншот точки окончания замера производительности:
Перейду непосредственно к результатам:
Настройки графики:
- Разрешение: 1920*1080;
- Качество: High;
- DirectX: DX10;
- Сглаживание: AAA;
- Фильтрация текстур: AF16x;
- Продвинутый PhysX: Вкл.
Metro 2033
Min | Avg FPS
Включите JavaScript, чтобы видеть графики
Если отбросить по два крайних результата и усреднить пару оставшихся, то получится следующая картина:
- Тест 1: Min FPS 29 | AVG FPS 44,558
- Тест 2: Min FPS 29 | AVG FPS 44,7035
- Тест 3: Min FPS 29 | AVG FPS 45,051
Очень даже неплохо.
S.T.A.L.K.E.R.: Call of Pripyat
Ещё одна известная своими требованиями к системе игра. В ней, как и в Metro 2033, есть собственный тест измерения производительности. Однако, он, во-первых, очень долгий, а во-вторых, во встроенном бенчмарке проблематично получить повторяющиеся результаты. Так что лучше тестировать производительность в игре.
Особенности, которые следует учитывать:
- Управление в меню частично осуществляется мышкой. Это плохо, так как скрипт становится привязанным к одному разрешению экрана, а для других разрешений придётся менять код. Тут он оптимизирован под разрешение 1920x1080.
- Как и в случае с Metro 2033, после загрузки уровня появляется диалоговое окно с предложением нажать любую клавишу для продолжения. Момент начала замера производительности будет один и тот же, и в отдельном слежении не нуждается.
- Игра любит фризить/тормозить при первых запусках тестовой сцены, поэтому для перестраховки нужны «холостые» загрузки уровня без замера производительности, желательно не формата «Загрузка->выход», а с некими действиями персонажа.
Последовательность действий:
SetKeyDelay [, 20, 20] ;Установка задержки и времени зажатия клавиш в миллисекундах. SetDefaultMouseSpeed, 30 ;Установка скорости перемещения курсора мыши. run, Stalker-COP.exe ;Запуск игры. Sleep 35000 ;Пауза до момента, когда начинаются рекламные видеоролики, которые можно пропустить. Send {esc} ;Вообще, достаточно одного нажатия, но для перестраховки, в зависимости от времени загрузки игры, лучше нажать несколько раз, через некую паузу. Благо, реакции на нажатие Escape в главном меню нет. Sleep 2000 Send {esc} Sleep 2000 Send {esc} Sleep 2000 Send {esc} i=0 ;Инициализация переменной. loop 6 ;Начало главного цикла. В этот раз цикл шестикратный, ибо первые два запуска тестовой сцены будут «холостыми». { Sleep 4000 Send {down} ;Переход к строке «Загрузить игру». Sleep 200 Send {enter} ;Клик по выбранной строке. Sleep 500 ;Пауза, необходимая для перехода в меню выбора сохранений. SendEvent {Click 383, 670} ;Клик по нужному сохранению. К сожалению, делается только при помощи мыши. Sleep 200 Send {enter} ;Подтверждение выбора сохранения. С этого момента начинается процесс загрузки. Sleep 14000 ;Время, которого, как правило, хватает для загрузки. If (i==0) ;Но только не для первой загрузки уровня, которая длится нааааааамного дольше. Добавляется дополнительные 50 секунд паузы. Sleep 50000 Send {enter down} ;Осуществление перехода к выбранному уровню. Sleep 100 Send {enter up} Send {enter down} ;При первой загрузке иногда не нажимается с первого раза, так что и второе нажатие Enter’а не помешает. Sleep 100 Send {enter up} Sleep 9000 If ((i==0)|(i==1)) ;Оператор условия для первых двух загрузок тестового сохранения. Подразумевает небольшую пробежку персонажем уровня. Надо же дать игре «проглючиться». { Sleep 6000 Send {w down} Sleep 1000 Send {Space} Sleep 4000 Send {d down} Sleep 1000 Send {Space} Sleep 500 Send {a down} Sleep 500 Send {a up} Sleep 4000 Send {w up} Send {d up} Sleep 4000 } ;Окончание оператора условия. if (i>1) ;Оператор условия. Для третьей и каждой последующей загрузки сохранения подразумевает прохождение персонажем полного маршрута и замер производительности. { Send {F11} ;Начало замера производительности Sleep 1000 Send {w down} Sleep 100 Send {x} Sleep 6900 Send {x} Send {l} Send {d down} Sleep 350 Send {d up} Sleep 4000 Send {d down} Sleep 350 Send {d up} Sleep 8000 Send {d down} Sleep 350 Send {d up} Sleep 2000 Send {l} Sleep 10000 Send {w up} Sleep 8000 Send {w down} Send {a down} Sleep 100 Send {x} sleep 5000 Send {x} Send {space} Send {a up} Sleep 3000 Send {w up} Send {s down} Sleep 4000 Send {s up} Sleep 1000 Send {F11} ;Окончание замера производительности. Send {F10} ;Скриншот, по которому можно сверить, правильно ли преодолён маршрут. Sleep 1000 } Send {esc} ;Выход в меню паузы. Sleep 2000 Loop 6 ;Дополнительный цикл, обеспечивающий шестикратное нажатие клавиши «вниз», что приведёт к строке «Завершить игру». { Send {down} Sleep 500 } ;Переход на следующую итерацию/окончание дополнительного цикла. if (i==5) ;Оператор условия. Предусматривает дополнительное нажатие клавиши «Вниз» по окончанию последнего замера производительности. Это приведёт к наведению на строку выхода из игры. { Send {down} Sleep 500 } Send {Enter} ;Клик по выбранной строке. Sleep 1000 Send {Enter} ;Подтверждение. Sleep 3000 i++ ;Увеличение переменной i на единицу. } ;Переход на следующую итерацию/окончание главного цикла.
|
Дополнительно - скриншот точки окончания замера производительности:
Перейду непосредственно к результатам:
Настройки графики:
- Тип рендера: Ул. полное освещение (DX10);
- Установки качества: Максимальные;
- Разрешение: 1920х1080.
S.T.A.L.K.E.R.: Call of Pripyat
Min | Avg FPS
Включите JavaScript, чтобы видеть графики
Если отбросить по два крайних результата и усреднить пару оставшихся, то получится следующая картина:
- Тест 1: Min FPS 56,5 | AVG FPS 72,923
- Тест 2: Min FPS 56,5 | AVG FPS 72,9105
- Тест 3: Min FPS 57 | AVG FPS 72,9305
И комментировать-то особо нечего.
Заключение
Вот и закончен сей труд. Так как размер статьи превысил все стандартные лимиты – особо много писать в заключении не стану.
Вот архив со всеми скриптами и сохранениями для протестированных игр. Если кому-то интересно, то вот архив со всеми исходными данными по замерам производительности. Для особо пытливых – включая frametimes.csv файлы.
Подводя итоги написанному, можно сказать, что автоматизации замера производительности достичь не так уж и сложно, как это может показаться на первый взгляд. Основная часть пути пройдена, остались лишь мелкие штрихи в области оптимизации кода, а также в реализации алгоритмов смены разрешения экрана и оптимизация скриптов под различные разрешения.
Продолжение следует...
реклама
Теги
Лента материалов раздела
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила