Chromium Code Reviews| Index: Source/core/inspector/InspectorHeapProfilerAgent.cpp |
| diff --git a/Source/core/inspector/InspectorHeapProfilerAgent.cpp b/Source/core/inspector/InspectorHeapProfilerAgent.cpp |
| index 04063c8d2353a0c4f140ee22c320d5ba00677126..8305da02e4f342a46c758d45b97b4cd6566918c5 100644 |
| --- a/Source/core/inspector/InspectorHeapProfilerAgent.cpp |
| +++ b/Source/core/inspector/InspectorHeapProfilerAgent.cpp |
| @@ -254,7 +254,7 @@ void InspectorHeapProfilerAgent::removeProfile(ErrorString*, int rawUid) |
| m_snapshots.remove(uid); |
| } |
| -void InspectorHeapProfilerAgent::takeHeapSnapshot(ErrorString*, const bool* reportProgress) |
| +void InspectorHeapProfilerAgent::takeHeapSnapshot(ErrorString* errorString, const bool* reportProgress) |
| { |
| class HeapSnapshotProgress: public ScriptProfiler::HeapSnapshotProgress { |
| public: |
| @@ -267,9 +267,14 @@ void InspectorHeapProfilerAgent::takeHeapSnapshot(ErrorString*, const bool* repo |
| void Worked(int workDone) |
| { |
| if (m_frontend) |
| - m_frontend->reportHeapSnapshotProgress(workDone, m_totalWork); |
| + m_frontend->reportHeapSnapshotProgress(workDone, m_totalWork, 0); |
| + } |
| + void Done() |
| + { |
| + const bool finished = true; |
| + if (m_frontend) |
| + m_frontend->reportHeapSnapshotProgress(m_totalWork, m_totalWork, &finished); |
|
alph
2013/12/23 14:06:59
Do you really need to add this parameter?
Can't it
|
| } |
| - void Done() { } |
| bool isCanceled() { return false; } |
| private: |
| InspectorFrontend::HeapProfiler* m_frontend; |
| @@ -279,10 +284,26 @@ void InspectorHeapProfilerAgent::takeHeapSnapshot(ErrorString*, const bool* repo |
| String title = "Snapshot " + String::number(m_nextUserInitiatedHeapSnapshotNumber++); |
| HeapSnapshotProgress progress(reportProgress && *reportProgress ? m_frontend : 0); |
| RefPtr<ScriptHeapSnapshot> snapshot = ScriptProfiler::takeHeapSnapshot(title, &progress); |
| - if (snapshot) { |
| - m_snapshots.add(snapshot->uid(), snapshot); |
| - if (m_frontend) |
| - m_frontend->addProfileHeader(createSnapshotHeader(*snapshot)); |
| + if (!snapshot) { |
| + *errorString = "Failed to take heap snapshot"; |
| + return; |
| + } |
| + |
| + class OutputStream : public ScriptHeapSnapshot::OutputStream { |
| + public: |
| + OutputStream(InspectorFrontend::HeapProfiler* frontend, unsigned uid) |
| + : m_frontend(frontend), m_uid(uid) { } |
| + void Write(const String& chunk) { m_frontend->addHeapSnapshotChunk(m_uid, chunk); } |
| + void Close() { } |
| + private: |
| + InspectorFrontend::HeapProfiler* m_frontend; |
| + int m_uid; |
| + }; |
| + |
| + if (m_frontend) { |
| + unsigned uid = static_cast<unsigned>(snapshot->uid()); |
| + OutputStream stream(m_frontend, uid); |
| + snapshot->writeJSON(&stream); |
| } |
| } |