Fixes a couple performance issues with the profiler. Also fixes
authortimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 May 2008 01:48:31 +0000 (01:48 +0000)
committertimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 May 2008 01:48:31 +0000 (01:48 +0000)
a regression where some nodes wouldn't be added to the tree.

Reviewed by Kevin McCullough.

* profiler/ProfileNode.cpp:
(KJS::ProfileNode::addChild): Compare callIdentifier instead
of functionName.
* profiler/ProfileNode.h:
(CallIdentifier.operator==): Compare the CallIdentifiers in
an order that fails sooner for non-matches.
(CallIdentifier.callIdentifier): Return the CallIdentifier by
reference to prevent making a new copy each time.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@33952 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/profiler/ProfileNode.cpp
JavaScriptCore/profiler/ProfileNode.h

index 7808aa6..03c41de 100644 (file)
@@ -1,3 +1,19 @@
+2008-05-20  Timothy Hatcher  <timothy@apple.com>
+
+        Fixes a couple performance issues with the profiler. Also fixes
+        a regression where some nodes wouldn't be added to the tree.
+
+        Reviewed by Kevin McCullough.
+
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::addChild): Compare callIdentifier instead
+        of functionName.
+        * profiler/ProfileNode.h: 
+        (CallIdentifier.operator==): Compare the CallIdentifiers in
+        an order that fails sooner for non-matches.
+        (CallIdentifier.callIdentifier): Return the CallIdentifier by
+        reference to prevent making a new copy each time.
+
 2008-05-20  Kevin McCullough  <kmccullough@apple.com>
 
         Reviewed by Darin.
index 25703b2..b1c06d9 100644 (file)
@@ -77,7 +77,7 @@ void ProfileNode::addChild(PassRefPtr<ProfileNode> prpChild)
 
     RefPtr<ProfileNode> child = prpChild;
     for (StackIterator currentChild = m_children.begin(); currentChild != m_children.end(); ++currentChild) {
-        if ((*currentChild)->functionName() == child->functionName())
+        if ((*currentChild)->callIdentifier() == child->callIdentifier())
             return;
     }
 
index 69c6456..fb386bf 100644 (file)
@@ -50,7 +50,7 @@ namespace KJS {
         CallIdentifier(UString name, UString url, int lineNumber) : name(name), url(url), lineNumber(lineNumber) {}
         CallIdentifier(const CallIdentifier& ci) : name(ci.name), url(ci.url), lineNumber(ci.lineNumber) {}
 
-        inline bool operator== (const CallIdentifier& ci) const { return ci.name == name && ci.lineNumber == lineNumber && ci.url == url; }
+        inline bool operator== (const CallIdentifier& ci) const { return ci.lineNumber == lineNumber && ci.name == name && ci.url == url; }
     };
 
     class ProfileNode : public RefCounted<ProfileNode> {
@@ -65,7 +65,7 @@ namespace KJS {
 
         void stopProfiling(double totalProfileTime, bool headProfileNode = false);
 
-        CallIdentifier callIdentifier() const { return m_callIdentifier; }
+        const CallIdentifier& callIdentifier() const { return m_callIdentifier; }
         UString functionName() const { return m_callIdentifier.name; }
         UString url() const { return m_callIdentifier.url; }
         unsigned lineNumber() const { return m_callIdentifier.lineNumber; }