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

Unified Diff: runtime/vm/profiler.cc

Issue 182703003: Cleanup native, collected, and stub code handling in profiler (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/profiler.cc
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 0eb106f2d53588e6c93682f9243f285daa4c3dd8..c8a2374fa7c7b6c1bfdfa160aa9050be2622ea1f 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -329,7 +329,31 @@ class CodeRegion : public ZoneAllocated {
AddCallEntry(callees_table_, index);
}
- void PrintToJSONArray(JSONArray* events, bool full) {
+ void PrintNativeCode(JSONObject* profile_code_obj) {
+ ASSERT(kind() == kNativeCode);
+ JSONObject obj(profile_code_obj, "code");
+ obj.AddProperty("type", "@Code");
+ obj.AddProperty("kind", "Native");
+ obj.AddProperty("name", name());
+ obj.AddProperty("user_name", name());
+ obj.AddPropertyF("start", "%" Px "", start());
+ obj.AddPropertyF("end", "%" Px "", end());
+ obj.AddPropertyF("id", "code/native/%" Px "", start());
+ }
+
+ void PrintCollectedCode(JSONObject* profile_code_obj) {
+ ASSERT(kind() == kCollectedCode);
+ JSONObject obj(profile_code_obj, "code");
+ obj.AddProperty("type", "@Code");
+ obj.AddProperty("kind", "Collected");
+ obj.AddProperty("name", name());
+ obj.AddProperty("user_name", name());
+ obj.AddPropertyF("start", "%" Px "", start());
+ obj.AddPropertyF("end", "%" Px "", end());
+ obj.AddPropertyF("id", "code/collected/%" Px "", start());
+ }
+
+ void PrintToJSONArray(Isolate* isolate, JSONArray* events, bool full) {
JSONObject obj(events);
obj.AddProperty("type", "ProfileCode");
obj.AddProperty("kind", KindToCString(kind()));
@@ -337,36 +361,27 @@ class CodeRegion : public ZoneAllocated {
obj.AddPropertyF("exclusive_ticks", "%" Pd "", exclusive_ticks());
if (kind() == kDartCode) {
// Look up code in Dart heap.
- Code& code = Code::Handle(Code::LookupCode(start()));
- Function& func = Function::Handle();
- ASSERT(!code.IsNull());
- func ^= code.function();
- if (func.IsNull()) {
- if (name() == NULL) {
- const char* stub_name = StubCode::NameOfStub(start());
- GenerateAndSetSymbolName(stub_name == NULL ? "Stub" : stub_name);
- }
- obj.AddPropertyF("start", "%" Px "", start());
- obj.AddPropertyF("end", "%" Px "", end());
- obj.AddProperty("name", name());
- } else {
- obj.AddProperty("code", code, !full);
+ Code& code = Code::Handle();
+ code ^= Code::LookupCode(start());
+ if (code.IsNull()) {
+ // Code is a stub in the Vm isolate.
+ code ^= Code::LookupCodeInVmIsolate(start());
}
+ ASSERT(!code.IsNull());
+ obj.AddProperty("code", code, !full);
} else if (kind() == kCollectedCode) {
if (name() == NULL) {
+ // Lazily set generated name.
GenerateAndSetSymbolName("Collected");
}
- obj.AddPropertyF("start", "%" Px "", start());
- obj.AddPropertyF("end", "%" Px "", end());
- obj.AddProperty("name", name());
+ PrintCollectedCode(&obj);
} else {
ASSERT(kind() == kNativeCode);
if (name() == NULL) {
+ // Lazily set generated name.
GenerateAndSetSymbolName("Native");
}
- obj.AddPropertyF("start", "%" Px "", start());
- obj.AddPropertyF("end", "%" Px "", end());
- obj.AddProperty("name", name());
+ PrintNativeCode(&obj);
}
{
JSONArray ticks(&obj, "ticks");
@@ -549,13 +564,19 @@ class ProfilerCodeRegionTable : public ValueObject {
}
CodeRegion* CreateCodeRegion(uword pc) {
- Code& code = Code::Handle(Code::LookupCode(pc));
+ Code& code = Code::Handle();
+ code ^= Code::LookupCode(pc);
+ if (!code.IsNull()) {
+ return new CodeRegion(CodeRegion::kDartCode, code.EntryPoint(),
+ code.EntryPoint() + code.Size());
+ }
+ code ^= Code::LookupCodeInVmIsolate(pc);
if (!code.IsNull()) {
return new CodeRegion(CodeRegion::kDartCode, code.EntryPoint(),
code.EntryPoint() + code.Size());
}
if (heap_->CodeContains(pc)) {
- const intptr_t kDartCodeAlignment = 0x10;
+ const intptr_t kDartCodeAlignment = OS::PreferredCodeAlignment();
const intptr_t kDartCodeAlignmentMask = ~(kDartCodeAlignment - 1);
return new CodeRegion(CodeRegion::kCollectedCode, pc,
(pc & kDartCodeAlignmentMask) + kDartCodeAlignment);
@@ -790,7 +811,7 @@ void Profiler::PrintToJSONStream(Isolate* isolate, JSONStream* stream,
for (intptr_t i = 0; i < code_region_table.Length(); i++) {
CodeRegion* region = code_region_table.At(i);
ASSERT(region != NULL);
- region->PrintToJSONArray(&codes, full);
+ region->PrintToJSONArray(isolate, &codes, full);
}
}
}
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698