RecyclerObjectDumper.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. #ifdef PROFILE_RECYCLER_ALLOC
  7. #ifdef RECYCLER_DUMP_OBJECT_GRAPH
  8. class RecyclerObjectDumper
  9. {
  10. public:
  11. typedef bool (*DumpFunction)(type_info const * typeinfo, bool isArray, void * objectAddress);
  12. static void RegisterDumper(type_info const * typeinfo, DumpFunction dumperFunction);
  13. static void DumpObject(type_info const * typeinfo, bool isArray, void * objectAddress);
  14. private:
  15. RecyclerObjectDumper() {}
  16. ~RecyclerObjectDumper();
  17. static RecyclerObjectDumper Instance;
  18. static BOOL EnsureDumpFunctionMap();
  19. typedef JsUtil::BaseDictionary<type_info const *, RecyclerObjectDumper::DumpFunction, NoCheckHeapAllocator> DumpFunctionMap;
  20. static DumpFunctionMap * dumpFunctionMap;
  21. };
  22. template <typename T, RecyclerObjectDumper::DumpFunction dumpFunction>
  23. class AutoRegisterRecyclerObjectDumper
  24. {
  25. public:
  26. static AutoRegisterRecyclerObjectDumper Instance;
  27. private:
  28. AutoRegisterRecyclerObjectDumper()
  29. {
  30. RecyclerObjectDumper::RegisterDumper(&typeid(T), dumpFunction);
  31. }
  32. };
  33. template <typename T, RecyclerObjectDumper::DumpFunction dumpFunction>
  34. AutoRegisterRecyclerObjectDumper<T, dumpFunction> AutoRegisterRecyclerObjectDumper<T, dumpFunction>::Instance;
  35. void DumpRecyclerObjectGraph();
  36. #define AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(T, func) template class AutoRegisterRecyclerObjectDumper<T, func>;
  37. #else
  38. #define AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(T, func)
  39. #endif
  40. #else
  41. #define AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(T, func)
  42. #endif