vc4: Move job-submit skip cases to vc4_job_submit().
[mesa.git] / src / gallium / drivers / ddebug / dd_util.h
1 /**************************************************************************
2 *
3 * Copyright 2015 Advanced Micro Devices, Inc.
4 * Copyright 2008 VMware, Inc.
5 * All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * on the rights to use, copy, modify, merge, publish, distribute, sub
11 * license, and/or sell copies of the Software, and to permit persons to whom
12 * the Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice (including the next
15 * paragraph) shall be included in all copies or substantial portions of the
16 * Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
22 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24 * USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 **************************************************************************/
27
28 #ifndef DD_UTIL_H
29 #define DD_UTIL_H
30
31 #include <stdio.h>
32 #include <errno.h>
33 #include <unistd.h>
34 #include <sys/stat.h>
35
36 #include "c99_alloca.h"
37 #include "os/os_process.h"
38 #include "util/u_debug.h"
39
40 /* name of the directory in home */
41 #define DD_DIR "ddebug_dumps"
42
43 static inline FILE *
44 dd_get_debug_file(bool verbose)
45 {
46 static unsigned index;
47 char proc_name[128], dir[256], name[512];
48 FILE *f;
49
50 if (!os_get_process_name(proc_name, sizeof(proc_name))) {
51 fprintf(stderr, "dd: can't get the process name\n");
52 return NULL;
53 }
54
55 snprintf(dir, sizeof(dir), "%s/"DD_DIR, debug_get_option("HOME", "."));
56
57 if (mkdir(dir, 0774) && errno != EEXIST) {
58 fprintf(stderr, "dd: can't create a directory (%i)\n", errno);
59 return NULL;
60 }
61
62 snprintf(name, sizeof(name), "%s/%s_%u_%08u", dir, proc_name, getpid(), index++);
63 f = fopen(name, "w");
64 if (!f) {
65 fprintf(stderr, "dd: can't open file %s\n", name);
66 return NULL;
67 }
68
69 if (verbose)
70 fprintf(stderr, "dd: dumping to file %s\n", name);
71
72 return f;
73 }
74
75 static inline void
76 dd_parse_apitrace_marker(const char *string, int len, unsigned *call_number)
77 {
78 unsigned num;
79 char *s;
80
81 if (len <= 0)
82 return;
83
84 /* Make it zero-terminated. */
85 s = alloca(len + 1);
86 memcpy(s, string, len);
87 s[len] = 0;
88
89 /* Parse the number. */
90 errno = 0;
91 num = strtol(s, NULL, 10);
92 if (errno)
93 return;
94
95 *call_number = num;
96 }
97
98 #endif /* DD_UTIL_H */