summaryrefslogtreecommitdiffstats
path: root/dom/media/doctor/DDLogObject.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/doctor/DDLogObject.h')
-rw-r--r--dom/media/doctor/DDLogObject.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/dom/media/doctor/DDLogObject.h b/dom/media/doctor/DDLogObject.h
new file mode 100644
index 0000000000..d16d601eb2
--- /dev/null
+++ b/dom/media/doctor/DDLogObject.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et cindent: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef DDLogObject_h_
+#define DDLogObject_h_
+
+#include "nsString.h"
+
+namespace mozilla {
+
+// DDLogObject identifies a C++ object by its pointer and its class name (as
+// provided in a DDLoggedTypeTrait.)
+// Note that a DDLogObject could have the exact same pointer&type as a previous
+// one, so extra information is needed to distinguish them, see DDLifetime.
+class DDLogObject {
+ public:
+ // Default-initialization with null pointer.
+ DDLogObject() : mTypeName("<unset>"), mPointer(nullptr) {}
+
+ // Construction with given non-null type name and pointer.
+ DDLogObject(const char* aTypeName, const void* aPointer)
+ : mTypeName(aTypeName), mPointer(aPointer) {
+ MOZ_ASSERT(aTypeName);
+ MOZ_ASSERT(aPointer);
+ }
+
+ // Sets this DDLogObject to an actual object.
+ void Set(const char* aTypeName, const void* aPointer) {
+ MOZ_ASSERT(aTypeName);
+ MOZ_ASSERT(aPointer);
+ mTypeName = aTypeName;
+ mPointer = aPointer;
+ }
+
+ // Object pointer, used for identification purposes only.
+ const void* Pointer() const { return mPointer; }
+
+ // Type name. Should only be accessed after non-null pointer initialization.
+ const char* TypeName() const {
+ MOZ_ASSERT(mPointer);
+ return mTypeName;
+ }
+
+ bool operator==(const DDLogObject& a) const {
+ return mPointer == a.mPointer && (!mPointer || mTypeName == a.mTypeName);
+ }
+
+ // Print the type name and pointer, e.g.: "MediaDecoder[136078200]".
+ void AppendPrintf(nsCString& mString) const;
+ nsCString Printf() const;
+
+ private:
+ const char* mTypeName;
+ const void* mPointer;
+};
+
+} // namespace mozilla
+
+#endif // DDLogObject_h_