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); |
} |
} |