summaryrefslogtreecommitdiff
path: root/runtime/base/dumpable.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/base/dumpable.h')
-rw-r--r--runtime/base/dumpable.h22
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_