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

Unified Diff: runtime/vm/coverage.cc

Issue 143973005: Code coverage in Observatory (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 months 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: runtime/vm/coverage.cc
diff --git a/runtime/vm/coverage.cc b/runtime/vm/coverage.cc
index 9e5385c7a1bfb1308c1797596db4bb2e625ca7fd..b15857f4c837f8a4fd8609b149059edff5681ba2 100644
--- a/runtime/vm/coverage.cc
+++ b/runtime/vm/coverage.cc
@@ -89,6 +89,7 @@ void CodeCoverage::PrintClass(const Class& cls, const JSONArray& jsarr) {
script = function.script();
saved_url = script.url();
jsobj.AddProperty("source", saved_url.ToCString());
+ jsobj.AddProperty("script", script);
JSONArray hits_arr(&jsobj, "hits");
// We stay within this loop while we are seeing functions from the same
@@ -101,6 +102,10 @@ void CodeCoverage::PrintClass(const Class& cls, const JSONArray& jsarr) {
break;
}
CompileAndAdd(function, hits_arr);
+ if (function.HasImplicitClosureFunction()) {
+ function = function.ImplicitClosureFunction();
+ CompileAndAdd(function, hits_arr);
+ }
i++;
}
}
@@ -118,6 +123,7 @@ void CodeCoverage::PrintClass(const Class& cls, const JSONArray& jsarr) {
script = function.script();
saved_url = script.url();
jsobj.AddProperty("source", saved_url.ToCString());
+ jsobj.AddProperty("script", script);
JSONArray hits_arr(&jsobj, "hits");
// We stay within this loop while we are seeing functions from the same
@@ -150,25 +156,7 @@ void CodeCoverage::Write(Isolate* isolate) {
}
JSONStream stream;
- {
- const GrowableObjectArray& libs = GrowableObjectArray::Handle(
- isolate, isolate->object_store()->libraries());
- Library& lib = Library::Handle();
- Class& cls = Class::Handle();
- JSONArray jsarr(&stream);
- for (int i = 0; i < libs.Length(); i++) {
- lib ^= libs.At(i);
- ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
- while (it.HasNext()) {
- cls = it.GetNextClass();
- if (cls.EnsureIsFinalized(isolate) == Error::null()) {
- // Only classes that have been finalized do have a meaningful list of
- // functions.
- PrintClass(cls, jsarr);
- }
- }
- }
- }
+ PrintToJSONStream(isolate, &stream);
const char* format = "%s/dart-cov-%" Pd "-%" Pd ".json";
intptr_t pid = OS::ProcessId();
@@ -186,4 +174,30 @@ void CodeCoverage::Write(Isolate* isolate) {
(*file_close)(file);
}
+
+void CodeCoverage::PrintToJSONStream(Isolate* isolate, JSONStream* stream) {
+ const GrowableObjectArray& libs = GrowableObjectArray::Handle(
+ isolate, isolate->object_store()->libraries());
+ Library& lib = Library::Handle();
+ Class& cls = Class::Handle();
+ JSONObject coverage(stream);
+ coverage.AddProperty("type", "CodeCoverage");
+ {
+ JSONArray jsarr(&coverage, "coverage");
+ for (int i = 0; i < libs.Length(); i++) {
+ lib ^= libs.At(i);
+ ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
+ while (it.HasNext()) {
+ cls = it.GetNextClass();
+ if (cls.EnsureIsFinalized(isolate) == Error::null()) {
+ // Only classes that have been finalized do have a meaningful list of
+ // functions.
+ PrintClass(cls, jsarr);
+ }
+ }
+ }
+ }
turnidge 2014/01/21 23:34:40 Consider adding a test for this directly.
+}
+
+
} // namespace dart

Powered by Google App Engine
This is Rietveld 408576698