diff options
Diffstat (limited to 'runtime/base/dumpable.h')
-rw-r--r-- | runtime/base/dumpable.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/runtime/base/dumpable.h b/runtime/base/dumpable.h index 9bc4089163..9ef8d69b48 100644 --- a/runtime/base/dumpable.h +++ b/runtime/base/dumpable.h @@ -20,6 +20,7 @@ #include <ostream> #include "base/macros.h" +#include "base/mutex.h" namespace art { @@ -50,6 +51,27 @@ std::ostream& operator<<(std::ostream& os, const Dumpable<T>& rhs) { return os; } +template<typename T> +class MutatorLockedDumpable { + public: + explicit MutatorLockedDumpable(T& value) REQUIRES_SHARED(Locks::mutator_lock_) : value_(value) {} + + void Dump(std::ostream& os) const REQUIRES_SHARED(Locks::mutator_lock_) { + value_.Dump(os); + } + + private: + const T& value_; + + DISALLOW_COPY_AND_ASSIGN(MutatorLockedDumpable); +}; + +template<typename T> +std::ostream& operator<<(std::ostream& os, const MutatorLockedDumpable<T>& rhs) + // TODO: should be REQUIRES_SHARED(Locks::mutator_lock_) however annotalysis + // currently fails for this. + NO_THREAD_SAFETY_ANALYSIS; + } // namespace art #endif // ART_RUNTIME_BASE_DUMPABLE_H_ |