Changeset 36058 in webkit for trunk/JavaScriptCore/profiler/Profiler.cpp
- Timestamp:
- Sep 3, 2008, 10:35:42 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/profiler/Profiler.cpp
r35807 r36058 45 45 static unsigned ProfilesUID = 0; 46 46 47 static CallIdentifier createCallIdentifier(ExecState*, JSObject*);48 static CallIdentifier createCallIdentifier(ExecState*, const UString& sourceURL, int startingLineNumber);49 47 static CallIdentifier createCallIdentifierFromFunctionImp(ExecState*, JSFunction*); 50 48 … … 68 66 for (size_t i = 0; i < m_currentProfiles.size(); ++i) { 69 67 ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); 70 if ( !profileGenerator->stoppedProfiling() &&profileGenerator->originatingGlobalExec() == globalExec && profileGenerator->title() == title)68 if (profileGenerator->originatingGlobalExec() == globalExec && profileGenerator->title() == title) 71 69 return; 72 70 } 73 71 74 72 s_sharedEnabledProfilerReference = this; 75 RefPtr<ProfileGenerator> profileGenerator = ProfileGenerator::create(title, globalExec, exec->lexicalGlobalObject()->profileGroup(), client, ++ProfilesUID);73 RefPtr<ProfileGenerator> profileGenerator = ProfileGenerator::create(title, exec, client, ++ProfilesUID); 76 74 m_currentProfiles.append(profileGenerator); 77 75 } … … 82 80 for (ptrdiff_t i = m_currentProfiles.size() - 1; i >= 0; --i) { 83 81 ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); 84 if (!profileGenerator->stoppedProfiling() && profileGenerator->originatingGlobalExec() == globalExec && (title.isNull() || profileGenerator->title() == title)) 85 m_currentProfiles[i]->stopProfiling(); 86 } 87 } 88 89 void Profiler::didFinishAllExecution(ExecState* exec) 90 { 91 ExecState* globalExec = exec->lexicalGlobalObject()->globalExec(); 92 for (ptrdiff_t i = m_currentProfiles.size() - 1; i >= 0; --i) { 93 ProfileGenerator* profileGenerator = m_currentProfiles[i].get(); 94 if (profileGenerator->originatingGlobalExec() == globalExec && profileGenerator->didFinishAllExecution()) { 82 if (profileGenerator->originatingGlobalExec() == globalExec && (title.isNull() || profileGenerator->title() == title)) { 95 83 PassRefPtr<ProfileGenerator> prpProfileGenerator = m_currentProfiles[i].release(); 96 84 m_currentProfiles.remove(i); … … 99 87 s_sharedEnabledProfilerReference = 0; 100 88 89 90 prpProfileGenerator->stopProfiling(); 101 91 if (ProfilerClient* client = prpProfileGenerator->client()) 102 92 client->finishedProfiling(prpProfileGenerator->profile()); … … 117 107 ASSERT(!m_currentProfiles.isEmpty()); 118 108 119 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::willExecute, createCallIdentifier(exec, calledFunction ), exec->lexicalGlobalObject()->profileGroup());109 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::willExecute, createCallIdentifier(exec, calledFunction, "", 0), exec->lexicalGlobalObject()->profileGroup()); 120 110 } 121 111 … … 124 114 ASSERT(!m_currentProfiles.isEmpty()); 125 115 126 CallIdentifier callIdentifier = createCallIdentifier(exec, sourceURL, startingLineNumber);116 CallIdentifier callIdentifier = createCallIdentifier(exec, 0, sourceURL, startingLineNumber); 127 117 128 118 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::willExecute, callIdentifier, exec->lexicalGlobalObject()->profileGroup()); … … 133 123 ASSERT(!m_currentProfiles.isEmpty()); 134 124 135 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::didExecute, createCallIdentifier(exec, calledFunction ), exec->lexicalGlobalObject()->profileGroup());125 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::didExecute, createCallIdentifier(exec, calledFunction, "", 0), exec->lexicalGlobalObject()->profileGroup()); 136 126 } 137 127 … … 140 130 ASSERT(!m_currentProfiles.isEmpty()); 141 131 142 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::didExecute, createCallIdentifier(exec, sourceURL, startingLineNumber), exec->lexicalGlobalObject()->profileGroup());132 dispatchFunctionToProfiles(m_currentProfiles, &ProfileGenerator::didExecute, createCallIdentifier(exec, 0, sourceURL, startingLineNumber), exec->lexicalGlobalObject()->profileGroup()); 143 133 } 144 134 145 CallIdentifier createCallIdentifier(ExecState* exec, JSObject* calledFunction)135 CallIdentifier Profiler::createCallIdentifier(ExecState* exec, JSObject* calledFunction, const UString& defaultSourceURL, int defaultLineNumber) 146 136 { 137 if (!calledFunction) 138 return CallIdentifier(GlobalCodeExecution, defaultSourceURL, defaultLineNumber); 139 147 140 if (calledFunction->inherits(&JSFunction::info)) 148 141 return createCallIdentifierFromFunctionImp(exec, static_cast<JSFunction*>(calledFunction)); 149 142 if (calledFunction->inherits(&InternalFunction::info)) 150 return CallIdentifier(static_cast<InternalFunction*>(calledFunction)->name(exec), "", 0);143 return CallIdentifier(static_cast<InternalFunction*>(calledFunction)->name(exec), defaultSourceURL, defaultLineNumber); 151 144 152 145 UString name = "(" + calledFunction->className() + " object)"; 153 return CallIdentifier(name, 0, 0); 154 } 155 156 CallIdentifier createCallIdentifier(ExecState*, const UString& sourceURL, int startingLineNumber) 157 { 158 return CallIdentifier(GlobalCodeExecution, sourceURL, startingLineNumber); 146 return CallIdentifier(name, defaultSourceURL, defaultLineNumber); 159 147 } 160 148
Note:
See TracChangeset
for help on using the changeset viewer.