Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1109)

Unified Diff: Source/core/inspector/InspectorHeapProfilerAgent.cpp

Issue 98273008: [DevTools] Send heap snapshot to the frontend immediatly when it is ready (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
}
« no previous file with comments | « no previous file | Source/devtools/front_end/HeapSnapshotView.js » ('j') | Source/devtools/front_end/HeapSnapshotView.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698