xref: /aosp_15_r20/external/igt-gpu-tools/runner/resume.c (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker #include <errno.h>
2*d83cc019SAndroid Build Coastguard Worker #include <fcntl.h>
3*d83cc019SAndroid Build Coastguard Worker #include <stdio.h>
4*d83cc019SAndroid Build Coastguard Worker #include <string.h>
5*d83cc019SAndroid Build Coastguard Worker #include <sys/stat.h>
6*d83cc019SAndroid Build Coastguard Worker #include <sys/types.h>
7*d83cc019SAndroid Build Coastguard Worker 
8*d83cc019SAndroid Build Coastguard Worker #include "settings.h"
9*d83cc019SAndroid Build Coastguard Worker #include "job_list.h"
10*d83cc019SAndroid Build Coastguard Worker #include "executor.h"
11*d83cc019SAndroid Build Coastguard Worker #include "resultgen.h"
12*d83cc019SAndroid Build Coastguard Worker 
main(int argc,char ** argv)13*d83cc019SAndroid Build Coastguard Worker int main(int argc, char **argv)
14*d83cc019SAndroid Build Coastguard Worker {
15*d83cc019SAndroid Build Coastguard Worker 	struct settings settings;
16*d83cc019SAndroid Build Coastguard Worker 	struct job_list job_list;
17*d83cc019SAndroid Build Coastguard Worker 	struct execute_state state;
18*d83cc019SAndroid Build Coastguard Worker 	int exitcode = 0;
19*d83cc019SAndroid Build Coastguard Worker 	int dirfd;
20*d83cc019SAndroid Build Coastguard Worker 
21*d83cc019SAndroid Build Coastguard Worker 	init_settings(&settings);
22*d83cc019SAndroid Build Coastguard Worker 	init_job_list(&job_list);
23*d83cc019SAndroid Build Coastguard Worker 
24*d83cc019SAndroid Build Coastguard Worker 	if (argc < 2) {
25*d83cc019SAndroid Build Coastguard Worker 		fprintf(stderr, "Usage: %s results-directory\n", argv[0]);
26*d83cc019SAndroid Build Coastguard Worker 		return 1;
27*d83cc019SAndroid Build Coastguard Worker 	}
28*d83cc019SAndroid Build Coastguard Worker 
29*d83cc019SAndroid Build Coastguard Worker 	if ((dirfd = open(argv[1], O_RDONLY | O_DIRECTORY)) < 0) {
30*d83cc019SAndroid Build Coastguard Worker 		fprintf(stderr, "Failure opening %s: %s\n", argv[1], strerror(errno));
31*d83cc019SAndroid Build Coastguard Worker 		return 1;
32*d83cc019SAndroid Build Coastguard Worker 	}
33*d83cc019SAndroid Build Coastguard Worker 
34*d83cc019SAndroid Build Coastguard Worker 	if (!initialize_execute_state_from_resume(dirfd, &state, &settings, &job_list)) {
35*d83cc019SAndroid Build Coastguard Worker 		return 1;
36*d83cc019SAndroid Build Coastguard Worker 	}
37*d83cc019SAndroid Build Coastguard Worker 
38*d83cc019SAndroid Build Coastguard Worker 	if (!execute(&state, &settings, &job_list)) {
39*d83cc019SAndroid Build Coastguard Worker 		exitcode = 1;
40*d83cc019SAndroid Build Coastguard Worker 	}
41*d83cc019SAndroid Build Coastguard Worker 
42*d83cc019SAndroid Build Coastguard Worker 	if (state.time_left == 0.0) {
43*d83cc019SAndroid Build Coastguard Worker 		/*
44*d83cc019SAndroid Build Coastguard Worker 		 * Overall timeout happened. Results generation can
45*d83cc019SAndroid Build Coastguard Worker 		 * override this
46*d83cc019SAndroid Build Coastguard Worker 		 */
47*d83cc019SAndroid Build Coastguard Worker 		exitcode = 2;
48*d83cc019SAndroid Build Coastguard Worker 	}
49*d83cc019SAndroid Build Coastguard Worker 
50*d83cc019SAndroid Build Coastguard Worker 	if (!generate_results_path(settings.results_path)) {
51*d83cc019SAndroid Build Coastguard Worker 		exitcode = 1;
52*d83cc019SAndroid Build Coastguard Worker 	}
53*d83cc019SAndroid Build Coastguard Worker 
54*d83cc019SAndroid Build Coastguard Worker 	printf("Done.\n");
55*d83cc019SAndroid Build Coastguard Worker 	return exitcode;
56*d83cc019SAndroid Build Coastguard Worker }
57