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

Unified Diff: src/cpu-profiler.cc

Issue 424973004: Extend CPU profiler with mapping ticks to source lines (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 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: src/cpu-profiler.cc
diff --git a/src/cpu-profiler.cc b/src/cpu-profiler.cc
index 54fec77a2a3a3b6f087ffd546ba5cd1221546321..d05a9597e8cc67a23286e8c90c6d5b6395560bfc 100644
--- a/src/cpu-profiler.cc
+++ b/src/cpu-profiler.cc
@@ -257,17 +257,34 @@ void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag,
CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
rec->start = code->address();
+ // Get line info from the relocation information.
+ ASSERT(Script::cast(shared->script()));
+ JITLineInfoTable line_table;
yurys 2014/07/29 13:15:10 Consider allocating JITLineInfoTable on the heap t
+ if (line > 0) {
+ for (RelocIterator it(code); !it.done(); it.next()) {
+ RelocInfo::Mode mode = it.rinfo()->rmode();
+ if (RelocInfo::IsPosition(mode)) {
+ int pc_offset = static_cast<int>(it.rinfo()->pc() - code->address());
+ int position = static_cast<int>(it.rinfo()->data());
+ int lineno =
+ Script::cast(shared->script())->GetLineNumber(position) + 1;
+ if (position >= 0 && lineno > 0) {
alph 2014/07/29 12:55:56 if position < 0 you don't need to make a call to G
+ line_table.SetPosition(pc_offset, lineno);
+ }
+ }
+ }
+ }
rec->entry = profiles_->NewCodeEntry(
tag,
profiles_->GetFunctionName(shared->DebugName()),
CodeEntry::kEmptyNamePrefix,
profiles_->GetName(source),
line,
- column);
+ column,
+ line_table.entries()->length() ? &line_table : NULL);
if (info) {
rec->entry->set_no_frame_ranges(info->ReleaseNoFrameRanges());
}
- ASSERT(Script::cast(shared->script()));
alph 2014/07/29 12:55:55 why is it gone?
Script* script = Script::cast(shared->script());
rec->entry->set_script_id(script->id()->value());
rec->size = code->ExecutableSize();

Powered by Google App Engine
This is Rietveld 408576698