Index: content/shell/renderer/leak_detector.cc |
diff --git a/content/shell/renderer/leak_detector.cc b/content/shell/renderer/leak_detector.cc |
index 2af12beaff222f662db6030f6cc54ecef1164eae..53ecdb262f345226e9b29ad3b9624769cdea1a2f 100644 |
--- a/content/shell/renderer/leak_detector.cc |
+++ b/content/shell/renderer/leak_detector.cc |
@@ -4,7 +4,9 @@ |
#include "content/shell/renderer/leak_detector.h" |
+#include "base/json/json_writer.h" |
#include "base/logging.h" |
+#include "base/values.h" |
#include "third_party/WebKit/public/web/WebLeakDetector.h" |
using blink::WebLeakDetector; |
@@ -18,20 +20,37 @@ LeakDetector::LeakDetector() |
LeakDetectionResult LeakDetector::TryLeakDetection(blink::WebFrame* frame) { |
LeakDetectionResult result; |
- result.number_of_live_documents = 0; |
- result.number_of_live_nodes = 0; |
+ unsigned number_of_live_documents = 0; |
+ unsigned number_of_live_nodes = 0; |
WebLeakDetector::collectGarbargeAndGetDOMCounts( |
- frame, &result.number_of_live_documents, &result.number_of_live_nodes); |
+ frame, &number_of_live_documents, &number_of_live_nodes); |
result.leaked = |
previous_number_of_live_documents_ > 0 && |
previous_number_of_live_nodes_ > 0 && |
- (previous_number_of_live_documents_ < result.number_of_live_documents || |
- previous_number_of_live_nodes_ < result.number_of_live_nodes); |
- |
- previous_number_of_live_documents_ = result.number_of_live_documents; |
- previous_number_of_live_nodes_ = result.number_of_live_nodes; |
+ (previous_number_of_live_documents_ < number_of_live_documents || |
+ previous_number_of_live_nodes_ < number_of_live_nodes); |
+ |
+ if (result.leaked) { |
+ base::DictionaryValue detail; |
+ base::ListValue* list = new base::ListValue(); |
+ list->AppendInteger(previous_number_of_live_documents_); |
+ list->AppendInteger(number_of_live_documents); |
+ detail.Set("numberOfLiveDocuments", list); |
+ |
+ list = new base::ListValue(); |
+ list->AppendInteger(previous_number_of_live_nodes_); |
+ list->AppendInteger(number_of_live_nodes); |
+ detail.Set("numberOfLiveNodes", list); |
+ |
+ std::string detail_str; |
+ base::JSONWriter::Write(&detail, &detail_str); |
+ result.detail = detail_str; |
+ } |
+ |
+ previous_number_of_live_documents_ = number_of_live_documents; |
+ previous_number_of_live_nodes_ = number_of_live_nodes; |
return result; |
} |