Changeset 142747 in webkit
- Timestamp:
- Feb 13, 2013 7:30:22 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r142746 r142747 1 2013-02-13 Ilya Tikhonovsky <loislo@chromium.org> 2 3 Web Inspector: Native Memory Instrumentation: reportLeaf method doesn't report the leaf node properly. 4 https://bugs.webkit.org/show_bug.cgi?id=109554 5 6 In some cases leaves have no pointer so with the old schema we can't generate nodeId for them because we 7 can't insert 0 into hashmap. It happens when we call addPrivateBuffer method. 8 9 Drive by fix: I introduced a client interface for the HeapGraphSerializer. 10 It helps me to do the tests for the serializer. 11 12 Reviewed by Yury Semikhatsky. 13 14 It is covered by newly added tests in TestWebKitAPI. 15 16 * inspector/HeapGraphSerializer.cpp: 17 (WebCore::HeapGraphSerializer::HeapGraphSerializer): 18 (WebCore::HeapGraphSerializer::pushUpdate): 19 (WebCore::HeapGraphSerializer::reportNode): 20 (WebCore::HeapGraphSerializer::toNodeId): 21 (WebCore::HeapGraphSerializer::addRootNode): 22 * inspector/HeapGraphSerializer.h: 23 (HeapGraphSerializer): 24 (Client): 25 (WebCore::HeapGraphSerializer::Client::~Client): 26 * inspector/InspectorMemoryAgent.cpp: 27 (WebCore): 28 (WebCore::InspectorMemoryAgent::getProcessMemoryDistributionImpl): 29 1 30 2013-02-13 Yury Semikhatsky <yurys@chromium.org> 2 31 -
trunk/Source/WebCore/inspector/HeapGraphSerializer.cpp
r142637 r142747 44 44 namespace WebCore { 45 45 46 HeapGraphSerializer::HeapGraphSerializer( InspectorFrontend::Memory* frontend)47 : m_ frontend(frontend)46 HeapGraphSerializer::HeapGraphSerializer(Client* client) 47 : m_client(client) 48 48 , m_strings(Strings::create()) 49 49 , m_edges(Edges::create()) … … 51 51 , m_nodes(Nodes::create()) 52 52 , m_baseToRealNodeIdMap(BaseToRealNodeIdMap::create()) 53 { 54 ASSERT(m_frontend); 53 , m_leafCount(0) 54 { 55 ASSERT(m_client); 55 56 m_strings->addItem(String()); // An empty string with 0 index. 56 57 … … 92 93 .setBaseToRealNodeId(m_baseToRealNodeIdMap.release()); 93 94 94 m_ frontend->addNativeSnapshotChunk(chunk);95 m_client->addNativeSnapshotChunk(chunk.release()); 95 96 96 97 m_strings = Strings::create(); … … 102 103 void HeapGraphSerializer::reportNode(const WTF::MemoryObjectInfo& info) 103 104 { 105 ASSERT(info.reportedPointer()); 104 106 reportNodeImpl(info, m_nodeEdgesCount); 105 107 m_nodeEdgesCount = 0; … … 183 185 int HeapGraphSerializer::toNodeId(const void* to) 184 186 { 185 ASSERT(to); 186 Address2NodeId::AddResult result = m_address2NodeIdMap.add(to, m_address2NodeIdMap.size()); 187 if (!to) 188 return s_firstNodeId + m_address2NodeIdMap.size() + m_leafCount++; 189 190 Address2NodeId::AddResult result = m_address2NodeIdMap.add(to, s_firstNodeId + m_leafCount + m_address2NodeIdMap.size()); 187 191 return result.iterator->value; 188 192 } … … 195 199 m_nodes->addItem(addString("Root")); 196 200 m_nodes->addItem(0); 197 m_nodes->addItem( m_address2NodeIdMap.size());201 m_nodes->addItem(s_firstNodeId + m_address2NodeIdMap.size() + m_leafCount); 198 202 m_nodes->addItem(0); 199 203 m_nodes->addItem(m_roots.size()); -
trunk/Source/WebCore/inspector/HeapGraphSerializer.h
r142637 r142747 44 44 namespace WebCore { 45 45 46 class HeapGraphEdge;47 class HeapGraphNode;48 class InspectorObject;49 50 46 class HeapGraphSerializer { 51 47 WTF_MAKE_NONCOPYABLE(HeapGraphSerializer); 52 48 public: 53 explicit HeapGraphSerializer(InspectorFrontend::Memory*); 49 50 class Client { 51 public: 52 virtual ~Client() { } 53 virtual void addNativeSnapshotChunk(PassRefPtr<TypeBuilder::Memory::HeapSnapshotChunk>) = 0; 54 }; 55 56 explicit HeapGraphSerializer(Client*); 54 57 ~HeapGraphSerializer(); 55 58 void reportNode(const WTF::MemoryObjectInfo&); … … 74 77 int reportNodeImpl(const WTF::MemoryObjectInfo&, int edgesCount); 75 78 76 InspectorFrontend::Memory* m_frontend;79 Client* m_client; 77 80 78 81 typedef HashMap<String, int> StringMap; … … 101 104 size_t m_edgeTypes[WTF::LastMemberTypeEntry]; 102 105 int m_unknownClassNameId; 106 int m_leafCount; 107 108 static const int s_firstNodeId = 1; 103 109 }; 104 110 -
trunk/Source/WebCore/inspector/InspectorMemoryAgent.cpp
r142637 r142747 331 331 } 332 332 333 namespace { 334 335 class FrontendWrapper : public HeapGraphSerializer::Client { 336 public: 337 explicit FrontendWrapper(InspectorFrontend::Memory* frontend) : m_frontend(frontend) { } 338 virtual void addNativeSnapshotChunk(PassRefPtr<TypeBuilder::Memory::HeapSnapshotChunk> heapSnapshotChunk) OVERRIDE 339 { 340 m_frontend->addNativeSnapshotChunk(heapSnapshotChunk); 341 } 342 private: 343 InspectorFrontend::Memory* m_frontend; 344 }; 345 346 } 347 333 348 void InspectorMemoryAgent::getProcessMemoryDistributionImpl(bool reportGraph, TypeNameToSizeMap* memoryInfo) 334 349 { 335 350 OwnPtr<HeapGraphSerializer> graphSerializer; 336 if (reportGraph) 337 graphSerializer = adoptPtr(new HeapGraphSerializer(m_frontend)); 351 OwnPtr<FrontendWrapper> frontendWrapper; 352 353 if (reportGraph) { 354 frontendWrapper = adoptPtr(new FrontendWrapper(m_frontend)); 355 graphSerializer = adoptPtr(new HeapGraphSerializer(frontendWrapper.get())); 356 } 357 338 358 MemoryInstrumentationClientImpl memoryInstrumentationClient(graphSerializer.get()); 339 359 m_inspectorClient->getAllocatedObjects(memoryInstrumentationClient.allocatedObjects()); … … 353 373 memoryInstrumentation.addRootObject(graphSerializer.get()); 354 374 graphSerializer->finish(); 375 graphSerializer.release(); // Release it earlier than frontendWrapper 376 frontendWrapper.release(); 355 377 } 356 378 -
trunk/Tools/ChangeLog
r142736 r142747 1 2013-02-13 Ilya Tikhonovsky <loislo@chromium.org> 2 3 Web Inspector: Native Memory Instrumentation: reportLeaf method doesn't report the leaf node properly. 4 https://bugs.webkit.org/show_bug.cgi?id=109554 5 6 In some cases leaves have no pointer so with the old schema we can't generate nodeId for them because we 7 can't insert 0 into hashmap. It happens when we call addPrivateBuffer method. 8 9 Drive by fix: I introduced a client interface for the HeapGraphSerializer. 10 It helps me to do the tests for the serializer. 11 12 Reviewed by Yury Semikhatsky. 13 14 It is covered by newly added tests in TestWebKitAPI. 15 16 * TestWebKitAPI/TestWebKitAPI.gypi: 17 * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp: Added. 18 (TestWebKitAPI): 19 (HeapGraphReceiver): 20 (TestWebKitAPI::HeapGraphReceiver::HeapGraphReceiver): 21 (TestWebKitAPI::HeapGraphReceiver::printGraph): 22 (TestWebKitAPI::HeapGraphReceiver::dumpNodes): 23 (TestWebKitAPI::HeapGraphReceiver::dumpEdges): 24 (TestWebKitAPI::HeapGraphReceiver::dumpBaseToRealNodeId): 25 (TestWebKitAPI::HeapGraphReceiver::dumpStrings): 26 (TestWebKitAPI::HeapGraphReceiver::serializer): 27 (TestWebKitAPI::HeapGraphReceiver::chunkPart): 28 (TestWebKitAPI::HeapGraphReceiver::dumpPart): 29 (TestWebKitAPI::HeapGraphReceiver::stringValue): 30 (TestWebKitAPI::HeapGraphReceiver::intValue): 31 (TestWebKitAPI::HeapGraphReceiver::nodeToString): 32 (TestWebKitAPI::HeapGraphReceiver::edgeToString): 33 (TestWebKitAPI::HeapGraphReceiver::printNode): 34 (Helper): 35 (TestWebKitAPI::Helper::Helper): 36 (TestWebKitAPI::Helper::addNode): 37 (TestWebKitAPI::Helper::addEdge): 38 (TestWebKitAPI::Helper::done): 39 (Object): 40 (TestWebKitAPI::Helper::Object::Object): 41 (TestWebKitAPI::TEST): 42 (Owner): 43 (TestWebKitAPI::Owner::Owner): 44 (TestWebKitAPI::Owner::reportMemoryUsage): 45 1 46 2013-02-13 Gyuyoung Kim <gyuyoung.kim@samsung.com> 2 47 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.gypi
r142637 r142747 32 32 'variables': { 33 33 'TestWebKitAPI_files': [ 34 'Tests/WebCore/HeapGraphSerializerTest.cpp', 34 35 'Tests/WebCore/LayoutUnit.cpp', 35 36 'Tests/WTF/AtomicString.cpp',
Note: See TracChangeset
for help on using the changeset viewer.