1 | // Licensed to the .NET Foundation under one or more agreements. |
2 | // The .NET Foundation licenses this file to you under the MIT license. |
3 | // See the LICENSE file in the project root for more information. |
4 | // ============================================================ |
5 | // |
6 | // DebugLog.hpp |
7 | // |
8 | |
9 | |
10 | // |
11 | // Defines the DebugLog class |
12 | // |
13 | // ============================================================ |
14 | |
15 | #ifndef __BINDER__DEBUG_LOG_HPP__ |
16 | #define __BINDER__DEBUG_LOG_HPP__ |
17 | |
18 | #include "bindertypes.hpp" |
19 | #include "variables.hpp" |
20 | |
21 | namespace BINDER_SPACE |
22 | { |
23 | |
24 | // When defined at the top of a source file, DISABLE_BINDER_DEBUG_LOGGING will cause |
25 | // binder debug logging to be disabled only in the scope of that file by defining all the |
26 | // binder logging macros as NOPs. |
27 | |
28 | #if defined(BINDER_DEBUG_LOG) && !defined(DISABLE_BINDER_DEBUG_LOGGING) |
29 | |
30 | #define BINDER_LOG_STARTUP() \ |
31 | IF_FAIL_GO(DebugLog::Startup()); |
32 | |
33 | #define BINDER_LOG_LOCK() \ |
34 | CRITSEC_Holder logLock(g_BinderVariables->m_logCS); |
35 | |
36 | #define BINDER_LOG_ENTER(scope) \ |
37 | DebugLog::Enter(scope); |
38 | |
39 | #define BINDER_LOG_LEAVE(scope) \ |
40 | DebugLog::Leave(scope); |
41 | |
42 | #define BINDER_LOG_LEAVE_HR(scope, hr) \ |
43 | DebugLog::LeaveHR(scope, hr); |
44 | |
45 | #define BINDER_LOG_LEAVE_BOOL(scope, fResult) \ |
46 | DebugLog::LeaveBool(scope, fResult); |
47 | |
48 | #define BINDER_LOG(comment) \ |
49 | DebugLog::Log(comment); |
50 | |
51 | #define BINDER_LOG_STRING(comment, value) \ |
52 | DebugLog::Log(comment, value); |
53 | |
54 | #define BINDER_LOG_HRESULT(comment, hr) \ |
55 | DebugLog::Log(comment, hr); |
56 | |
57 | #define BINDER_LOG_ASSEMBLY_NAME(comment, assemblyName) \ |
58 | DebugLog::Log(comment, assemblyName); |
59 | |
60 | #define BINDER_LOG_I_ASSEMBLY_NAME(comment, assemblyName) \ |
61 | DebugLog::Log(comment, assemblyName); |
62 | |
63 | #define BINDER_LOG_POINTER(comment, pData) \ |
64 | DebugLog::Log(comment, (void *) (pData)); |
65 | |
66 | class DebugLog |
67 | { |
68 | public: |
69 | static HRESULT Startup(); |
70 | |
71 | static void Enter(/* in */ WCHAR *pwzScope); |
72 | static void Leave(/* in */ WCHAR *pwzScope); |
73 | static void LeaveHR(/* in */ WCHAR *pwzScope, |
74 | /* in */ HRESULT hrLog); |
75 | static void LeaveBool(/* in */ WCHAR *pwzScope, |
76 | /* in */ BOOL fResult); |
77 | |
78 | static void Log(/* in */ WCHAR *pwzComment); |
79 | static void Log(/* in */ WCHAR *pwzComment, |
80 | /* in */ SString &value); |
81 | static void Log(/* in */ WCHAR *pwzComment, |
82 | /* in */ const WCHAR *value); |
83 | static void Log(/* in */ WCHAR *pwzComment, |
84 | /* in */ HRESULT hrLog); |
85 | static void Log(/* in */ WCHAR *pwzComment, |
86 | /* in */ AssemblyName *pAssemblyName); |
87 | static void Log(/* in */ WCHAR *pwzComment, |
88 | /* in */ void *pData); |
89 | protected: |
90 | static void Log(/* in */ SString &info); |
91 | }; |
92 | #else |
93 | class DebugLog |
94 | { |
95 | public: |
96 | static void Empty() {}; |
97 | }; |
98 | |
99 | #define BINDER_LOG_STARTUP() DebugLog::Empty(); |
100 | |
101 | #define BINDER_LOG_LOCK() DebugLog::Empty(); |
102 | |
103 | #define BINDER_LOG_ENTER(scope) DebugLog::Empty(); |
104 | #define BINDER_LOG_LEAVE(scope) DebugLog::Empty(); |
105 | #define BINDER_LOG_LEAVE_HR(scope, hr) DebugLog::Empty(); |
106 | #define BINDER_LOG_LEAVE_BOOL(scope, fResult) DebugLog::Empty(); |
107 | |
108 | #define BINDER_LOG(comment) DebugLog::Empty(); |
109 | #define BINDER_LOG_STRING(comment, value) DebugLog::Empty(); |
110 | #define BINDER_LOG_HRESULT(comment, hr) DebugLog::Empty(); |
111 | #define BINDER_LOG_ASSEMBLY_NAME(comment, assemblyName) DebugLog::Empty(); |
112 | #define BINDER_LOG_I_ASSEMBLY_NAME(comment, assemblyName) DebugLog::Empty(); |
113 | #define BINDER_LOG_POINTER(comment, pData) DebugLog::Empty(); |
114 | |
115 | #endif |
116 | }; |
117 | |
118 | #endif |
119 | |