OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 } | 249 } |
250 } | 250 } |
251 | 251 |
252 void InspectorHeapProfilerAgent::removeProfile(ErrorString*, int rawUid) | 252 void InspectorHeapProfilerAgent::removeProfile(ErrorString*, int rawUid) |
253 { | 253 { |
254 unsigned uid = static_cast<unsigned>(rawUid); | 254 unsigned uid = static_cast<unsigned>(rawUid); |
255 if (m_snapshots.contains(uid)) | 255 if (m_snapshots.contains(uid)) |
256 m_snapshots.remove(uid); | 256 m_snapshots.remove(uid); |
257 } | 257 } |
258 | 258 |
259 void InspectorHeapProfilerAgent::takeHeapSnapshot(ErrorString*, const bool* repo
rtProgress) | 259 void InspectorHeapProfilerAgent::takeHeapSnapshot(ErrorString* errorString, cons
t bool* reportProgress) |
260 { | 260 { |
261 class HeapSnapshotProgress FINAL : public ScriptProfiler::HeapSnapshotProgre
ss { | 261 class HeapSnapshotProgress FINAL : public ScriptProfiler::HeapSnapshotProgre
ss { |
262 public: | 262 public: |
263 explicit HeapSnapshotProgress(InspectorFrontend::HeapProfiler* frontend) | 263 explicit HeapSnapshotProgress(InspectorFrontend::HeapProfiler* frontend) |
264 : m_frontend(frontend) { } | 264 : m_frontend(frontend) { } |
265 virtual void Start(int totalWork) OVERRIDE | 265 virtual void Start(int totalWork) OVERRIDE |
266 { | 266 { |
267 m_totalWork = totalWork; | 267 m_totalWork = totalWork; |
268 } | 268 } |
269 virtual void Worked(int workDone) OVERRIDE | 269 virtual void Worked(int workDone) OVERRIDE |
270 { | 270 { |
271 if (m_frontend) | 271 if (m_frontend) |
272 m_frontend->reportHeapSnapshotProgress(workDone, m_totalWork); | 272 m_frontend->reportHeapSnapshotProgress(workDone, m_totalWork, 0)
; |
273 } | 273 } |
274 virtual void Done() OVERRIDE { } | 274 virtual void Done() OVERRIDE |
| 275 { |
| 276 const bool finished = true; |
| 277 if (m_frontend) |
| 278 m_frontend->reportHeapSnapshotProgress(m_totalWork, m_totalWork,
&finished); |
| 279 } |
275 virtual bool isCanceled() OVERRIDE { return false; } | 280 virtual bool isCanceled() OVERRIDE { return false; } |
276 private: | 281 private: |
277 InspectorFrontend::HeapProfiler* m_frontend; | 282 InspectorFrontend::HeapProfiler* m_frontend; |
278 int m_totalWork; | 283 int m_totalWork; |
279 }; | 284 }; |
280 | 285 |
281 String title = "Snapshot " + String::number(m_nextUserInitiatedHeapSnapshotN
umber++); | 286 String title = "Snapshot " + String::number(m_nextUserInitiatedHeapSnapshotN
umber++); |
282 HeapSnapshotProgress progress(reportProgress && *reportProgress ? m_frontend
: 0); | 287 HeapSnapshotProgress progress(reportProgress && *reportProgress ? m_frontend
: 0); |
283 RefPtr<ScriptHeapSnapshot> snapshot = ScriptProfiler::takeHeapSnapshot(title
, &progress); | 288 RefPtr<ScriptHeapSnapshot> snapshot = ScriptProfiler::takeHeapSnapshot(title
, &progress); |
284 if (snapshot) { | 289 if (!snapshot) { |
285 m_snapshots.add(snapshot->uid(), snapshot); | 290 *errorString = "Failed to take heap snapshot"; |
286 if (m_frontend) | 291 return; |
287 m_frontend->addProfileHeader(createSnapshotHeader(*snapshot)); | 292 } |
| 293 |
| 294 class OutputStream : public ScriptHeapSnapshot::OutputStream { |
| 295 public: |
| 296 OutputStream(InspectorFrontend::HeapProfiler* frontend, unsigned uid) |
| 297 : m_frontend(frontend), m_uid(uid) { } |
| 298 void Write(const String& chunk) { m_frontend->addHeapSnapshotChunk(m_uid
, chunk); } |
| 299 void Close() { } |
| 300 private: |
| 301 InspectorFrontend::HeapProfiler* m_frontend; |
| 302 int m_uid; |
| 303 }; |
| 304 |
| 305 if (m_frontend) { |
| 306 unsigned uid = static_cast<unsigned>(snapshot->uid()); |
| 307 OutputStream stream(m_frontend, uid); |
| 308 snapshot->writeJSON(&stream); |
288 } | 309 } |
289 } | 310 } |
290 | 311 |
291 void InspectorHeapProfilerAgent::getObjectByHeapObjectId(ErrorString* error, con
st String& heapSnapshotObjectId, const String* objectGroup, RefPtr<TypeBuilder::
Runtime::RemoteObject>& result) | 312 void InspectorHeapProfilerAgent::getObjectByHeapObjectId(ErrorString* error, con
st String& heapSnapshotObjectId, const String* objectGroup, RefPtr<TypeBuilder::
Runtime::RemoteObject>& result) |
292 { | 313 { |
293 bool ok; | 314 bool ok; |
294 unsigned id = heapSnapshotObjectId.toUInt(&ok); | 315 unsigned id = heapSnapshotObjectId.toUInt(&ok); |
295 if (!ok) { | 316 if (!ok) { |
296 *error = "Invalid heap snapshot object id"; | 317 *error = "Invalid heap snapshot object id"; |
297 return; | 318 return; |
(...skipping 25 matching lines...) Expand all Loading... |
323 if (value.hasNoValue() || value.isUndefined()) { | 344 if (value.hasNoValue() || value.isUndefined()) { |
324 *errorString = "Object with given id not found"; | 345 *errorString = "Object with given id not found"; |
325 return; | 346 return; |
326 } | 347 } |
327 unsigned id = ScriptProfiler::getHeapObjectId(value); | 348 unsigned id = ScriptProfiler::getHeapObjectId(value); |
328 *heapSnapshotObjectId = String::number(id); | 349 *heapSnapshotObjectId = String::number(id); |
329 } | 350 } |
330 | 351 |
331 } // namespace WebCore | 352 } // namespace WebCore |
332 | 353 |
OLD | NEW |