mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-01-31 10:11:17 +00:00
Revent: Fixes
Changed termination signal to interrupt signal to prevent code exiting too early. Added exit handler to ensure revent exits correctly as previously was crashing and therefore not running final code. Fixed error in writing input event where half of timestamp seconds was missing. Fixed typo in documentation for revent file structure.
This commit is contained in:
parent
40d281b336
commit
7a19046645
@ -422,10 +422,9 @@ recorded. The event stream is prefixed with the number of events in the stream.
|
||||
|
||||
Each event entry structured as follows:
|
||||
|
||||
* A signed integer representing which device from the list of device paths
|
||||
* An unsigned integer representing which device from the list of device paths
|
||||
this event is for (zero indexed). E.g. Device ID = 3 would be the 4th
|
||||
device in the list of device paths.
|
||||
* 32 bits of padding
|
||||
* A signed integer representing the number of seconds since "epoch" when the
|
||||
event was recorded.
|
||||
* A signed integer representing the microseconds part of the timestamp.
|
||||
|
@ -157,7 +157,7 @@ class RecordCommand(ReventCommand):
|
||||
if args.capture_screen:
|
||||
self.logger.info("Recording screen capture")
|
||||
self.device.capture_screen(args.output or os.getcwdu())
|
||||
self.device.killall("revent", signal.SIGTERM)
|
||||
self.device.killall("revent", signal.SIGINT)
|
||||
self.logger.info("Waiting for revent to finish")
|
||||
while self.device.get_pids_of("revent"):
|
||||
pass
|
||||
|
41
wlauto/external/revent/revent.c
vendored
41
wlauto/external/revent/revent.c
vendored
@ -226,25 +226,25 @@ void destroy_replay_device(int fd)
|
||||
die("Could not destroy replay device");
|
||||
}
|
||||
|
||||
inline void set_evbit(fd, bit)
|
||||
inline void set_evbit(int fd, int bit)
|
||||
{
|
||||
if(ioctl(fd, UI_SET_EVBIT, bit) < 0)
|
||||
die("Could not set EVBIT %i", bit);
|
||||
}
|
||||
|
||||
inline void set_keybit(fd, bit)
|
||||
inline void set_keybit(int fd, int bit)
|
||||
{
|
||||
if(ioctl(fd, UI_SET_KEYBIT, bit) < 0)
|
||||
die("Could not set KEYBIT %i", bit);
|
||||
}
|
||||
|
||||
inline void set_absbit(fd, bit)
|
||||
inline void set_absbit(int fd, int bit)
|
||||
{
|
||||
if(ioctl(fd, UI_SET_ABSBIT, bit) < 0)
|
||||
die("Could not set ABSBIT %i", bit);
|
||||
}
|
||||
|
||||
inline void set_relbit(fd, bit)
|
||||
inline void set_relbit(int fd, int bit)
|
||||
{
|
||||
if(ioctl(fd, UI_SET_RELBIT, bit) < 0)
|
||||
die("Could not set RELBIT %i", bit);
|
||||
@ -562,16 +562,19 @@ void print_device_info(device_info_t *info)
|
||||
int write_replay_event(FILE *fout, const replay_event_t *ev)
|
||||
{
|
||||
size_t ret;
|
||||
uint64_t time;
|
||||
|
||||
ret = fwrite(&ev->dev_idx, sizeof(uint16_t), 1, fout);
|
||||
if (ret < 1)
|
||||
return errno;
|
||||
|
||||
ret = fwrite(&ev->event.time.tv_sec, sizeof(uint64_t), 1, fout);
|
||||
|
||||
time = (uint64_t)ev->event.time.tv_sec;
|
||||
ret = fwrite(&time, sizeof(uint64_t), 1, fout);
|
||||
if (ret < 1)
|
||||
return errno;
|
||||
|
||||
ret = fwrite(&ev->event.time.tv_usec, sizeof(uint64_t), 1, fout);
|
||||
time = (uint64_t)ev->event.time.tv_usec;
|
||||
ret = fwrite(&time, sizeof(uint64_t), 1, fout);
|
||||
if (ret < 1)
|
||||
return errno;
|
||||
|
||||
@ -1020,6 +1023,12 @@ void open_gamepad_input_devices_for_playback_or_die(input_devices_t *devices, co
|
||||
devices->max_fd = fd;
|
||||
}
|
||||
|
||||
//Used to exit program properly on termination
|
||||
static volatile int EXIT = 0;
|
||||
void exitHandler(int z) {
|
||||
EXIT = 1;
|
||||
}
|
||||
|
||||
void record(const char *filepath, int delay, recording_mode_t mode)
|
||||
{
|
||||
int ret;
|
||||
@ -1054,6 +1063,7 @@ void record(const char *filepath, int delay, recording_mode_t mode)
|
||||
}
|
||||
|
||||
sigset_t old_sigset;
|
||||
sigemptyset(&old_sigset);
|
||||
block_sigterm(&old_sigset);
|
||||
|
||||
// Write the zero size as a place holder and remember the position in the
|
||||
@ -1074,7 +1084,11 @@ void record(const char *filepath, int delay, recording_mode_t mode)
|
||||
int32_t maxfd = 0;
|
||||
int32_t keydev = 0;
|
||||
int i;
|
||||
printf("recording...\n");
|
||||
printf("recording...\n");
|
||||
|
||||
errno = 0;
|
||||
signal(SIGINT, exitHandler);
|
||||
|
||||
while(1)
|
||||
{
|
||||
FD_ZERO(&readfds);
|
||||
@ -1086,11 +1100,18 @@ void record(const char *filepath, int delay, recording_mode_t mode)
|
||||
/* wait for input */
|
||||
tout.tv_sec = delay;
|
||||
tout.tv_nsec = 0;
|
||||
|
||||
ret = pselect(devices.max_fd + 1, &readfds, NULL, NULL, &tout, &old_sigset);
|
||||
if (errno == EINTR)
|
||||
|
||||
if (EXIT){
|
||||
break;
|
||||
if (!ret)
|
||||
}
|
||||
if (errno == EINTR){
|
||||
break;
|
||||
}
|
||||
if (!ret){
|
||||
break;
|
||||
}
|
||||
|
||||
if (wait_for_stdin && FD_ISSET(STDIN_FILENO, &readfds)) {
|
||||
// in this case the key down for the return key will be recorded
|
||||
|
Loading…
x
Reference in New Issue
Block a user