memory_dump_map_converter.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef SERVICES_RESOURCE_COORDINATOR_MEMORY_INSTRUMENTATION_MEMORY_DUMP_MAP_CONVERTER_H_
  5. #define SERVICES_RESOURCE_COORDINATOR_MEMORY_INSTRUMENTATION_MEMORY_DUMP_MAP_CONVERTER_H_
  6. #include <map>
  7. #include <memory>
  8. #include <vector>
  9. #include "base/trace_event/process_memory_dump.h"
  10. #include "third_party/perfetto/include/perfetto/ext/trace_processor/importers/memory_tracker/graph_processor.h"
  11. namespace memory_instrumentation {
  12. // Converts the Chromium MemoryDumpMap to the corresponding defined in Perfetto
  13. // type RawMemoryNodeMap.
  14. //
  15. // Example usage:
  16. //
  17. // {
  18. // base::trace_event::ProcessMemoryDump pmd;
  19. //
  20. // MemoryDumpMapConverter converter;
  21. // perfetto::trace_processor::GraphProcessor::RawMemoryNodeMap
  22. // perfettoNodeMap = converter.Convert(pmd);
  23. // }
  24. class MemoryDumpMapConverter {
  25. public:
  26. using MemoryDumpMap =
  27. std::map<base::ProcessId, const base::trace_event::ProcessMemoryDump*>;
  28. using PerfettoProcessMemoryNode =
  29. perfetto::trace_processor::RawProcessMemoryNode;
  30. MemoryDumpMapConverter();
  31. ~MemoryDumpMapConverter();
  32. MemoryDumpMapConverter(const MemoryDumpMapConverter&) = delete;
  33. void operator=(const MemoryDumpMapConverter&) = delete;
  34. perfetto::trace_processor::GraphProcessor::RawMemoryNodeMap Convert(
  35. const MemoryDumpMap& input);
  36. private:
  37. std::unique_ptr<MemoryDumpMapConverter::PerfettoProcessMemoryNode>
  38. ConvertProcessMemoryDump(const base::trace_event::ProcessMemoryDump& input);
  39. perfetto::trace_processor::LevelOfDetail ConvertLevelOfDetail(
  40. const base::trace_event::MemoryDumpLevelOfDetail& input) const;
  41. PerfettoProcessMemoryNode::MemoryNodesMap ConvertAllocatorDumps(
  42. const base::trace_event::ProcessMemoryDump& input) const;
  43. std::unique_ptr<perfetto::trace_processor::RawMemoryGraphNode>
  44. ConvertMemoryAllocatorDump(
  45. const base::trace_event::MemoryAllocatorDump& input) const;
  46. void CopyAndConvertAllocatorDumpFlags(
  47. const base::trace_event::MemoryAllocatorDump& input,
  48. perfetto::trace_processor::RawMemoryGraphNode* output) const;
  49. std::vector<perfetto::trace_processor::RawMemoryGraphNode::MemoryNodeEntry>
  50. ConvertAllocatorDumpEntries(
  51. const base::trace_event::MemoryAllocatorDump& input) const;
  52. PerfettoProcessMemoryNode::AllocatorNodeEdgesMap ConvertAllocatorDumpEdges(
  53. const base::trace_event::ProcessMemoryDump& input) const;
  54. std::unique_ptr<perfetto::trace_processor::MemoryGraphEdge>
  55. ConvertAllocatorDumpEdge(
  56. const base::trace_event::ProcessMemoryDump::MemoryAllocatorDumpEdge&
  57. input) const;
  58. perfetto::trace_processor::MemoryAllocatorNodeId
  59. ConvertMemoryAllocatorDumpGuid(
  60. const base::trace_event::MemoryAllocatorDumpGuid& input) const;
  61. };
  62. } // namespace memory_instrumentation
  63. #endif // SERVICES_RESOURCE_COORDINATOR_MEMORY_INSTRUMENTATION_MEMORY_DUMP_MAP_CONVERTER_H_