Changeset 35039 in webkit
- Timestamp:
- Jul 7, 2008 11:12:09 AM (16 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r35037 r35039 1 2008-07-07 Kevin McCullough <kmccullough@apple.com> 2 3 Reviewed by Darin. 4 5 When the profiler is running it gathers information and creates a 6 Profile. After it finishes the Profile can be sorted and have other 7 data refinements run over it. Both of these were done in the same class 8 before. Now I split the gathering operations into a new class called 9 ProfileGenerator. 10 11 * JavaScriptCore.xcodeproj/project.pbxproj: 12 * profiler/Profile.cpp: Removed code related to the gather stage of a 13 Profile's creation. 14 (KJS::Profile::create): 15 (KJS::Profile::Profile): 16 * profiler/Profile.h: Ditto. 17 (KJS::Profile::title): 18 (KJS::Profile::callTree): 19 (KJS::Profile::setHead): 20 * profiler/ProfileGenerator.cpp: Added. This is the class that will 21 handle the stage of creating a Profile. Once the Profile is finished 22 being created, this class goes away. 23 (KJS::ProfileGenerator::create): 24 (KJS::ProfileGenerator::ProfileGenerator): 25 (KJS::ProfileGenerator::title): 26 (KJS::ProfileGenerator::willExecute): 27 (KJS::ProfileGenerator::didExecute): 28 (KJS::ProfileGenerator::stopProfiling): 29 (KJS::ProfileGenerator::didFinishAllExecution): 30 (KJS::ProfileGenerator::removeProfileStart): 31 (KJS::ProfileGenerator::removeProfileEnd): 32 * profiler/ProfileGenerator.h: Added. 33 (KJS::ProfileGenerator::profile): 34 (KJS::ProfileGenerator::originatingGlobalExec): 35 (KJS::ProfileGenerator::pageGroupIdentifier): 36 (KJS::ProfileGenerator::client): 37 (KJS::ProfileGenerator::stoppedProfiling): 38 * profiler/Profiler.cpp: Now operates with the ProfileGenerator instead 39 of the Profile. 40 (KJS::Profiler::startProfiling): 41 (KJS::Profiler::stopProfiling): 42 (KJS::Profiler::didFinishAllExecution): It is here that the Profile is 43 handed off to its client and the Profile Generator is no longer needed. 44 (KJS::dispatchFunctionToProfiles): 45 (KJS::Profiler::willExecute): 46 (KJS::Profiler::didExecute): 47 * profiler/Profiler.h: Cleaned up the includes and subsequently the 48 forward declarations. Also use the new ProfileGenerator. 49 (KJS::ProfilerClient::~ProfilerClient): 50 (KJS::Profiler::currentProfiles): 51 * profiler/TreeProfile.cpp: Use Profile's new interface. 52 (KJS::TreeProfile::create): 53 (KJS::TreeProfile::TreeProfile): 54 * profiler/TreeProfile.h: 55 1 56 2008-07-07 Sam Weinig <sam@webkit.org> 2 57 -
trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r35022 r35039 92 92 95CD41B30E1BF6560085358E /* TreeProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CD41B10E1BF6560085358E /* TreeProfile.cpp */; }; 93 93 95CD41B40E1BF6560085358E /* TreeProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 95CD41B20E1BF6560085358E /* TreeProfile.h */; }; 94 95CD45760E1C4FDD0085358E /* ProfileGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 95CD45740E1C4FDD0085358E /* ProfileGenerator.cpp */; }; 95 95CD45770E1C4FDD0085358E /* ProfileGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 95CD45750E1C4FDD0085358E /* ProfileGenerator.h */; settings = {ATTRIBUTES = (); }; }; 94 96 95E3BC050E1AE68200B2D1C1 /* CallIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 95E3BC040E1AE68200B2D1C1 /* CallIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; }; 95 97 A72700900DAC6BBC00E548D7 /* JSNotAnObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A72700780DAC605600E548D7 /* JSNotAnObject.cpp */; }; … … 593 595 95CD41B10E1BF6560085358E /* TreeProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TreeProfile.cpp; path = profiler/TreeProfile.cpp; sourceTree = "<group>"; }; 594 596 95CD41B20E1BF6560085358E /* TreeProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TreeProfile.h; path = profiler/TreeProfile.h; sourceTree = "<group>"; }; 597 95CD45740E1C4FDD0085358E /* ProfileGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ProfileGenerator.cpp; path = profiler/ProfileGenerator.cpp; sourceTree = "<group>"; }; 598 95CD45750E1C4FDD0085358E /* ProfileGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProfileGenerator.h; path = profiler/ProfileGenerator.h; sourceTree = "<group>"; }; 595 599 95E3BC040E1AE68200B2D1C1 /* CallIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CallIdentifier.h; path = profiler/CallIdentifier.h; sourceTree = "<group>"; }; 596 600 A72700770DAC605600E548D7 /* JSNotAnObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSNotAnObject.h; sourceTree = "<group>"; }; … … 1256 1260 isa = PBXGroup; 1257 1261 children = ( 1262 95E3BC040E1AE68200B2D1C1 /* CallIdentifier.h */, 1263 95742F630DD11F5A000917FB /* Profile.cpp */, 1264 95742F640DD11F5A000917FB /* Profile.h */, 1265 95CD45740E1C4FDD0085358E /* ProfileGenerator.cpp */, 1266 95CD45750E1C4FDD0085358E /* ProfileGenerator.h */, 1267 95AB83540DA43B4400BC83F3 /* ProfileNode.cpp */, 1268 95AB83550DA43B4400BC83F3 /* ProfileNode.h */, 1269 95AB832E0DA42CAD00BC83F3 /* Profiler.cpp */, 1270 95AB832F0DA42CAD00BC83F3 /* Profiler.h */, 1258 1271 95CD41B10E1BF6560085358E /* TreeProfile.cpp */, 1259 1272 95CD41B20E1BF6560085358E /* TreeProfile.h */, 1260 95E3BC040E1AE68200B2D1C1 /* CallIdentifier.h */,1261 95AB83540DA43B4400BC83F3 /* ProfileNode.cpp */,1262 95AB83550DA43B4400BC83F3 /* ProfileNode.h */,1263 95742F630DD11F5A000917FB /* Profile.cpp */,1264 95742F640DD11F5A000917FB /* Profile.h */,1265 95AB832E0DA42CAD00BC83F3 /* Profiler.cpp */,1266 95AB832F0DA42CAD00BC83F3 /* Profiler.h */,1267 1273 ); 1268 1274 name = profiler; … … 1476 1482 BC7F8FB90E19D1C3008632C0 /* JSNumberCell.h in Headers */, 1477 1483 95CD41B40E1BF6560085358E /* TreeProfile.h in Headers */, 1484 95CD45770E1C4FDD0085358E /* ProfileGenerator.h in Headers */, 1478 1485 5D53726F0E1C54880021E549 /* Tracing.h in Headers */, 1479 1486 5D53727E0E1C55EC0021E549 /* TracingDtrace.h in Headers */, … … 1786 1793 E18E3A590DF9278C00D90B34 /* JSGlobalData.cpp in Sources */, 1787 1794 95CD41B30E1BF6560085358E /* TreeProfile.cpp in Sources */, 1795 95CD45760E1C4FDD0085358E /* ProfileGenerator.cpp in Sources */, 1788 1796 ); 1789 1797 runOnlyForDeploymentPostprocessing = 0; -
trunk/JavaScriptCore/profiler/Profile.cpp
r35037 r35039 27 27 #include "Profile.h" 28 28 29 #include "ExecState.h"30 #include "JSFunction.h"31 #include "JSGlobalObject.h"29 //#include "ExecState.h" 30 //#include "JSFunction.h" 31 //#include "JSGlobalObject.h" 32 32 #include "ProfileNode.h" 33 33 #include "TreeProfile.h" … … 36 36 namespace KJS { 37 37 38 static const char* NonJSExecution = "(idle)"; 39 40 PassRefPtr<Profile> Profile::create(const UString& title, ExecState* originatingGlobalExec, unsigned pageGroupIdentifier, ProfilerClient* client) 38 PassRefPtr<Profile> Profile::create(const UString& title) 41 39 { 42 return TreeProfile::create(title , originatingGlobalExec, pageGroupIdentifier, client);40 return TreeProfile::create(title); 43 41 } 44 42 45 Profile::Profile(const UString& title , ExecState* originatingGlobalExec, unsigned pageGroupIdentifier, ProfilerClient* client)43 Profile::Profile(const UString& title) 46 44 : m_title(title) 47 , m_originatingGlobalExec(originatingGlobalExec)48 , m_pageGroupIdentifier(pageGroupIdentifier)49 , m_stoppedCallDepth(0)50 , m_client(client)51 , m_stoppedProfiling(false)52 45 { 53 46 // FIXME: When multi-threading is supported this will be a vector and calls 54 47 // into the profiler will need to know which thread it is executing on. 55 48 m_head = ProfileNode::create(CallIdentifier("Thread_1", 0, 0), 0, 0); 56 m_currentNode = m_head;57 49 } 58 50 59 51 Profile::~Profile() 60 52 { 61 }62 63 void Profile::stopProfiling()64 {65 forEach(&ProfileNode::stopProfiling);66 removeProfileStart();67 removeProfileEnd();68 69 ASSERT(m_currentNode);70 71 // Set the current node to the parent, because we are in a call that72 // will not get didExecute call.73 m_currentNode = m_currentNode->parent();74 75 m_stoppedProfiling = true;76 }77 78 bool Profile::didFinishAllExecution()79 {80 if (!m_stoppedProfiling)81 return false;82 83 if (double headSelfTime = m_head->selfTime()) {84 RefPtr<ProfileNode> idleNode = ProfileNode::create(CallIdentifier(NonJSExecution, 0, 0), m_head.get(), m_head.get());85 86 idleNode->setTotalTime(headSelfTime);87 idleNode->setSelfTime(headSelfTime);88 idleNode->setVisible(true);89 90 m_head->setSelfTime(0.0);91 m_head->addChild(idleNode.release());92 }93 94 m_currentNode = 0;95 m_originatingGlobalExec = 0;96 return true;97 }98 99 // The console.profile that started this profile will be the first child.100 void Profile::removeProfileStart()101 {102 ProfileNode* currentNode = 0;103 for (ProfileNode* next = m_head.get(); next; next = next->firstChild())104 currentNode = next;105 106 if (currentNode->callIdentifier().m_name != "profile")107 return;108 109 // Increment m_stoppedCallDepth to account for didExecute not being called for console.profile.110 ++m_stoppedCallDepth;111 112 // Attribute the time of the node aobut to be removed to the self time of its parent113 currentNode->parent()->setSelfTime(currentNode->parent()->selfTime() + currentNode->totalTime());114 115 ASSERT(currentNode->callIdentifier() == (currentNode->parent()->children()[0])->callIdentifier());116 currentNode->parent()->removeChild(0);117 }118 119 // The console.profileEnd that stopped this profile will be the last child.120 void Profile::removeProfileEnd()121 {122 ProfileNode* currentNode = 0;123 for (ProfileNode* next = m_head.get(); next; next = next->lastChild())124 currentNode = next;125 126 if (currentNode->callIdentifier().m_name != "profileEnd")127 return;128 129 // Attribute the time of the node aobut to be removed to the self time of its parent130 currentNode->parent()->setSelfTime(currentNode->parent()->selfTime() + currentNode->totalTime());131 132 ASSERT(currentNode->callIdentifier() == (currentNode->parent()->children()[currentNode->parent()->children().size() - 1])->callIdentifier());133 currentNode->parent()->removeChild(currentNode->parent()->children().size() - 1);134 }135 136 void Profile::willExecute(const CallIdentifier& callIdentifier)137 {138 if (m_stoppedProfiling) {139 ++m_stoppedCallDepth;140 return;141 }142 143 ASSERT(m_currentNode);144 m_currentNode = m_currentNode->willExecute(callIdentifier);145 }146 147 void Profile::didExecute(const CallIdentifier& callIdentifier)148 {149 if (!m_currentNode)150 return;151 152 if (m_stoppedProfiling && m_stoppedCallDepth > 0) {153 --m_stoppedCallDepth;154 return;155 }156 157 if (m_currentNode == m_head) {158 m_currentNode = ProfileNode::create(callIdentifier, m_head.get(), m_head.get());159 m_currentNode->setStartTime(m_head->startTime());160 m_currentNode->didExecute();161 162 if (m_stoppedProfiling) {163 m_currentNode->setTotalTime(m_head->totalTime());164 m_currentNode->setSelfTime(m_head->selfTime());165 m_head->setSelfTime(0.0);166 }167 168 m_head->insertNode(m_currentNode.release());169 m_currentNode = m_stoppedProfiling ? 0 : m_head;170 171 return;172 }173 174 // Set m_currentNode to the parent (which didExecute returns). If stopped, just set the175 // m_currentNode to the parent and don't call didExecute.176 m_currentNode = m_stoppedProfiling ? m_currentNode->parent() : m_currentNode->didExecute();177 53 } 178 54 -
trunk/JavaScriptCore/profiler/Profile.h
r34960 r35039 28 28 29 29 #include "ProfileNode.h" 30 #include <kjs/ustring.h> 30 31 #include <wtf/RefCounted.h> 31 32 #include <wtf/RefPtr.h> … … 34 35 35 36 class ExecState; 36 class ProfilerClient;37 37 38 38 class Profile : public RefCounted<Profile> { 39 39 public: 40 static PassRefPtr<Profile> create(const UString& title , ExecState* originatingGlobalExec, unsigned pageGroupIdentifier, ProfilerClient*);40 static PassRefPtr<Profile> create(const UString& title); 41 41 virtual ~Profile(); 42 42 43 void willExecute(const CallIdentifier&); 44 void didExecute(const CallIdentifier&); 45 void stopProfiling(); 46 bool didFinishAllExecution(); 47 48 const UString& title() const { return m_title; }; 49 ProfileNode* callTree() const { return m_head.get(); }; 50 43 const UString& title() const { return m_title; } 44 ProfileNode* callTree() const { return m_head.get(); } 45 void setHead(PassRefPtr<ProfileNode> head) { m_head = head; } 51 46 double totalTime() const { return m_head->totalTime(); } 52 53 ExecState* originatingGlobalExec() const { return m_originatingGlobalExec; }54 unsigned pageGroupIdentifier() const { return m_pageGroupIdentifier; }55 ProfilerClient* client() { return m_client; }56 47 57 48 void forEach(void (ProfileNode::*)()); … … 65 56 void sortFunctionNameAscending() { forEach(&ProfileNode::sortFunctionNameAscending); } 66 57 67 void focus(const ProfileNode* profileNode);68 void exclude(const ProfileNode* profileNode);58 void focus(const ProfileNode*); 59 void exclude(const ProfileNode*); 69 60 void restoreAll(); 70 71 bool stoppedProfiling() { return m_stoppedProfiling; }72 61 73 62 virtual Profile* heavyProfile() = 0; … … 78 67 void debugPrintDataSampleStyle() const; 79 68 #endif 80 typedef void (Profile::*ProfileFunction)(const CallIdentifier& callIdentifier);81 69 82 70 protected: 83 Profile(const UString& title , ExecState* originatingGlobalExec, unsigned pageGroupIdentifier, ProfilerClient*);71 Profile(const UString& title); 84 72 85 73 private: … … 88 76 89 77 UString m_title; 90 ExecState* m_originatingGlobalExec;91 unsigned m_pageGroupIdentifier;92 unsigned m_stoppedCallDepth;93 78 RefPtr<ProfileNode> m_head; 94 RefPtr<ProfileNode> m_currentNode;95 ProfilerClient* m_client;96 bool m_stoppedProfiling;97 79 }; 98 80 99 81 } // namespace KJS 100 82 101 #endif // Profile r_h83 #endif // Profile_h -
trunk/JavaScriptCore/profiler/Profiler.cpp
r35037 r35039 34 34 #include "JSGlobalObject.h" 35 35 #include "Profile.h" 36 #include "ProfileGenerator.h" 36 37 #include "ProfileNode.h" 37 38 #include <stdio.h> … … 64 65 ExecState* globalExec = exec->lexicalGlobalObject()->globalExec(); 65 66 for (size_t i = 0; i < m_currentProfiles.size(); ++i) { 66 Profile * profile= m_currentProfiles[i].get();67 if (!profile ->stoppedProfiling() && profile->originatingGlobalExec() == globalExec && profile->title() == title)67 ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); 68 if (!profileGenerator->stoppedProfiling() && profileGenerator->originatingGlobalExec() == globalExec && profileGenerator->title() == title) 68 69 return; 69 70 } 70 71 71 72 s_sharedEnabledProfilerReference = this; 72 RefPtr<Profile > profile = Profile::create(title, globalExec, exec->lexicalGlobalObject()->pageGroupIdentifier(), client);73 m_currentProfiles.append(profile );73 RefPtr<ProfileGenerator> profileGenerator = ProfileGenerator::create(title, globalExec, exec->lexicalGlobalObject()->pageGroupIdentifier(), client); 74 m_currentProfiles.append(profileGenerator); 74 75 } 75 76 … … 78 79 ExecState* globalExec = exec->lexicalGlobalObject()->globalExec(); 79 80 for (ptrdiff_t i = m_currentProfiles.size() - 1; i >= 0; --i) { 80 Profile * profile= m_currentProfiles[i].get();81 if (!profile ->stoppedProfiling() && profile->originatingGlobalExec() == globalExec && (title.isNull() || profile->title() == title))81 ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); 82 if (!profileGenerator->stoppedProfiling() && profileGenerator->originatingGlobalExec() == globalExec && (title.isNull() || profileGenerator->title() == title)) 82 83 m_currentProfiles[i]->stopProfiling(); 83 84 } … … 88 89 ExecState* globalExec = exec->lexicalGlobalObject()->globalExec(); 89 90 for (ptrdiff_t i = m_currentProfiles.size() - 1; i >= 0; --i) { 90 Profile * profile= m_currentProfiles[i].get();91 if (profile ->originatingGlobalExec() == globalExec && profile->didFinishAllExecution()) {92 PassRefPtr<Profile > prpProfile = m_currentProfiles[i].release();91 ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); 92 if (profileGenerator->originatingGlobalExec() == globalExec && profileGenerator->didFinishAllExecution()) { 93 PassRefPtr<ProfileGenerator> prpProfileGenerator = m_currentProfiles[i].release(); 93 94 m_currentProfiles.remove(i); 94 95 … … 96 97 s_sharedEnabledProfilerReference = 0; 97 98 98 if (ProfilerClient* client = prpProfile ->client())99 client->finishedProfiling(prpProfile );99 if (ProfilerClient* client = prpProfileGenerator->client()) 100 client->finishedProfiling(prpProfileGenerator->profile()); 100 101 } 101 102 } 102 103 } 103 104 104 static inline void dispatchFunctionToProfiles(const Vector<RefPtr<Profile > >& profiles, Profile::ProfileFunction function, const CallIdentifier& callIdentifier, unsigned currentPageGroupIdentifier)105 static inline void dispatchFunctionToProfiles(const Vector<RefPtr<ProfileGenerator> >& profiles, ProfileGenerator::ProfileFunction function, const CallIdentifier& callIdentifier, unsigned currentPageGroupIdentifier) 105 106 { 106 107 for (size_t i = 0; i < profiles.size(); ++i) { … … 114 115 ASSERT(!m_currentProfiles.isEmpty()); 115 116 116 dispatchFunctionToProfiles(m_currentProfiles, &Profile ::willExecute, createCallIdentifier(calledFunction), exec->lexicalGlobalObject()->pageGroupIdentifier());117 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::willExecute, createCallIdentifier(calledFunction), exec->lexicalGlobalObject()->pageGroupIdentifier()); 117 118 } 118 119 … … 123 124 CallIdentifier callIdentifier = createCallIdentifier(sourceURL, startingLineNumber); 124 125 125 dispatchFunctionToProfiles(m_currentProfiles, &Profile ::willExecute, callIdentifier, exec->lexicalGlobalObject()->pageGroupIdentifier());126 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::willExecute, callIdentifier, exec->lexicalGlobalObject()->pageGroupIdentifier()); 126 127 } 127 128 … … 130 131 ASSERT(!m_currentProfiles.isEmpty()); 131 132 132 dispatchFunctionToProfiles(m_currentProfiles, &Profile ::didExecute, createCallIdentifier(calledFunction), exec->lexicalGlobalObject()->pageGroupIdentifier());133 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::didExecute, createCallIdentifier(calledFunction), exec->lexicalGlobalObject()->pageGroupIdentifier()); 133 134 } 134 135 … … 137 138 ASSERT(!m_currentProfiles.isEmpty()); 138 139 139 dispatchFunctionToProfiles(m_currentProfiles, &Profile ::didExecute, createCallIdentifier(sourceURL, startingLineNumber), exec->lexicalGlobalObject()->pageGroupIdentifier());140 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::didExecute, createCallIdentifier(sourceURL, startingLineNumber), exec->lexicalGlobalObject()->pageGroupIdentifier()); 140 141 } 141 142 -
trunk/JavaScriptCore/profiler/Profiler.h
r35037 r35039 30 30 #define Profiler_h 31 31 32 #include "Profile.h"32 #include <wtf/PassRefPtr.h> 33 33 #include <wtf/RefPtr.h> 34 #include <wtf/Vector.h> 34 35 35 36 namespace KJS { … … 37 38 class ExecState; 38 39 class JSObject; 40 class Profile; 41 class ProfileGenerator; 42 class UString; 43 44 class ProfilerClient { 45 public: 46 virtual void finishedProfiling(PassRefPtr<Profile>) = 0; 47 48 protected: 49 virtual ~ProfilerClient() {} 50 }; 39 51 40 52 class Profiler { … … 56 68 void didExecute(ExecState*, const UString& sourceURL, int startingLineNumber); 57 69 58 const Vector<RefPtr<Profile > >& currentProfiles() { return m_currentProfiles; };70 const Vector<RefPtr<ProfileGenerator> >& currentProfiles() { return m_currentProfiles; }; 59 71 60 72 private: 61 Vector<RefPtr<Profile > > m_currentProfiles;73 Vector<RefPtr<ProfileGenerator> > m_currentProfiles; 62 74 static Profiler* s_sharedProfiler; 63 75 static Profiler* s_sharedEnabledProfilerReference; 64 };65 66 class ProfilerClient {67 public:68 virtual void finishedProfiling(PassRefPtr<Profile>) = 0;69 70 protected:71 virtual ~ProfilerClient() { }72 76 }; 73 77 -
trunk/JavaScriptCore/profiler/TreeProfile.cpp
r35037 r35039 29 29 namespace KJS { 30 30 31 PassRefPtr<TreeProfile> TreeProfile::create(const UString& title , ExecState* originatingGlobalExec, unsigned pageGroupIdentifier, ProfilerClient* client)31 PassRefPtr<TreeProfile> TreeProfile::create(const UString& title) 32 32 { 33 return adoptRef(new TreeProfile(title , originatingGlobalExec, pageGroupIdentifier, client));33 return adoptRef(new TreeProfile(title)); 34 34 } 35 35 36 TreeProfile::TreeProfile(const UString& title , ExecState* originatingGlobalExec, unsigned pageGroupIdentifier, ProfilerClient* client)37 : Profile(title , originatingGlobalExec, pageGroupIdentifier, client)36 TreeProfile::TreeProfile(const UString& title) 37 : Profile(title) 38 38 { 39 39 } -
trunk/JavaScriptCore/profiler/TreeProfile.h
r34960 r35039 37 37 class TreeProfile : public Profile { 38 38 public: 39 static PassRefPtr<TreeProfile> create(const UString& title , ExecState* originatingGlobalExec, unsigned pageGroupIdentifier, ProfilerClient*);39 static PassRefPtr<TreeProfile> create(const UString& title); 40 40 41 41 virtual Profile* heavyProfile(); … … 43 43 44 44 private: 45 TreeProfile(const UString& title , ExecState* originatingGlobalExec, unsigned pageGroupIdentifier, ProfilerClient*);45 TreeProfile(const UString& title); 46 46 }; 47 47 -
trunk/WebCore/ChangeLog
r35038 r35039 1 2008-07-07 Kevin McCullough <kmccullough@apple.com> 2 3 Reviewed by Darin. 4 5 Because profiler.h no longer #includes profile.h we need to explicitly 6 include it in console.cpp. 7 8 * page/Console.cpp: 9 1 10 2008-07-07 Nikolas Zimmermann <zimmermann@kde.org> 2 11 -
trunk/WebCore/page/Console.cpp
r35021 r35039 42 42 #include <kjs/interpreter.h> 43 43 #include <kjs/JSObject.h> 44 #include <profiler/Profile.h> 44 45 #include <stdio.h> 45 46
Note: See TracChangeset
for help on using the changeset viewer.