Автоматизируем процесс замера производительности в играх (страница 2)

Borderlands

Не теряющая популярности игра, полюбившаяся многим.

Особенности, которые следует учитывать:

  • Игра позволяет загрузить уровень, не прибегая к использованию мыши, соответственно скрипт должен подойти к любому разрешению экрана. Это хорошо.
  • Надо учесть, что время загрузки уровня – величина непостоянная.

Последовательность действий:

реклама

SetKeyDelay [, 20, 20] ;Установка задержки и времени зажатия клавиш в миллисекундах.

run, Borderlands.exe ;Запуск игры.

Sleep 30000 ;Время, необходимое для запуска игры. Выбрано с хорошим запасом, но при тестировании слабой конфигурации, возможно, придётся увеличить.

Send {Enter} ;Меню с просьбой нажать Enter. Скрипт у меня послушный, сам и «нажмёт».

Sleep 3000

реклама

Loop 4 ;Объявление цикла. Заключённая в фигурные скобки ниже последовательность действий будет воспроизведена четырёхкратно.

{

Send {Enter} ;Клик по меню «Один игрок».

Sleep 1500

Send {Enter} ;Клик по сохранению, находящемуся в первой ячейке.

Sleep 13000 ;Пауза, необходимая для загрузки уровня. Вообще, уровень загружается быстро даже на двухъядерных Athlon’ах, но кому-то, возможно, и придётся увеличить данное значение.

Send {F10} ;Создание скриншота. Так как время загрузки уровня – величина переменная, то скриншот в данном случае является необходимостью.

Sleep 1000

Send {F11} ;Начало замера. Отсюда и далее персонаж проходит маршрут. Во время прохождения маршрута снимаются цифры производительности.

Sleep 1000

Send {d down}

Sleep 250

Send {d up}

Send {Shift down}

Sleep 100

реклама



Send {w down}

Sleep 5000

Send {w up}

Send {Shift up}

Send {s down}

реклама

Sleep 5000

Send {s up}

Sleep 1000

Send {Shift down}

Send {w down}

реклама

Sleep 2500

Send {Space down}

Sleep 500

Send {Space up}

Sleep 2000

реклама

Send {Shift up}

Send {right down}

Sleep 800

Send {right up}

Sleep 1200

реклама

Send {w up}

Sleep 500

Send {s down}

Sleep 1000

Loop 10

реклама

{

Send {a down}

Sleep 500

Send {a up}

Send {d down}

реклама

Sleep 500

Send {d up}

}

Send {s up}

Sleep 1000

Sleep 1000

Send {Space}

Sleep 3000

Send {F11} ;Окончание замера производительности.

Sleep 1000

Send {F10} ;Второй скриншот. Пригодится.

Sleep 1000

Send {Esc} ;Выход в меню паузы.

Sleep 1000

Send {up} ;Выбор строки «Выход».

Sleep 500

Send {Enter} ;Клик по выбранной строке.

Sleep 2000

Send {up} ;Выбор строки подтверждения выхода.

Sleep 500

Send {Enter} ;Клик по выбранной строке.

Sleep 8000 ;Пауза, пока осуществляется возврат в главное меню.

} ;Переход на следующую итерацию/окончание главного цикла.

Send {up} ;Выбор строки «Выход».

Sleep 500

Send {Enter} ;Клик по выбранной строке.

Sleep 500

Send {up} ;Выбор строки подтверждения выхода.

Sleep 500

Send {Enter} ;Клик по выбранной строке. Эхх, один из самых простых среди используемых скриптов, если не самый простой.

Ниже - ролик, демонстрирующий работу скрипта::

Дополнительно - скриншоты начала и окончания замера производительности:

450x253  10 KB. Big one: 1920x1080  119 KB

450x253  12 KB. Big one: 1920x1080  160 KB

Перейду непосредственно к результатам:

Настройки графики:

  • Разрешение: 1920x1080;
  • Анизотропная фильтрация: 16x;
  • Динамические тени: On;
  • Следы от пуль: On;
  • Качество листвы: High;
  • Качество текстур High;
  • Детализация игры: High;
  • Окклюзия: Off;
  • Bloom: On;
  • Глубина резкости: On;
  • Отражение света: On.

Borderlands


Min | Avg FPS


Включите JavaScript, чтобы видеть графики

Если отбросить по два крайних результата и усреднить пару оставшихся, то получится следующая картина:

  • Тест 1: Min FPS 90 | AVG FPS 113,6135
  • Тест 2: Min FPS 92 | AVG FPS 115,3015
  • Тест 3: Min FPS 89 | AVG FPS 111,741

Да, разброс результатов получился высоковатым, однако находится в пределах четырёх процентов и результаты могут быть применимы для оценки производительности железа.


Call of Duty: Black Ops

Игра вышла недавно и, хотя понравилась не всем, все же смогла пробиться к вершинам чарта продаж проектов сервиса Steam. Такой продукт обойти стороной сложно.

Особенности, которые следует учитывать:

  • Игра позволяет загрузить уровень, не прибегая к использованию мыши, соответственно скрипт должен подойти к любому разрешению экрана.
  • Во время загрузки любого уровня в игре показывается долгий видеоролик, который можно пропустить после загрузки уровня. Это позволяет задать одну и ту же точку начала тестовой сцены независимо от времени её загрузки.

Код получился местами сложный для восприятия неподготовленному человеку, так как содержит большое количество операторов условия и пару циклов, поэтому для упрощения восприятия немного структурирован.

Последовательность действий:

SetKeyDelay [, 20, 20] ;Установка задержки и времени зажатия клавиш в миллисекундах.

run, BlackOps.exe ;Запуск игры.

Sleep 16000 ;Пока игра включается – идёт показ вступительного видеоролика. По истечению определённого количества времени его можно пропустить. Как правило, 16-ти секунд достаточно, но на слабой конфигурации, возможно, придётся увеличить это число.

Send {LButton down} ;Долгое зажатие левой кнопки мыши позволяет ролик пропустить.

sleep 500

Send {LButton up}

Sleep 3000

Send {Enter} ;Экран «Нажмите любую клавишу». Поскольку клавиша с таким названием на клавиатуре отсутствует, то используется Enter.

Sleep 2000 ;Ожидание появления главного меню.

i=0 ;Инициализация переменной. Понадобится, и не раз.

Loop 5 ;Объявление цикла. Заключённая в фигурные скобки ниже последовательность действий будет воспроизведена пятикратно.

{

Send {Enter} ;Переход в меню «Кампания».

Sleep 3500

Send {Down down} ;Переход на строчку вниз, к меню «Выбор эпизода».

Sleep 60

Send {Down up}

Sleep 500

if (i>0) ;Оператор условия, для второго и каждого последующего запуска осуществляет переход в меню ещё на строчку ниже. Такая необходимость существует из-за того, что при втором (и каждом последующем) запуске в меню появляется дополнительная строка «Продолжить», а нужен «Выбор эпизода».

{

Send {Down down}

Sleep 60

Send {Down up}

Sleep 500

}

Send {Enter} ;Переход в меню выбора эпизода.

Sleep 2000

Send {Up} ;Нажатие стрелки вверх. Приведёт к выделению последнего эпизода под названием «Искупление». Выбор обусловлен как высоким требованиями данного уровня к ресурсам системы, так и тем, что в этой миссии показывается один ролик вступления, а не два-три, как в остальных.

Sleep 500

Send {Enter} ;Подтверждение выбора эпизода и переход в меню выбора сложности.

Sleep 2000

Send {Up} ;Одиночное нажатие стрелки вверх приведёт к выбору минимального уровня сложности.

Sleep 500

    if (i>0) ;Однако игра, скорее всего, запоминает последнее выбранное значение, и для второго запуска тестовой сцены выбирается максимальная сложность. Чтобы этого не произошло, используется оператор условия, который для второго и каждого из последующих запусков будет переходить на строку вниз.

    {

    Send {down}

    Sleep 500

    }

Send {Enter} ;Подтверждение выбора сложности. С этого момента начинается показ длительного видеоролика и параллельная загрузка уровня.

      If (i==0) ;Оператор условия, выполняющийся для первого запуска тестовой сцены. Предусматривает увеличенную паузу для первой загрузки уровня. Как правило, 50-ти секунд хватит и слабому компьютеру. Но кому-то, возможно, придётся и увеличить это значение.

      {

      Sleep 50000

      Send {LButton down} ;Пропуск вступительного видеоролика.

      sleep 500

      Send {LButton up}

      Sleep 24000 ;Пауза в 24 секунды. Так как следующий оператор условия относится ко второму и последующим запускам тестовой сцены, то после этой паузы будет произведён выход в главное меню.

      }

        If (i>0) ;Оператор условия. Подразумевает выполнение тестовой сцены. Работает, начиная со второго запуска.

        {

        Sleep 18000 ;Пауза перед пропуском вступительного видеоролика.

        Send {LButton down} ;Пропуск вступительного видеоролика.

        sleep 500

        Send {LButton up}

        Sleep 23500 ;Пауза, в течении которой делать нечего, всё управление осуществляется «автопилотом».

        Send {F10} ;Создание скриншота. Не сильно нужно, но может пригодиться.

        Sleep 500

        Send {F11} ;Начало замера производительности и тестовой сцены. Суть сцены сводится к штурму корабля с вертолёта. Производится уничтожение пары зенитных установок, далее ведётся обстрел корабля с расстояния.

        Sleep 5000

        Send {w down}

        Sleep 3000

        Send {LButton down}

        Send {w up}

        Sleep 500

        Send {d down}

        Sleep 150

        Send {RButton down}

        Sleep 100

        Send {RButton up}

        Send {d up}

        Sleep 1000

        Send {w up}

        Send {RButton down}

        Sleep 100

        Send {RButton up}

        sleep 2000

        Send {LButton up}

        Send {w down}

        Sleep 350

        Send {w up}

        Sleep 400

        Send {RButton down}

        Sleep 100

        Send {RButton up}

        Send {s down}

        Sleep 550

        Send {LButton down}

        sleep 3000

        Send {LButton up}

        Send {s up}

Loop 7 ;К этому моменту вертолетом уже уничтожены досаждающие зенитные установки, можно и пообстреливать корабль. Обстрел реализован в цикле несколькими повторяющимися действиями.

{

Send {d down}

Send {LButton down}

Sleep 3000

Send {d up}

Send {a down}

Sleep 3100

Send {a up}

Send {LButton up}

Sleep 1000

Send {w down}

Sleep 100

Send {w up}

} ;Окончание обстрела.

Sleep 1000

Send {F11} ;Окончание замера производительности.

Sleep 500

Send {F10} ;Создание скриншота. Пригодится.

Sleep 1000

        } ;Окончание действий, заключённых в оператор условия, подразумевающий прохождение тестовой сцены.

Send {Esc} ;Выход в меню паузы.

Sleep 2000

Send {up} ;Выбор строки «Сохранить и выйти».

Sleep 500

Send {Enter} ;Клик по выбранной строке.

Sleep 2000

Send {up} ;Выбор строки подтверждения выхода.

Sleep 500

Send {Enter} ;Клик по выбранной строке.

Sleep 7000 ;Пауза, пока осуществляется выход в главное меню.

Send {LButton down} ;Пропуск вступительного видеоролика.

sleep 500

Send {LButton up}

Sleep 1000

i++ ;Увеличение переменной i на единицу.

} ;Переход на следующую итерацию/окончание главного цикла.

Sleep 1000 ;Пауза по окончании цикла тестирования.

Send {up} ;Переход на строку вверх – к меню выхода.

Sleep 500

Send {Enter} ;Клик по выбранной строке.

Sleep 2000

Send {up} ;Переход на строку подтверждения выхода.

Sleep 500

Send {Enter} ;Подтверждение выхода.

Ниже - ролик, демонстрирующий работу скрипта::

Дополнительно - скриншоты начала и окончания замера производительности:

450x253  9 KB. Big one: 1920x1080  86 KB

450x253  9 KB. Big one: 1920x1080  90 KB

Перейду непосредственно к результатам:

Настройки графики:

  • Разрешение: 1920x1080;
  • Сглаживание: 4х;
  • Синхронизация кадров: Нет;
  • Фильтрация текстур: Трилинейная;
  • Анизотропная фильтрация: 16x;
  • Качество текстур: Макс;
  • Тени: Да;
  • Следы пуль: Да;
  • Число трупов: Большое;

Call of Duty Black Ops


Min | Avg FPS


Включите JavaScript, чтобы видеть графики

Если отбросить по два крайних результата и усреднить пару оставшихся, то получится следующая картина:

  • Тест 1: Min FPS 55,5 | AVG FPS 65,955
  • Тест 2: Min FPS 56,5 | AVG FPS 67,0845
  • Тест 3: Min FPS 56 | AVG FPS 67,06

Не идеально, конечно, но точности полученных цифр хватит, чтобы использовать данную тестовую сцену.


Dragon Age Origins

Популярная игра жанра RPG, сильно требовательна к вычислительным мощностям, в первую очередь - к процессорам.

Особенности, которые следует учитывать:

  • Управление в меню осуществляется мышкой. Это плохо, так как скрипт становится привязанным к одному разрешению экрана, а для других разрешений придётся менять код. Здесь он оптимизирован под разрешение 1920x1080.
  • Надо учесть, что время загрузки уровня – величина непостоянная.

Последовательность действий:

SetKeyDelay [, 20, 20] ;Установка задержки и времени зажатия клавиш в миллисекундах.

SetDefaultMouseSpeed, 30 ;Установка скорости перемещения курсора мыши.

Run, daorigins.exe ;Запуск игры.

Sleep 16000 ;Пауза, пока загружается игра. В зависимости от конфигурации понадобится либо уменьшить это время, либо увеличить. Как вариант, который может подойти практически для любой системы – выставить значение паузы около 60 секунд и стереть следующие восемь строк кода, отвечающих за пропуск двух вступительных видеороликов.

Send {Esc down} ;Пропуск первого рекламного ролика.

Sleep 60

Send {Esc up}

Sleep 500

Send {Esc down} ;Пропуск второго рекламного ролика.

Sleep 60

Send {ESC up}

Sleep 1000

i=0 ;Инициализация переменной. Куда ж без неё.

SendEvent {Click 1835, 750} ;Клик по строке «Загрузить».

Loop 5 ;Начало цикла.

{

Sleep 1500 ;Пауза, необходимая для перехода в меню загрузки. Подразумевается, что сохранение, предназначенное для замера производительности, будет либо единственным, либо первым в списке.

SendEvent {Click 1170, 800} ;После выполнения предыдущего условия при попадании в меню загрузки сохранений оно уже выделено и остаётся только щёлкнуть по кнопке «Загрузить». Что и делается этой командой.

If (i==0) ;Оператор условия. Подразумевает для i=0, то есть для первого запуска тестовой сцены 40 секунд паузы. Как правило, этого с лихвой достаточно для первой загрузки уровня.

Sleep 40000

If (i>0) ;Оператор условия. Обеспечивает проход тестовой сцены при второй и каждой последующей загрузке уровня.

{

Sleep 6000 ;Время, необходимое для загрузки тестового сохранения. На слабых системах может быть выше, но, скорее всего, этого хватит.

Send {F10} ;Скриншот, по которому впоследствии можно определить, хватило ли времени паузы строкой выше.

Sleep 500

Send {F11} ;Начало замера производительности. Тестовая сцена – несложная пробежка персонажем по уровню, который является одним из самых, если не самым ресурсоёмким в игре.

Send {w down}

Sleep 16760

Send {w up}

Sleep 5540

Send {s down}

Sleep 16600

Send {s up}

Sleep 500

Send {F11} ;Окончание замера производительности.

Sleep 500

Send {F10} ;Второй скриншот, по окончании тестовой сцены.

Sleep 500

} ;Выход из оператора условия. Дальнейшие действия актуальны для любого значения переменной i.

Send {Esc down} ;Выход в меню паузы.

Sleep 60

Send {Esc up}

Sleep 1000

SendEvent {Click 950, 500} ;Клик по меню «Загрузить». Возвращение к точке, с которой начался цикл.

Sleep 1000

i++ ;Увеличение переменной i на единицу.

} ;Переход на следующую итерацию/окончание главного цикла.

Sleep 1000

Send {Esc down} ;По окончании главного цикла надо выйти из меню загрузки уровня. Делается нажатием Escape.

Sleep 60

Send {ESC up}

Sleep 1500

SendEvent {Click 960, 700} ;Клик по меню «Выход».

Sleep 1500

SendEvent {Click 900, 555} ;Подтверждение выхода.

Sleep 1500 ;Пауза, в этот момент осуществляется переход в главное меню.

SendEvent {Click 1850, 950} ;Клик по меню «Выход». Подтверждение не требуется.

Ниже - ролик, демонстрирующий работу скрипта::

Дополнительно - скриншоты начала и окончания замера производительности:

450x253  10 KB. Big one: 1920x1080  113 KB

450x253  11 KB. Big one: 1920x1080  123 KB

Перейду непосредственно к результатам:

Настройки графики:

  • Разрешение: 1920х1080;
  • Детализация графики: Очень высоко;
  • Сглаживание: 4х;
  • Детализация текстур: Высоко;
  • Эффекты кадрового буфера: Включены;

Dragon Age Origins


Min | Avg FPS


Включите JavaScript, чтобы видеть графики

Если отбросить по два крайних результата и усреднить пару оставшихся, то получится следующая картина:

  • Тест 1: Min FPS 43 | AVG FPS 54,978
  • Тест 2: Min FPS 43 | AVG FPS 55,199
  • Тест 3: Min FPS 43 | AVG FPS 55,3145

Даже комментировать особо нечего, повторяемость результатов близка к идеальной.

Страницы материала
Оценитe материал
рейтинг: 4.4 из 5
голосов: 72

Теги

Комментарии Правила



Возможно вас заинтересует

Популярные новости

Сейчас обсуждают