xref: /aosp_15_r20/external/gmmlib/Source/GmmLib/Utility/GmmLog/GmmLog.h (revision 35ffd701415c9e32e53136d61a677a8d0a8fc4a5)
1*35ffd701SAndroid Build Coastguard Worker /*==============================================================================
2*35ffd701SAndroid Build Coastguard Worker Copyright(c) 2017 Intel Corporation
3*35ffd701SAndroid Build Coastguard Worker 
4*35ffd701SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining a
5*35ffd701SAndroid Build Coastguard Worker copy of this software and associated documentation files(the "Software"),
6*35ffd701SAndroid Build Coastguard Worker to deal in the Software without restriction, including without limitation
7*35ffd701SAndroid Build Coastguard Worker the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*35ffd701SAndroid Build Coastguard Worker and / or sell copies of the Software, and to permit persons to whom the
9*35ffd701SAndroid Build Coastguard Worker Software is furnished to do so, subject to the following conditions:
10*35ffd701SAndroid Build Coastguard Worker 
11*35ffd701SAndroid Build Coastguard Worker The above copyright notice and this permission notice shall be included
12*35ffd701SAndroid Build Coastguard Worker in all copies or substantial portions of the Software.
13*35ffd701SAndroid Build Coastguard Worker 
14*35ffd701SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15*35ffd701SAndroid Build Coastguard Worker OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*35ffd701SAndroid Build Coastguard Worker FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17*35ffd701SAndroid Build Coastguard Worker THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*35ffd701SAndroid Build Coastguard Worker OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*35ffd701SAndroid Build Coastguard Worker ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*35ffd701SAndroid Build Coastguard Worker OTHER DEALINGS IN THE SOFTWARE.
21*35ffd701SAndroid Build Coastguard Worker ============================================================================*/
22*35ffd701SAndroid Build Coastguard Worker 
23*35ffd701SAndroid Build Coastguard Worker #pragma once
24*35ffd701SAndroid Build Coastguard Worker 
25*35ffd701SAndroid Build Coastguard Worker #if (_DEBUG || _RELEASE_INTERNAL) && !__GMM_KMD__
26*35ffd701SAndroid Build Coastguard Worker     // Not doing #if__cplusplus >= 201103L check because partial C++11 support may
27*35ffd701SAndroid Build Coastguard Worker     // work for this. We also want to catch C++11 unavailability due to not setting
28*35ffd701SAndroid Build Coastguard Worker     // compiler options.
29*35ffd701SAndroid Build Coastguard Worker     #if (_MSC_VER >= 1800) // VS 2013+
30*35ffd701SAndroid Build Coastguard Worker         #define GMM_LOG_AVAILABLE 1
31*35ffd701SAndroid Build Coastguard Worker     #elif((__clang_major__ > 3) || ((__clang_major__ == 3) && (__clang_minor__ >= 5))) // clang 3.5+
32*35ffd701SAndroid Build Coastguard Worker         #define GMM_LOG_AVAILABLE 1
33*35ffd701SAndroid Build Coastguard Worker     #elif((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8))) // g++ 4.8+
34*35ffd701SAndroid Build Coastguard Worker         #define GMM_LOG_AVAILABLE 1
35*35ffd701SAndroid Build Coastguard Worker     #else
36*35ffd701SAndroid Build Coastguard Worker         #define GMM_LOG_AVAILABLE 0
37*35ffd701SAndroid Build Coastguard Worker         // Print out messages if GmmLog was disabled due to compiler issues
38*35ffd701SAndroid Build Coastguard Worker         #define STRING2(x) #x
39*35ffd701SAndroid Build Coastguard Worker         #define STRING(x) STRING2(x)
40*35ffd701SAndroid Build Coastguard Worker 
41*35ffd701SAndroid Build Coastguard Worker         #if (defined __GNUC__)
42*35ffd701SAndroid Build Coastguard Worker             #pragma message "Detected g++ " STRING(__GNUC__) "." STRING(__GNUC_MINOR__) ". Minimum compiler version required for GmmLog is GCC 4.8.1. Disabling GmmLog."
43*35ffd701SAndroid Build Coastguard Worker         #elif (defined __clang__)
44*35ffd701SAndroid Build Coastguard Worker             #pragma message "Detected clang " STRING(__clang_major__) "." STRING(__clang_minor__) ". Minimum compiler version required for GmmLog is clang 3.5. Disabling GmmLog."
45*35ffd701SAndroid Build Coastguard Worker         #elif (defined _MSC_VER)
46*35ffd701SAndroid Build Coastguard Worker             #pragma message("Detected MSVC++ version " STRING(_MSC_VER) ". Minimum compiler version required for GmmLog is MSVC++ 1800. Disabling GmmLog")
47*35ffd701SAndroid Build Coastguard Worker         #else
48*35ffd701SAndroid Build Coastguard Worker             #pragma message "Unknown compiler. Disabling GmmLog."
49*35ffd701SAndroid Build Coastguard Worker         #endif
50*35ffd701SAndroid Build Coastguard Worker 
51*35ffd701SAndroid Build Coastguard Worker         #undef STRING2
52*35ffd701SAndroid Build Coastguard Worker         #undef STRING
53*35ffd701SAndroid Build Coastguard Worker     #endif
54*35ffd701SAndroid Build Coastguard Worker #elif (_DEBUG || _RELEASE_INTERNAL) && __GMM_KMD__ && _WIN32
55*35ffd701SAndroid Build Coastguard Worker #define GMM_KMD_LOG_AVAILABLE 1
56*35ffd701SAndroid Build Coastguard Worker 
57*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
58*35ffd701SAndroid Build Coastguard Worker /// GMM_KMD_LOG
59*35ffd701SAndroid Build Coastguard Worker /// Gmm logging macro to log a message in KMD mode. Exmaple:
60*35ffd701SAndroid Build Coastguard Worker ///     GMM_KMD_LOG("Math Addition: %d + %d = %d \r\n", 1, 1, 2);
61*35ffd701SAndroid Build Coastguard Worker /////////////////////////////////////////////////////////////////////////////////////
62*35ffd701SAndroid Build Coastguard Worker #define GMM_KMD_LOG(message, ...)                                                                   \
63*35ffd701SAndroid Build Coastguard Worker         {                                                                                           \
64*35ffd701SAndroid Build Coastguard Worker             DWORD CurrentProcessId = (DWORD) (ULONG_PTR)PsGetCurrentProcessId();                    \
65*35ffd701SAndroid Build Coastguard Worker             const WCHAR *format = L"%s%d.txt";                                                      \
66*35ffd701SAndroid Build Coastguard Worker             WCHAR FileName[] = L"C:\\Intel\\IGfx\\GmmKmd_Proc_";                                    \
67*35ffd701SAndroid Build Coastguard Worker             WCHAR FullFileName[KM_FILENAME_LENGTH];                                                 \
68*35ffd701SAndroid Build Coastguard Worker                                                                                                     \
69*35ffd701SAndroid Build Coastguard Worker             KmGenerateLogFileName(&FullFileName[0], format, FileName, CurrentProcessId);            \
70*35ffd701SAndroid Build Coastguard Worker                                                                                                     \
71*35ffd701SAndroid Build Coastguard Worker             KM_FILE_IO_OBJ *pGmmKmdLog = KmFileOpen(pHwDevExt, FullFileName, false, false, true);   \
72*35ffd701SAndroid Build Coastguard Worker             if (pGmmKmdLog != NULL)                                                                 \
73*35ffd701SAndroid Build Coastguard Worker             {                                                                                       \
74*35ffd701SAndroid Build Coastguard Worker                 KmFilePrintf(pGmmKmdLog, message, __VA_ARGS__);                                     \
75*35ffd701SAndroid Build Coastguard Worker                 KmFileClose(pGmmKmdLog, false);                                                     \
76*35ffd701SAndroid Build Coastguard Worker             }                                                                                       \
77*35ffd701SAndroid Build Coastguard Worker         }                                                                                           \
78*35ffd701SAndroid Build Coastguard Worker 
79*35ffd701SAndroid Build Coastguard Worker #else // else if Release driver || KMD
80*35ffd701SAndroid Build Coastguard Worker     #define GMM_LOG_AVAILABLE 0
81*35ffd701SAndroid Build Coastguard Worker #endif
82*35ffd701SAndroid Build Coastguard Worker 
83*35ffd701SAndroid Build Coastguard Worker #if GMM_LOG_AVAILABLE
84*35ffd701SAndroid Build Coastguard Worker 
85*35ffd701SAndroid Build Coastguard Worker typedef enum GmmLogLevel
86*35ffd701SAndroid Build Coastguard Worker {
87*35ffd701SAndroid Build Coastguard Worker     Off = 0,
88*35ffd701SAndroid Build Coastguard Worker     Trace,
89*35ffd701SAndroid Build Coastguard Worker     Info,
90*35ffd701SAndroid Build Coastguard Worker     Error, // default
91*35ffd701SAndroid Build Coastguard Worker     Critical,
92*35ffd701SAndroid Build Coastguard Worker }GmmLogLevel;
93*35ffd701SAndroid Build Coastguard Worker 
94*35ffd701SAndroid Build Coastguard Worker #ifdef __cplusplus
95*35ffd701SAndroid Build Coastguard Worker 
96*35ffd701SAndroid Build Coastguard Worker #include <iostream>
97*35ffd701SAndroid Build Coastguard Worker 
98*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_FILE_SIZE         1024 * 1024 * 5   // Once log reaches this size, it will start in new file
99*35ffd701SAndroid Build Coastguard Worker #define GMM_ROTATE_FILE_NUMBER    3                 // Once log is full, it'll save old log with .1/.2/.3 in name, and then start with .1
100*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_MASSAGE_MAX_SIZE  1024
101*35ffd701SAndroid Build Coastguard Worker #define GMM_LOGGER_NAME           "gmm_logger"
102*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_FILENAME          "gmm_log"
103*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_TAG               "GmmLib"
104*35ffd701SAndroid Build Coastguard Worker #define GMM_UNKNOWN_PROCESS       "Unknown_Proc"
105*35ffd701SAndroid Build Coastguard Worker #define GMM_PREFIX_STR            "INTC GMM SPD: "
106*35ffd701SAndroid Build Coastguard Worker 
107*35ffd701SAndroid Build Coastguard Worker #if _WIN32
108*35ffd701SAndroid Build Coastguard Worker     #define GMM_LOG_REG_KEY_SUB_PATH  "SOFTWARE\\Intel\\IGFX\\GMMLOG\\"
109*35ffd701SAndroid Build Coastguard Worker     #define GMM_LOG_TO_FILE           "LogToFile"
110*35ffd701SAndroid Build Coastguard Worker     #define GMM_LOG_LEVEL_REGKEY      "LogLevel" // GmmLogLevel
111*35ffd701SAndroid Build Coastguard Worker #endif //#if _WIN32
112*35ffd701SAndroid Build Coastguard Worker 
113*35ffd701SAndroid Build Coastguard Worker extern "C" void GmmLibLogging(GmmLogLevel Level, const char* str, ...);
114*35ffd701SAndroid Build Coastguard Worker 
115*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_TRACE(message, ...) GmmLibLogging(Trace, message, ##__VA_ARGS__)
116*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_TRACE_IF(expression, message, ...)  if(expression) { GmmLibLogging(Trace, message, ##__VA_ARGS__);}
117*35ffd701SAndroid Build Coastguard Worker 
118*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_INFO(message, ...) GmmLibLogging(Info, message, ##__VA_ARGS__)
119*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_INFO_IF(expression, message, ...)  if(expression) { GmmLibLogging(Info, message, ##__VA_ARGS__);}
120*35ffd701SAndroid Build Coastguard Worker 
121*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_ERROR(message, ...) GmmLibLogging(Error, message, ##__VA_ARGS__)
122*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_ERROR_IF(expression, message, ...)  if(expression) { GmmLibLogging(Error, message, ##__VA_ARGS__);}
123*35ffd701SAndroid Build Coastguard Worker 
124*35ffd701SAndroid Build Coastguard Worker #else // else C
125*35ffd701SAndroid Build Coastguard Worker 
126*35ffd701SAndroid Build Coastguard Worker // Fwd Declarations of C-wrapper functions used for Logging
127*35ffd701SAndroid Build Coastguard Worker void GmmLibLogging(GmmLogLevel Level, const char* str, ...);
128*35ffd701SAndroid Build Coastguard Worker 
129*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_TRACE(message, ...) GmmLibLogging(Trace, message, ##__VA_ARGS__)
130*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_TRACE_IF(expression, message, ...)  if(expression) { GmmLibLogging(Trace, message, ##__VA_ARGS__);}
131*35ffd701SAndroid Build Coastguard Worker 
132*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_INFO(message, ...) GmmLibLogging(Info, message, ##__VA_ARGS__)
133*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_INFO_IF(expression, message, ...)  if(expression) { GmmLibLogging(Info, message, ##__VA_ARGS__);}
134*35ffd701SAndroid Build Coastguard Worker 
135*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_ERROR(message, ...) GmmLibLogging(Error, message, ##__VA_ARGS__)
136*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_ERROR_IF(expression, message, ...)  if(expression) { GmmLibLogging(Error, message, ##__VA_ARGS__);}
137*35ffd701SAndroid Build Coastguard Worker 
138*35ffd701SAndroid Build Coastguard Worker #endif //#ifdef __cplusplus
139*35ffd701SAndroid Build Coastguard Worker 
140*35ffd701SAndroid Build Coastguard Worker #else // else Gmm Log not available
141*35ffd701SAndroid Build Coastguard Worker 
142*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_TRACE(message, ...)
143*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_TRACE_IF(expression, message, ...)
144*35ffd701SAndroid Build Coastguard Worker 
145*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_INFO(message, ...)
146*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_INFO_IF(expression, message, ...)
147*35ffd701SAndroid Build Coastguard Worker 
148*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_ERROR(message, ...)
149*35ffd701SAndroid Build Coastguard Worker #define GMM_LOG_ERROR_IF(expression, message, ...)
150*35ffd701SAndroid Build Coastguard Worker 
151*35ffd701SAndroid Build Coastguard Worker #endif //#if _WIN32
152*35ffd701SAndroid Build Coastguard Worker 
153*35ffd701SAndroid Build Coastguard Worker #if GMM_KMD_LOG_AVAILABLE
154*35ffd701SAndroid Build Coastguard Worker #else
155*35ffd701SAndroid Build Coastguard Worker 
156*35ffd701SAndroid Build Coastguard Worker #define GMM_KMD_LOG(message, ...)
157*35ffd701SAndroid Build Coastguard Worker 
158*35ffd701SAndroid Build Coastguard Worker #endif
159