| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef WebProcessMemoryDump_h |
| #define WebProcessMemoryDump_h |
| |
| #include "WebCommon.h" |
| #include "WebMemoryAllocatorDump.h" |
| #include "WebMemoryDumpProvider.h" |
| #include "WebString.h" |
| |
| class SkTraceMemoryDump; |
| |
| namespace blink { |
| |
| // A container which holds all the dumps for the various allocators for a given |
| // process. Embedders of WebMemoryDumpProvider are expected to populate a |
| // WebProcessMemoryDump instance with the stats of their allocators. |
| class BLINK_PLATFORM_EXPORT WebProcessMemoryDump { |
| public: |
| virtual ~WebProcessMemoryDump(); |
| |
| // Creates a new MemoryAllocatorDump with the given name and returns the |
| // empty object back to the caller. |absoluteName| uniquely identifies the |
| // dump within the scope of a ProcessMemoryDump. It is possible to express |
| // nesting by means of a slash-separated path naming (e.g., |
| // "allocator_name/arena_1/subheap_X"). |
| // |guid| is an optional identifier, unique among all processes within the |
| // scope of a global dump. This is only relevant when using |
| // addOwnershipEdge(). If omitted, it will be automatically generated. |
| virtual WebMemoryAllocatorDump* createMemoryAllocatorDump(const WebString& absoluteName, WebMemoryAllocatorDumpGuid guid) |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| return nullptr; |
| } |
| |
| virtual WebMemoryAllocatorDump* createMemoryAllocatorDump(const WebString& absoluteName) |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| return nullptr; |
| } |
| |
| // Gets a previously created MemoryAllocatorDump given its name. |
| virtual WebMemoryAllocatorDump* getMemoryAllocatorDump(const WebString& absoluteName) const |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| return nullptr; |
| } |
| |
| // Removes all the WebMemoryAllocatorDump(s) contained in this instance. |
| // This WebProcessMemoryDump can be safely reused as if it was new once this |
| // method returns. |
| virtual void clear() |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| } |
| |
| // Merges all WebMemoryAllocatorDump(s) contained in |other| inside this |
| // WebProcessMemoryDump, transferring their ownership to this instance. |
| // |other| will be an empty WebProcessMemoryDump after this method returns |
| // and can be reused as if it was new. |
| virtual void takeAllDumpsFrom(WebProcessMemoryDump* other) |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| } |
| |
| // Adds an ownership relationship between two MemoryAllocatorDump(s) with |
| // the semantics: |source| owns |target|, and has the effect of attributing |
| // the memory usage of |target| to |source|. |importance| is optional and |
| // relevant only for the cases of co-ownership, where it acts as a z-index: |
| // the owner with the highest importance will be attributed |target|'s |
| // memory. |
| virtual void addOwnershipEdge(WebMemoryAllocatorDumpGuid source, WebMemoryAllocatorDumpGuid target, int importance) |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| } |
| |
| virtual void addOwnershipEdge(WebMemoryAllocatorDumpGuid source, WebMemoryAllocatorDumpGuid target) |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| } |
| |
| // Utility method to add a suballocation relationship with the following |
| // semantics: |source| is suballocated from |target_node_name|. |
| // This creates a child node of |target_node_name| and adds an ownership |
| // edge between |source| and the new child node. As a result, the UI will |
| // not account the memory of |source| in the target node. |
| virtual void addSuballocation(WebMemoryAllocatorDumpGuid source, const WebString& targetNodeName) |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| } |
| |
| // Returns the SkTraceMemoryDump proxy interface that can be passed to Skia |
| // to dump into this WebProcessMemoryDump. Multiple SkTraceMemoryDump |
| // objects can be created using this method. The created dumpers are owned |
| // by WebProcessMemoryDump and cannot outlive the WebProcessMemoryDump |
| // object owning them. |dumpNamePrefix| is prefix appended to each dump |
| // created by the SkTraceMemoryDump implementation, if the dump should be |
| // placed under different namespace and not "skia". |
| virtual SkTraceMemoryDump* createDumpAdapterForSkia(const WebString& dumpNamePrefix) |
| { |
| BLINK_ASSERT_NOT_REACHED(); |
| return nullptr; |
| } |
| }; |
| |
| } // namespace blink |
| |
| #endif // WebProcessMemoryDump_h |