Changeset 143175 in webkit
- Timestamp:
- Feb 18, 2013 1:54:33 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r143174 r143175 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-18 Sheriff Bot <webkit.review.bot@gmail.com> 2 31 -
trunk/Source/WebCore/inspector/HeapGraphSerializer.cpp
r142795 r143175 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
r142795 r143175 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
r142858 r143175 334 334 } 335 335 336 namespace { 337 338 class FrontendWrapper : public HeapGraphSerializer::Client { 339 public: 340 explicit FrontendWrapper(InspectorFrontend::Memory* frontend) : m_frontend(frontend) { } 341 virtual void addNativeSnapshotChunk(PassRefPtr<TypeBuilder::Memory::HeapSnapshotChunk> heapSnapshotChunk) OVERRIDE 342 { 343 m_frontend->addNativeSnapshotChunk(heapSnapshotChunk); 344 } 345 private: 346 InspectorFrontend::Memory* m_frontend; 347 }; 348 349 } 350 336 351 void InspectorMemoryAgent::getProcessMemoryDistributionImpl(bool reportGraph, TypeNameToSizeMap* memoryInfo) 337 352 { 338 353 OwnPtr<HeapGraphSerializer> graphSerializer; 339 if (reportGraph) 340 graphSerializer = adoptPtr(new HeapGraphSerializer(m_frontend)); 354 OwnPtr<FrontendWrapper> frontendWrapper; 355 356 if (reportGraph) { 357 frontendWrapper = adoptPtr(new FrontendWrapper(m_frontend)); 358 graphSerializer = adoptPtr(new HeapGraphSerializer(frontendWrapper.get())); 359 } 360 341 361 MemoryInstrumentationClientImpl memoryInstrumentationClient(graphSerializer.get()); 342 362 m_inspectorClient->getAllocatedObjects(memoryInstrumentationClient.allocatedObjects()); … … 356 376 memoryInstrumentation.addRootObject(graphSerializer.get()); 357 377 graphSerializer->finish(); 378 graphSerializer.release(); // Release it earlier than frontendWrapper 379 frontendWrapper.release(); 358 380 } 359 381 -
trunk/Tools/ChangeLog
r143162 r143175 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-18 Ryosuke Niwa <rniwa@webkit.org> 2 47 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.gyp/TestWebKitAPI.gyp
r139895 r143175 78 78 ], 79 79 'conditions': [ 80 ['component!="shared_library"', { 81 'sources': [ 82 '../Tests/WebCore/HeapGraphSerializerTest.cpp' 83 ], 84 }], 80 85 ['inside_chromium_build==1 and component=="shared_library"', { 81 86 'sources': [
Note: See TracChangeset
for help on using the changeset viewer.