Title: [144527] trunk
Revision
144527
Author
[email protected]
Date
2013-03-01 21:23:18 -0800 (Fri, 01 Mar 2013)

Log Message

Web Inspector: Native Memory Instrumentation: do not visit raw pointers by default.
https://bugs.webkit.org/show_bug.cgi?id=110943

Reviewed by Yury Semikhatsky.

Unfortunately in many cases raw pointer may point to an object that has been deleted.
There is no working solution to solve this problem in general.
It could be solved only on case by case basis.

Source/WebCore:

* inspector/HeapGraphSerializer.cpp:
(WebCore::HeapGraphSerializer::HeapGraphSerializer):
(WebCore::HeapGraphSerializer::reportLeaf):
* loader/cache/MemoryCache.cpp:
(WebCore::MemoryCache::reportMemoryUsage):
* platform/graphics/BitmapImage.cpp:
(WebCore::FrameData::reportMemoryUsage):
* platform/graphics/skia/MemoryInstrumentationSkia.cpp:
(reportMemoryUsage):

Source/WTF:

* wtf/MemoryInstrumentation.h:
(WTF::MemoryInstrumentation::addObject):
(WTF::MemoryInstrumentation::MemberTypeTraits::addObject):
(WTF::MemoryClassInfo::addMember):
(WTF::MemoryInstrumentation::addObjectImpl):
* wtf/MemoryInstrumentationString.h:
(WTF::reportMemoryUsage):

Tools:

* TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:
* TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:
(TestWebKitAPI::TEST):

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (144526 => 144527)


--- trunk/Source/WTF/ChangeLog	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Source/WTF/ChangeLog	2013-03-02 05:23:18 UTC (rev 144527)
@@ -1,3 +1,22 @@
+2013-03-01  Ilya Tikhonovsky  <[email protected]>
+
+        Web Inspector: Native Memory Instrumentation: do not visit raw pointers by default.
+        https://bugs.webkit.org/show_bug.cgi?id=110943
+
+        Reviewed by Yury Semikhatsky.
+
+        Unfortunately in many cases raw pointer may point to an object that has been deleted.
+        There is no working solution to solve this problem in general.
+        It could be solved only on case by case basis.
+
+        * wtf/MemoryInstrumentation.h:
+        (WTF::MemoryInstrumentation::addObject):
+        (WTF::MemoryInstrumentation::MemberTypeTraits::addObject):
+        (WTF::MemoryClassInfo::addMember):
+        (WTF::MemoryInstrumentation::addObjectImpl):
+        * wtf/MemoryInstrumentationString.h:
+        (WTF::reportMemoryUsage):
+
 2013-03-01  Eric Seidel  <[email protected]>
 
         Threaded HTML Parser has an extra copy of every byte from the network

Modified: trunk/Source/WTF/wtf/MemoryInstrumentation.h (144526 => 144527)


--- trunk/Source/WTF/wtf/MemoryInstrumentation.h	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Source/WTF/wtf/MemoryInstrumentation.h	2013-03-02 05:23:18 UTC (rev 144527)
@@ -48,8 +48,7 @@
 enum MemberType {
     PointerMember,
     ReferenceMember,
-    OwnPtrMember,
-    RefPtrMember,
+    RetainingPointer,
     LastMemberTypeEntry
 };
 
@@ -167,7 +166,10 @@
         virtual void callReportMemoryUsage(MemoryObjectInfo*) OVERRIDE;
     };
 
-    template<typename T> void addObject(const T& t, MemoryObjectInfo* ownerObjectInfo, const char* edgeName) { MemberTypeTraits<T>::addObject(this, t, ownerObjectInfo, edgeName); }
+    template<typename T> void addObject(const T& t, MemoryObjectInfo* ownerObjectInfo, const char* edgeName, MemberType memberType)
+    {
+        MemberTypeTraits<T>::addObject(this, t, ownerObjectInfo, edgeName, memberType);
+    }
     void addRawBuffer(const void* buffer, MemoryObjectType ownerObjectType, size_t size, const char* className = 0, const char* edgeName = 0)
     {
         if (!buffer || visited(buffer))
@@ -179,7 +181,7 @@
 
     template<typename T>
     struct MemberTypeTraits { // Default ReferenceMember implementation.
-        static void addObject(MemoryInstrumentation* instrumentation, const T& t, MemoryObjectInfo* ownerObjectInfo, const char* edgeName)
+        static void addObject(MemoryInstrumentation* instrumentation, const T& t, MemoryObjectInfo* ownerObjectInfo, const char* edgeName, MemberType)
         {
             instrumentation->addObjectImpl(&t, ownerObjectInfo, ReferenceMember, edgeName);
         }
@@ -192,9 +194,9 @@
 
     template<typename T>
     struct MemberTypeTraits<T*> { // Custom PointerMember implementation.
-        static void addObject(MemoryInstrumentation* instrumentation, const T* const& t, MemoryObjectInfo* ownerObjectInfo, const char* edgeName)
+        static void addObject(MemoryInstrumentation* instrumentation, const T* const& t, MemoryObjectInfo* ownerObjectInfo, const char* edgeName, MemberType memberType)
         {
-            instrumentation->addObjectImpl(t, ownerObjectInfo, PointerMember, edgeName);
+            instrumentation->addObjectImpl(t, ownerObjectInfo, memberType != LastMemberTypeEntry ? memberType : PointerMember, edgeName);
         }
 
         static void addRootObject(MemoryInstrumentation* instrumentation, const T* const& t, MemoryObjectType objectType)
@@ -237,10 +239,10 @@
         init(pointer, fn<T>(), objectType, actualSize);
     }
 
-    template<typename M> void addMember(const M& member, const char* edgeName = 0)
+    template<typename M> void addMember(const M& member, const char* edgeName = 0, MemberType memberType = LastMemberTypeEntry)
     {
         if (!m_skipMembers)
-            m_memoryInstrumentation->addObject(member, m_memoryObjectInfo, edgeName);
+            m_memoryInstrumentation->addObject(member, m_memoryObjectInfo, edgeName, memberType);
     }
 
     WTF_EXPORT_PRIVATE void addRawBuffer(const void* buffer, size_t, const char* className = 0, const char* edgeName = 0);
@@ -284,6 +286,8 @@
 template<typename T>
 void MemoryInstrumentation::addObjectImpl(const T* object, MemoryObjectInfo* ownerObjectInfo, MemberType memberType, const char* edgeName)
 {
+    if (memberType == PointerMember)
+        return;
     if (memberType == ReferenceMember)
         reportMemoryUsage(object, ownerObjectInfo);
     else {
@@ -301,7 +305,7 @@
 {
     if (memberType == PointerMember && !visited(object))
         countObjectSize(object, getObjectType(ownerObjectInfo), sizeof(*object));
-    addObjectImpl(object->get(), ownerObjectInfo, OwnPtrMember, edgeName);
+    addObjectImpl(object->get(), ownerObjectInfo, RetainingPointer, edgeName);
 }
 
 template<typename T>
@@ -309,7 +313,7 @@
 {
     if (memberType == PointerMember && !visited(object))
         countObjectSize(object, getObjectType(ownerObjectInfo), sizeof(*object));
-    addObjectImpl(object->get(), ownerObjectInfo, RefPtrMember, edgeName);
+    addObjectImpl(object->get(), ownerObjectInfo, RetainingPointer, edgeName);
 }
 
 template<typename T>

Modified: trunk/Source/WTF/wtf/MemoryInstrumentationString.h (144526 => 144527)


--- trunk/Source/WTF/wtf/MemoryInstrumentationString.h	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Source/WTF/wtf/MemoryInstrumentationString.h	2013-03-02 05:23:18 UTC (rev 144527)
@@ -54,7 +54,7 @@
     MemoryClassInfo info(memoryObjectInfo, stringImpl, 0, selfSize);
 
     if (StringImpl* baseString = stringImpl->baseString())
-        info.addMember(baseString, "baseString");
+        info.addMember(baseString, "baseString", RetainingPointer);
     else {
         if (stringImpl->hasOwnedBuffer())
             info.addRawBuffer(buffer, bufferSize, "char[]", "ownedBuffer");
@@ -67,7 +67,7 @@
 inline void reportMemoryUsage(const String* string, MemoryObjectInfo* memoryObjectInfo)
 {
     MemoryClassInfo info(memoryObjectInfo, string);
-    info.addMember(string->impl(), "stringImpl");
+    info.addMember(string->impl(), "stringImpl", RetainingPointer);
 }
 
 inline void reportMemoryUsage(const AtomicString* atomicString, MemoryObjectInfo* memoryObjectInfo)
@@ -84,7 +84,7 @@
 inline void reportMemoryUsage(const CString* cString, MemoryObjectInfo* memoryObjectInfo)
 {
     MemoryClassInfo info(memoryObjectInfo, cString);
-    info.addMember(cString->buffer(), "buffer");
+    info.addMember(cString->buffer(), "buffer", RetainingPointer);
 }
 
 }

Modified: trunk/Source/WebCore/ChangeLog (144526 => 144527)


--- trunk/Source/WebCore/ChangeLog	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Source/WebCore/ChangeLog	2013-03-02 05:23:18 UTC (rev 144527)
@@ -1,3 +1,24 @@
+2013-03-01  Ilya Tikhonovsky  <[email protected]>
+
+        Web Inspector: Native Memory Instrumentation: do not visit raw pointers by default.
+        https://bugs.webkit.org/show_bug.cgi?id=110943
+
+        Reviewed by Yury Semikhatsky.
+
+        Unfortunately in many cases raw pointer may point to an object that has been deleted.
+        There is no working solution to solve this problem in general.
+        It could be solved only on case by case basis.
+
+        * inspector/HeapGraphSerializer.cpp:
+        (WebCore::HeapGraphSerializer::HeapGraphSerializer):
+        (WebCore::HeapGraphSerializer::reportLeaf):
+        * loader/cache/MemoryCache.cpp:
+        (WebCore::MemoryCache::reportMemoryUsage):
+        * platform/graphics/BitmapImage.cpp:
+        (WebCore::FrameData::reportMemoryUsage):
+        * platform/graphics/skia/MemoryInstrumentationSkia.cpp:
+        (reportMemoryUsage):
+
 2013-03-01  Kentaro Hara  <[email protected]>
 
         Style recalculation takes too long when adding whitespace text nodes

Modified: trunk/Source/WebCore/inspector/HeapGraphSerializer.cpp (144526 => 144527)


--- trunk/Source/WebCore/inspector/HeapGraphSerializer.cpp	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Source/WebCore/inspector/HeapGraphSerializer.cpp	2013-03-02 05:23:18 UTC (rev 144527)
@@ -59,7 +59,7 @@
     memset(m_edgeTypes, 0, sizeof(m_edgeTypes));
 
     m_edgeTypes[WTF::PointerMember] = registerTypeString("weak");
-    m_edgeTypes[WTF::OwnPtrMember] = m_edgeTypes[WTF::RefPtrMember] = registerTypeString("property");
+    m_edgeTypes[WTF::RetainingPointer] = registerTypeString("property");
 
     // FIXME: It is used as a magic constant for 'object' node type.
     registerTypeString("object");
@@ -148,7 +148,7 @@
 void HeapGraphSerializer::reportLeaf(const WTF::MemoryObjectInfo& info, const char* edgeName)
 {
     int nodeId = reportNodeImpl(info, 0);
-    reportEdgeImpl(nodeId, edgeName, m_edgeTypes[WTF::OwnPtrMember]);
+    reportEdgeImpl(nodeId, edgeName, m_edgeTypes[WTF::RetainingPointer]);
     pushUpdateIfNeeded();
 }
 

Modified: trunk/Source/WebCore/loader/cache/MemoryCache.cpp (144526 => 144527)


--- trunk/Source/WebCore/loader/cache/MemoryCache.cpp	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Source/WebCore/loader/cache/MemoryCache.cpp	2013-03-02 05:23:18 UTC (rev 144527)
@@ -800,6 +800,10 @@
     info.addMember(m_resources, "resources");
     info.addMember(m_allResources, "allResources");
     info.addMember(m_liveDecodedResources, "liveDecodedResources");
+#if !ENABLE(CACHE_PARTITIONING)
+    for (CachedResourceMap::const_iterator i = m_resources.begin(); i != m_resources.end(); ++i)
+        info.addMember(i->value, "cachedResourceItem", WTF::RetainingPointer);
+#endif
 }
 
 void MemoryCache::setDisabled(bool disabled)

Modified: trunk/Source/WebCore/platform/graphics/BitmapImage.cpp (144526 => 144527)


--- trunk/Source/WebCore/platform/graphics/BitmapImage.cpp	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Source/WebCore/platform/graphics/BitmapImage.cpp	2013-03-02 05:23:18 UTC (rev 144527)
@@ -591,7 +591,7 @@
 #if OS(WINCE) && !PLATFORM(QT)
     info.addRawBuffer(m_frame.get(), m_frameBytes, "NativeImage", "frame");
 #elif USE(SKIA)
-    info.addMember(m_frame, "frame");
+    info.addMember(m_frame, "frame", WTF::RetainingPointer);
 #else
     info.addRawBuffer(m_frame, m_frameBytes, "NativeImage", "frame");
 #endif

Modified: trunk/Source/WebCore/platform/graphics/skia/MemoryInstrumentationSkia.cpp (144526 => 144527)


--- trunk/Source/WebCore/platform/graphics/skia/MemoryInstrumentationSkia.cpp	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Source/WebCore/platform/graphics/skia/MemoryInstrumentationSkia.cpp	2013-03-02 05:23:18 UTC (rev 144527)
@@ -51,11 +51,11 @@
 void reportMemoryUsage(const SkDevice* const& device, WTF::MemoryObjectInfo* memoryObjectInfo)
 {
     WTF::MemoryClassInfo info(memoryObjectInfo, device);
-    info.addMember(const_cast<SkDevice*>(device)->accessBitmap(false), "bitmap");
+    info.addMember(const_cast<SkDevice*>(device)->accessBitmap(false), "bitmap", WTF::RetainingPointer);
 }
 
 void reportMemoryUsage(const SkCanvas* const& canvas, WTF::MemoryObjectInfo* memoryObjectInfo)
 {
     WTF::MemoryClassInfo info(memoryObjectInfo, canvas);
-    info.addMember(canvas->getDevice(), "canvas");
+    info.addMember(canvas->getDevice(), "canvas", WTF::RetainingPointer);
 }

Modified: trunk/Tools/ChangeLog (144526 => 144527)


--- trunk/Tools/ChangeLog	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Tools/ChangeLog	2013-03-02 05:23:18 UTC (rev 144527)
@@ -1,3 +1,18 @@
+2013-03-01  Ilya Tikhonovsky  <[email protected]>
+
+        Web Inspector: Native Memory Instrumentation: do not visit raw pointers by default.
+        https://bugs.webkit.org/show_bug.cgi?id=110943
+
+        Reviewed by Yury Semikhatsky.
+
+        Unfortunately in many cases raw pointer may point to an object that has been deleted.
+        There is no working solution to solve this problem in general.
+        It could be solved only on case by case basis.
+
+        * TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp:
+        * TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:
+        (TestWebKitAPI::TEST):
+
 2013-03-01  Jason Anderssen  <[email protected]>
 
         Move markerTextForListItem from TestRunner to Internals

Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp (144526 => 144527)


--- trunk/Tools/TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/MemoryInstrumentationTest.cpp	2013-03-02 05:23:18 UTC (rev 144527)
@@ -89,8 +89,7 @@
     {
         m_links[WTF::PointerMember] = 0;
         m_links[WTF::ReferenceMember] = 0;
-        m_links[WTF::RefPtrMember] = 0;
-        m_links[WTF::OwnPtrMember] = 0;
+        m_links[WTF::RetainingPointer] = 0;
     }
 
     virtual void countObjectSize(const void*, MemoryObjectType objectType, size_t size)
@@ -108,7 +107,7 @@
     }
     virtual void reportLeaf(const MemoryObjectInfo&, const char*) OVERRIDE
     {
-        ++m_links[WTF::OwnPtrMember];
+        ++m_links[WTF::RetainingPointer];
     }
     virtual void reportBaseAddress(const void*, const void*) OVERRIDE { }
     virtual int registerString(const char*) OVERRIDE { return -1; }
@@ -196,7 +195,7 @@
     {
         MemoryClassInfo info(memoryObjectInfo, this, TestType);
         memoryObjectInfo->setClassName("Instrumented");
-        info.addMember(m_notInstrumented, "m_notInstrumented");
+        info.addMember(m_notInstrumented, "m_notInstrumented", WTF::RetainingPointer);
     }
 
     void disposeOwnedObject()
@@ -215,7 +214,7 @@
     helper.addRootObject(instrumented);
     EXPECT_EQ(sizeof(NotInstrumented), helper.reportedSizeForAllTypes());
     EXPECT_EQ(1u, helper.visitedObjects());
-    EXPECT_EQ(1u, helper.linksCount(WTF::PointerMember));
+    EXPECT_EQ(1u, helper.linksCount(WTF::RetainingPointer));
 }
 
 TEST(MemoryInstrumentationTest, nullCheck)
@@ -225,7 +224,7 @@
     helper.addRootObject(instrumented);
     EXPECT_EQ(0u, helper.reportedSizeForAllTypes());
     EXPECT_EQ(0u, helper.visitedObjects());
-    EXPECT_EQ(0u, helper.linksCount(WTF::PointerMember));
+    EXPECT_EQ(0u, helper.linksCount(WTF::RetainingPointer));
 }
 
 TEST(MemoryInstrumentationTest, ptrVsRef)
@@ -236,7 +235,7 @@
         helper.addRootObject(&instrumented);
         EXPECT_EQ(sizeof(Instrumented) + sizeof(NotInstrumented), helper.reportedSizeForAllTypes());
         EXPECT_EQ(2u, helper.visitedObjects());
-        EXPECT_EQ(1u, helper.linksCount(WTF::PointerMember));
+        EXPECT_EQ(1u, helper.linksCount(WTF::RetainingPointer));
     }
     {
         InstrumentationTestHelper helper;
@@ -244,7 +243,7 @@
         helper.addRootObject(instrumented);
         EXPECT_EQ(sizeof(NotInstrumented), helper.reportedSizeForAllTypes());
         EXPECT_EQ(1u, helper.visitedObjects());
-        EXPECT_EQ(1u, helper.linksCount(WTF::PointerMember));
+        EXPECT_EQ(1u, helper.linksCount(WTF::RetainingPointer));
     }
 }
 
@@ -268,8 +267,7 @@
     helper.addRootObject(instrumentedWithOwnPtr);
     EXPECT_EQ(2u * sizeof(NotInstrumented), helper.reportedSizeForAllTypes());
     EXPECT_EQ(2u, helper.visitedObjects());
-    EXPECT_EQ(1u, helper.linksCount(WTF::OwnPtrMember));
-    EXPECT_EQ(1u, helper.linksCount(WTF::PointerMember));
+    EXPECT_EQ(2u, helper.linksCount(WTF::RetainingPointer));
 }
 
 class InstrumentedUndefined {
@@ -334,7 +332,7 @@
     void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
         MemoryClassInfo info(memoryObjectInfo, this, TestType);
-        info.addMember(m_value);
+        info.addMember(m_value, "value", WTF::RetainingPointer);
     }
 
     T m_value;
@@ -649,22 +647,35 @@
     EXPECT_EQ(2u * count + 1, helper.visitedObjects());
 }
 
+class InstrumentedRefCounted : public RefCounted<InstrumentedRefCounted> {
+public:
+    InstrumentedRefCounted() : m_notInstrumented(new NotInstrumented) { }
+    ~InstrumentedRefCounted() { delete m_notInstrumented; }
+    
+    void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
+    {
+        MemoryClassInfo info(memoryObjectInfo, this, TestType);
+        info.addMember(m_notInstrumented, "m_notInstrumented", WTF::RetainingPointer);
+    }
+private:
+    NotInstrumented* m_notInstrumented;
+};
+
 TEST(MemoryInstrumentationTest, hashMapWithInstrumentedPointerKeysAndPointerValues)
 {
     InstrumentationTestHelper helper;
 
-    typedef HashMap<Instrumented*, Instrumented*> InstrumentedToInstrumentedMap;
+    typedef HashMap<RefPtr<InstrumentedRefCounted>, RefPtr<InstrumentedRefCounted> > InstrumentedToInstrumentedMap;
     OwnPtr<InstrumentedToInstrumentedMap> value(adoptPtr(new InstrumentedToInstrumentedMap()));
-    Vector<OwnPtr<Instrumented> > valuesVector;
     size_t count = 10;
-    for (size_t i = 0; i < count; ++i) {
-        valuesVector.append(adoptPtr(new Instrumented()));
-        valuesVector.append(adoptPtr(new Instrumented()));
-        value->set(valuesVector[2 * i].get(), valuesVector[2 * i + 1].get());
-    }
+    for (size_t i = 0; i < count; ++i)
+        value->set(adoptRef(new InstrumentedRefCounted()), adoptRef(new InstrumentedRefCounted()));
     InstrumentedOwner<InstrumentedToInstrumentedMap* > root(value.get());
     helper.addRootObject(root);
-    EXPECT_EQ(sizeof(InstrumentedToInstrumentedMap) + sizeof(InstrumentedToInstrumentedMap::ValueType) * value->capacity() + 2 * (sizeof(Instrumented) + sizeof(NotInstrumented)) * value->size(), helper.reportedSizeForAllTypes());
+    EXPECT_EQ(sizeof(InstrumentedToInstrumentedMap)
+        + sizeof(InstrumentedToInstrumentedMap::ValueType) * value->capacity()
+        + 2 * (sizeof(InstrumentedRefCounted) + sizeof(NotInstrumented)) * value->size(),
+        helper.reportedSizeForAllTypes());
     EXPECT_EQ(2u * 2u * count + 1, helper.visitedObjects());
 }
 
@@ -705,10 +716,10 @@
     EXPECT_EQ(1 + (count - 10), helper.visitedObjects());
 }
 
-class InstrumentedConvertibleToInt {
+class InstrumentedConvertibleToInt : public RefCounted<InstrumentedConvertibleToInt> {
 public:
-    InstrumentedConvertibleToInt() : m_notInstrumented(0) { }
-    virtual ~InstrumentedConvertibleToInt() { }
+    InstrumentedConvertibleToInt() : m_notInstrumented(new NotInstrumented) { }
+    virtual ~InstrumentedConvertibleToInt() { delete m_notInstrumented; }
 
     virtual void reportMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
     {
@@ -729,16 +740,11 @@
 {
     InstrumentationTestHelper helper;
 
-    typedef HashMap<InstrumentedConvertibleToInt*, InstrumentedConvertibleToInt> TestMap;
+    typedef HashMap<RefPtr<InstrumentedConvertibleToInt>, int> TestMap;
     OwnPtr<TestMap> value(adoptPtr(new TestMap()));
-    Vector<OwnPtr<InstrumentedConvertibleToInt> > keysVector;
-    Vector<OwnPtr<NotInstrumented> > valuesVector;
     size_t count = 10;
-    for (size_t i = 0; i < count; ++i) {
-        keysVector.append(adoptPtr(new InstrumentedConvertibleToInt()));
-        valuesVector.append(adoptPtr(new NotInstrumented()));
-        value->set(keysVector[i].get(), InstrumentedConvertibleToInt()).iterator->value.m_notInstrumented = valuesVector[i].get();
-    }
+    for (size_t i = 0; i < count; ++i)
+        value->set(adoptRef(new InstrumentedConvertibleToInt()), 0);
     InstrumentedOwner<TestMap* > root(value.get());
     helper.addRootObject(root);
     EXPECT_EQ(sizeof(TestMap) + sizeof(TestMap::ValueType) * value->capacity() +
@@ -757,7 +763,10 @@
         value->set(static_cast<TestEnum>(i), String::number(i));
     InstrumentedOwner<EnumToStringMap* > root(value.get());
     helper.addRootObject(root);
-    EXPECT_EQ(sizeof(EnumToStringMap) + sizeof(EnumToStringMap::ValueType) * value->capacity() + (sizeof(StringImpl) + 1) * value->size(), helper.reportedSizeForAllTypes());
+    EXPECT_EQ(sizeof(EnumToStringMap)
+        + sizeof(EnumToStringMap::ValueType) * value->capacity()
+        + (sizeof(StringImpl) + 1) * value->size(),
+        helper.reportedSizeForAllTypes());
     EXPECT_EQ(count + 1, helper.visitedObjects());
 }
 
@@ -765,18 +774,20 @@
 {
     InstrumentationTestHelper helper;
 
-    typedef HashCountedSet<Instrumented*> TestSet;
+    typedef HashCountedSet<RefPtr<InstrumentedRefCounted> > TestSet;
     OwnPtr<TestSet> set(adoptPtr(new TestSet()));
-    Vector<OwnPtr<Instrumented> > keysVector;
     size_t count = 10;
     for (size_t i = 0; i < count; ++i) {
-        keysVector.append(adoptPtr(new Instrumented()));
+        RefPtr<InstrumentedRefCounted> instrumentedRefCounted = adoptRef(new InstrumentedRefCounted());
         for (size_t j = 0; j <= i; j++)
-            set->add(keysVector.last().get());
+            set->add(instrumentedRefCounted);
     }
     InstrumentedOwner<TestSet* > root(set.get());
     helper.addRootObject(root);
-    EXPECT_EQ(sizeof(TestSet) + sizeof(HashMap<Instrumented*, unsigned>::ValueType) * set->capacity() + (sizeof(Instrumented) + sizeof(NotInstrumented))  * set->size(), helper.reportedSizeForAllTypes());
+    EXPECT_EQ(sizeof(TestSet)
+        + sizeof(HashMap<RefPtr<InstrumentedRefCounted>, unsigned>::ValueType) * set->capacity()
+        + (sizeof(InstrumentedRefCounted) + sizeof(NotInstrumented))  * set->size(),
+        helper.reportedSizeForAllTypes());
     EXPECT_EQ(2u * count + 1, helper.visitedObjects());
 }
 
@@ -789,7 +800,7 @@
     helper.addRootObject(value);
     EXPECT_EQ(sizeof(int) * 1000 + sizeof(ArrayBuffer), helper.reportedSizeForAllTypes());
     EXPECT_EQ(2u, helper.visitedObjects());
-    EXPECT_EQ(1u, helper.linksCount(WTF::RefPtrMember));
+    EXPECT_EQ(2u, helper.linksCount(WTF::RetainingPointer));
 }
 
 class AncestorWithVirtualMethod {

Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp (144526 => 144527)


--- trunk/Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp	2013-03-02 05:18:43 UTC (rev 144526)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp	2013-03-02 05:23:18 UTC (rev 144527)
@@ -248,7 +248,7 @@
     HeapGraphReceiver receiver;
     Helper helper(receiver.serializer());
     void* childObject = helper.addNode("Child", "child", false);
-    helper.addEdge(childObject, "pointerToChild", WTF::OwnPtrMember);
+    helper.addEdge(childObject, "pointerToChild", WTF::RetainingPointer);
     helper.addNode("Parent", "parent", true);
     helper.done();
     receiver.printGraph();
@@ -285,7 +285,7 @@
     receiver.serializer()->finish();
     receiver.printGraph();
     EXPECT_EQ(String("[6,0,1,0,0,5,0,4,0,3,9,0,3,0,0,9,0,2,0,0,10,0,5,0,1]"), receiver.dumpNodes());
-    EXPECT_EQ(String("[2,7,1,1,8,2,1,8,3,1,0,4]"), receiver.dumpEdges());
+    EXPECT_EQ(String("[2,7,1,2,8,2,2,8,3,1,0,4]"), receiver.dumpEdges());
     EXPECT_EQ(String("[]"), receiver.dumpBaseToRealNodeId());
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to