diff options
| author | 2017-06-21 22:45:43 +0000 | |
|---|---|---|
| committer | 2017-06-21 22:45:45 +0000 | |
| commit | 7888b59b4542e15dd061047e4cb34f795cc2354c (patch) | |
| tree | 7f35e0e88850d91fd108ea3816078d50c9a4706a /runtime/base/logging.h | |
| parent | 7506c70e2e68c2a012b581601c4fe3f3c1695e56 (diff) | |
| parent | 1c5b42f00933b8f28b447f039fb93a7d9a9db06f (diff) | |
Merge "ART: Add support for runtime debug checks"
Diffstat (limited to 'runtime/base/logging.h')
| -rw-r--r-- | runtime/base/logging.h | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/runtime/base/logging.h b/runtime/base/logging.h index 7a9184e07e..d8954e59d0 100644 --- a/runtime/base/logging.h +++ b/runtime/base/logging.h @@ -62,6 +62,43 @@ struct LogVerbosity { // Global log verbosity setting, initialized by InitLogging. extern LogVerbosity gLogVerbosity; +// Runtime debug flags are flags that have a runtime component, that is, their value can be changed. +// This is meant to implement fast vs slow debug builds, in that certain debug flags can be turned +// on and off. To that effect, expose two macros to help implement and globally drive these flags: +// +// In the header, declare a (class) flag like this: +// +// class C { +// DECLARE_RUNTIME_DEBUG_FLAG(kFlag); +// }; +// +// This will declare a flag kFlag that is a constexpr false in release builds, and a static field +// in debug builds. Usage is than uniform as C::kFlag. +// +// In the cc file, define the flag like this: +// +// DEFINE_RUNTIME_DEBUG_FLAG(C, kFlag); +// +// This will define the static storage, as necessary, and register the flag with the runtime +// infrastructure to toggle the value. + +#ifdef NDEBUG +#define DECLARE_RUNTIME_DEBUG_FLAG(x) \ + static constexpr bool x = false; +// Note: the static_assert in the following only works for public flags. Fix this when we cross +// the line at some point. +#define DEFINE_RUNTIME_DEBUG_FLAG(C, x) \ + static_assert(!C::x, "Unexpected enabled flag in release build"); +#else +#define DECLARE_RUNTIME_DEBUG_FLAG(x) \ + static bool x; +#define DEFINE_RUNTIME_DEBUG_FLAG(C, x) \ + bool C::x = RegisterRuntimeDebugFlag(&C::x); +#endif // NDEBUG + +bool RegisterRuntimeDebugFlag(bool* runtime_debug_flag); +void SetRuntimeDebugFlagsEnabled(bool enabled); + // 0 if not abort, non-zero if an abort is in progress. Used on fatal exit to prevents recursive // aborts. Global declaration allows us to disable some error checking to ensure fatal shutdown // makes forward progress. |