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

Side by Side Diff: Source/core/inspector/ScriptProfile.cpp

Issue 719853003: Add source line info for JS Profiler ticks to debug protocol. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « no previous file | Source/devtools/protocol.json » ('j') | Source/devtools/protocol.json » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010, Google Inc. All rights reserved. 2 * Copyright (c) 2010, 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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 double ScriptProfile::startTime() const 57 double ScriptProfile::startTime() const
58 { 58 {
59 return static_cast<double>(m_profile->GetStartTime()) / 1000000; 59 return static_cast<double>(m_profile->GetStartTime()) / 1000000;
60 } 60 }
61 61
62 double ScriptProfile::endTime() const 62 double ScriptProfile::endTime() const
63 { 63 {
64 return static_cast<double>(m_profile->GetEndTime()) / 1000000; 64 return static_cast<double>(m_profile->GetEndTime()) / 1000000;
65 } 65 }
66 66
67 static RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::LineTick> > buildInspect orObjectForLineTicks(const v8::CpuProfileNode* node)
68 {
69 RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::LineTick> > array = TypeBui lder::Array<TypeBuilder::Profiler::LineTick>::create();
70 unsigned lineCount = node->GetHitLineCount();
71 if (lineCount) {
apavlov 2014/11/13 09:08:30 We prefer early bail-outs (this saves indentation
Pan 2014/11/17 01:14:22 Done.
72 Vector<v8::CpuProfileNode::LineTick> entries(lineCount);
73 bool res = node->GetLineTicks(&entries[0], lineCount);
apavlov 2014/11/13 09:08:30 This can be inlined into the conditional.
Pan 2014/11/17 01:14:22 Done.
74 if (res) {
75 for (unsigned i = 0; i < lineCount; i++) {
76 RefPtr<TypeBuilder::Profiler::LineTick> line = TypeBuilder::Prof iler::LineTick::create()
77 .setLine(entries[i].line)
78 .setTicks(entries[i].hit_count);
79 array->addItem(line);
apavlov 2014/11/13 09:08:30 line.release()
Pan 2014/11/17 01:14:22 Done.
80 line.release();
apavlov 2014/11/13 09:08:30 Remove this line, as it makes no sense this way. l
Pan 2014/11/17 01:14:22 Done.
81 }
82 }
83 }
84 return array;
85 }
86
67 static PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> buildInspectorObjectFor (const v8::CpuProfileNode* node) 87 static PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> buildInspectorObjectFor (const v8::CpuProfileNode* node)
68 { 88 {
69 v8::HandleScope handleScope(v8::Isolate::GetCurrent()); 89 v8::HandleScope handleScope(v8::Isolate::GetCurrent());
70 90
71 RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::CPUProfileNode> > children = TypeBuilder::Array<TypeBuilder::Profiler::CPUProfileNode>::create(); 91 RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::CPUProfileNode> > children = TypeBuilder::Array<TypeBuilder::Profiler::CPUProfileNode>::create();
72 const int childrenCount = node->GetChildrenCount(); 92 const int childrenCount = node->GetChildrenCount();
73 for (int i = 0; i < childrenCount; i++) { 93 for (int i = 0; i < childrenCount; i++) {
74 const v8::CpuProfileNode* child = node->GetChild(i); 94 const v8::CpuProfileNode* child = node->GetChild(i);
75 children->addItem(buildInspectorObjectFor(child)); 95 children->addItem(buildInspectorObjectFor(child));
76 } 96 }
77 97
98 RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::LineTick> > lineTicks = bui ldInspectorObjectForLineTicks(node);
99
78 RefPtr<TypeBuilder::Profiler::CPUProfileNode> result = TypeBuilder::Profiler ::CPUProfileNode::create() 100 RefPtr<TypeBuilder::Profiler::CPUProfileNode> result = TypeBuilder::Profiler ::CPUProfileNode::create()
79 .setFunctionName(toCoreString(node->GetFunctionName())) 101 .setFunctionName(toCoreString(node->GetFunctionName()))
80 .setScriptId(String::number(node->GetScriptId())) 102 .setScriptId(String::number(node->GetScriptId()))
81 .setUrl(toCoreString(node->GetScriptResourceName())) 103 .setUrl(toCoreString(node->GetScriptResourceName()))
82 .setLineNumber(node->GetLineNumber()) 104 .setLineNumber(node->GetLineNumber())
83 .setColumnNumber(node->GetColumnNumber()) 105 .setColumnNumber(node->GetColumnNumber())
84 .setHitCount(node->GetHitCount()) 106 .setHitCount(node->GetHitCount())
85 .setCallUID(node->GetCallUid()) 107 .setCallUID(node->GetCallUid())
86 .setChildren(children.release()) 108 .setChildren(children.release())
109 .setLineTicks(lineTicks.release())
87 .setDeoptReason(node->GetBailoutReason()) 110 .setDeoptReason(node->GetBailoutReason())
88 .setId(node->GetNodeId()); 111 .setId(node->GetNodeId());
89 return result.release(); 112 return result.release();
90 } 113 }
91 114
92 PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> ScriptProfile::buildInspectorO bjectForHead() const 115 PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> ScriptProfile::buildInspectorO bjectForHead() const
93 { 116 {
94 return buildInspectorObjectFor(m_profile->GetTopDownRoot()); 117 return buildInspectorObjectFor(m_profile->GetTopDownRoot());
95 } 118 }
96 119
97 PassRefPtr<TypeBuilder::Array<int> > ScriptProfile::buildInspectorObjectForSampl es() const 120 PassRefPtr<TypeBuilder::Array<int> > ScriptProfile::buildInspectorObjectForSampl es() const
98 { 121 {
99 RefPtr<TypeBuilder::Array<int> > array = TypeBuilder::Array<int>::create(); 122 RefPtr<TypeBuilder::Array<int> > array = TypeBuilder::Array<int>::create();
100 int count = m_profile->GetSamplesCount(); 123 int count = m_profile->GetSamplesCount();
101 for (int i = 0; i < count; i++) 124 for (int i = 0; i < count; i++)
102 array->addItem(m_profile->GetSample(i)->GetNodeId()); 125 array->addItem(m_profile->GetSample(i)->GetNodeId());
103 return array.release(); 126 return array.release();
104 } 127 }
105 128
106 PassRefPtr<TypeBuilder::Array<double> > ScriptProfile::buildInspectorObjectForTi mestamps() const 129 PassRefPtr<TypeBuilder::Array<double> > ScriptProfile::buildInspectorObjectForTi mestamps() const
107 { 130 {
108 RefPtr<TypeBuilder::Array<double> > array = TypeBuilder::Array<double>::crea te(); 131 RefPtr<TypeBuilder::Array<double> > array = TypeBuilder::Array<double>::crea te();
109 int count = m_profile->GetSamplesCount(); 132 int count = m_profile->GetSamplesCount();
110 for (int i = 0; i < count; i++) 133 for (int i = 0; i < count; i++)
111 array->addItem(m_profile->GetSampleTimestamp(i)); 134 array->addItem(m_profile->GetSampleTimestamp(i));
112 return array.release(); 135 return array.release();
113 } 136 }
114 137
115 } // namespace blink 138 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | Source/devtools/protocol.json » ('j') | Source/devtools/protocol.json » ('J')

Powered by Google App Engine
This is Rietveld 408576698