2013-07-01 5 views
2

Я создал простую программу, которая должна быть способна проверить входную задержку.Тестер входного лага

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

Программа работает, мигая оконным окном в черно-белом режиме в определенном ритме и прося пользователя нажать пробел или любую другую клавишу для этого ритма. Он использует getch для определения, когда был нажат ключ, и запускает функцию, которая обрабатывает getch параллельно с мигающей консолью с помощью OpenMP.

Используется ли это в качестве базового, бесплатного теста на входную задержку или что я должен сделать, чтобы сделать это, если это не так?

//Fdisk's input lag tester 
#include <omp.h> 
#include <stdio.h> 
#include <time.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <conio.h> 
using namespace std; 

//My global variables. My functions run in parallel so it's easier to use global variables here. 
    int i=0; 
    long int outp[11]; 
    long int inpu[11]; 

//This function takes the input 
int inputfunc() { 
while(i<11) { 
    getch(); //Takes the key input 
    inpu[i]=clock(); //Marks the time the key was pressed 
    if(inpu[i]-outp[i]>=0 && inpu[i]-outp[i]<5000) //Checks if result is valid 
    i++; //Moves the program along so it doesn't blink for eternity 
} 
return 0; 
} 

//This function causes the screen to change color 
int outputfunc() { 
while(i<11) { 
    system("color F0"); //Changes screen to white 
    outp[i]=clock(); //Marks the time when screen became white 
    usleep(400000); //Pause a bit here 
    system("color 0F"); //Make the screen black again 
    usleep(400000); //Pause again 
} 
return 0; 
} 
int main() { 
    printf("Fdisk's Input Lag Tester\n\nPress any key when the screen flashes WHITE.  Let it flash a few times before pressing anything, so you can get used to the  rhythm. Using the spacebar is recommended. Be as precise as possible with what you  see on screen. A multicore or multithreading processor is required.\n"); 
    system("pause"); //Sorry my coding is bad 
    system("cls"); //Again 
#pragma omp parallel sections //Parallel sections, these run in parallel on a dual core or dual threading machine 
{ 
    #pragma omp section 
    { 
     outputfunc(); //The output function, changes the screen's color 
    } 
    #pragma omp section 
    { 
     inputfunc(); //The input functions, waits for keypresses 
    } 
} 
long int x; 
for(i=0;i<11;i++) { 
x=x+(inpu[i]-outp[i]); //Difference between input and output=latency. This adds them up so we can take a mean value. 
} 
x=x/11; //This takes the mean value 
x=x*(1000/CLOCKS_PER_SEC); //I think clock is always set to milliseconds but in case it's not 
printf("Your input latency: %ims\n",x); //Gives the input latency to the user 
system("pause"); //Pauses the program so it doesn't exit in case not running it from a command line 
usleep(10000000); //Prevents someone from mindlessly pressing space to exit 
system("pause"); //Another redundancy to prevent accidental quitting 
} 
+2

http://codereview.stackexchange.com может быть лучшим местом для такого рода вопросов. –

+0

Эй, спасибо, я попробую разместить его там. Извините, я новичок в этом. – Fdisk

+0

Этот вопрос выглядит не по теме, потому что речь идет о пересмотре кода и теории тестирования; он был перекрестно размещен по адресу http://codereview.stackexchange.com/questions/27994/simple-input-lag-test –

ответ

0

Я считаю, что ваша тестовая процедура вряд ли обеспечит даже приблизительную оценку задержки, которую вы пытаетесь измерить. Это зависит слишком сильно от входа пользователя, имеет ли он какое-то чувство ритма, координацию его рук и глаз, если у него есть кофе и т. Д. Также имейте в виду, что людям сложно провести различие между двумя событиями, которые меньше чем ~ 30 мс друг от друга, так что это влияет на точность ваших результатов.

Мне пришлось выполнить аналогичную оценку отставания компьютера в другом контексте, но я считаю, что используемая мной процедура может быть адаптирована для вашего случая. Мне нужно было измерить сквозную задержку системы: цифровая камера -> сбор изображений и обработка аппаратных средств -> приложение windows-> display. С камерой я снял вспышку камеры. Затем я использовал вторую камеру (высокую скорость), чтобы снимать как вспышку, так и ее дисплей на мониторе. Пройдя через видео 2-й камеры, я смог измерить, сколько кадров прошло между оригинальной вспышкой и ее дисплеем на мониторе.

В вашем случае вы можете взять любую камеру и снять как клавиатуру, так и монитор и сохранить видео в файл. Вы можете нажать на клавиатуру и посмотреть результат на мониторе. Используя любое программное обеспечение для редактирования видео, вы можете измерить, сколько кадров потребовалось, чтобы результат был видимым. Конечно, точность зависит от частоты кадров вашей камеры, например, если у вас есть стандартная камера с частотой 30 кадров в секунду, то измеренное отставание будет кратным 33 мс. Если вам нужна более высокая точность, вы всегда можете использовать камеру с более высокой частотой кадров.

Смежные вопросы