OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_LOG_H_ | 5 #ifndef V8_LOG_H_ |
6 #define V8_LOG_H_ | 6 #define V8_LOG_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 // Note that 'NATIVE_' cases for functions and scripts are mapped onto | 142 // Note that 'NATIVE_' cases for functions and scripts are mapped onto |
143 // original tags when writing to the log. | 143 // original tags when writing to the log. |
144 | 144 |
145 | 145 |
146 class JitLogger; | 146 class JitLogger; |
147 class PerfBasicLogger; | 147 class PerfBasicLogger; |
148 class LowLevelLogger; | 148 class LowLevelLogger; |
149 class PerfJitLogger; | 149 class PerfJitLogger; |
150 class Sampler; | 150 class Sampler; |
151 | 151 |
152 // Mapping from the offset within generated code to source line number. | |
153 class JITLineInfoTable : public Malloced { | |
154 public: | |
155 JITLineInfoTable() : pc_offset_infos_(20) {} | |
156 | |
157 void SetPosition(unsigned int pc_offset, unsigned int src_line) { | |
158 AddPcOffsetInfo(PcOffsetInfo(pc_offset, src_line)); | |
159 } | |
160 | |
161 int GetSourceLineNumber(unsigned int pc_offset) const { | |
162 int length = pc_offset_infos_.length(); | |
danno
2014/07/29 09:24:51
Why not use binary_search/lower_bound here?
| |
163 if (0 == length) return 0; | |
alph
2014/07/29 12:55:56
nit style: the v8 code doesn't seem to use const a
| |
164 | |
165 int low = 0; | |
166 int high = length - 1; | |
167 | |
168 if (pc_offset > pc_offset_infos_[high].pc_offset_) { | |
169 return 0; // out of range | |
170 } | |
171 | |
172 while (low < high) { | |
173 int mid = (low + high) / 2; | |
174 const JITLineInfoTable::PcOffsetInfo& elem = pc_offset_infos_[mid]; | |
175 if (elem.pc_offset_ > pc_offset) { | |
176 high = mid; | |
177 continue; | |
178 } | |
179 if (elem.pc_offset_ < pc_offset) { | |
180 low = mid + 1; | |
181 continue; | |
182 } | |
183 return elem.line_; // found the element | |
184 } | |
185 | |
186 int line = pc_offset_infos_[high].line_; | |
187 return line; | |
188 } | |
189 | |
190 struct PcOffsetInfo { | |
191 PcOffsetInfo(unsigned int pc_offset, unsigned int src_line) | |
192 : pc_offset_(pc_offset), line_(src_line) { } | |
193 | |
194 unsigned int pc_offset_; | |
195 unsigned int line_; | |
196 }; | |
197 | |
198 List<PcOffsetInfo>* entries() { return &pc_offset_infos_; } | |
199 const List<PcOffsetInfo>* entries() const { return &pc_offset_infos_; } | |
200 | |
201 JITLineInfoTable& operator=(const JITLineInfoTable& other) { | |
202 if (this != &other) { | |
203 const List<PcOffsetInfo>* entries = other.entries(); | |
204 if (entries) { | |
205 pc_offset_infos_.Clear(); | |
206 pc_offset_infos_.AddAll(*entries); | |
207 } | |
208 } | |
209 return *this; | |
210 } | |
211 | |
212 private: | |
213 void AddPcOffsetInfo(const PcOffsetInfo& pc_offset_info) { | |
214 pc_offset_infos_.Add(pc_offset_info); | |
alph
2014/07/29 12:55:56
As long as the algo expects the entries are sorted
| |
215 } | |
216 | |
217 // The data reported by code generator. | |
218 List<PcOffsetInfo> pc_offset_infos_; | |
219 }; | |
220 | |
221 | |
152 class Logger { | 222 class Logger { |
153 public: | 223 public: |
154 enum StartEnd { START = 0, END = 1 }; | 224 enum StartEnd { START = 0, END = 1 }; |
155 | 225 |
156 #define DECLARE_ENUM(enum_item, ignore) enum_item, | 226 #define DECLARE_ENUM(enum_item, ignore) enum_item, |
157 enum LogEventsAndTags { | 227 enum LogEventsAndTags { |
158 LOG_EVENTS_AND_TAGS_LIST(DECLARE_ENUM) | 228 LOG_EVENTS_AND_TAGS_LIST(DECLARE_ENUM) |
159 NUMBER_OF_LOG_EVENTS | 229 NUMBER_OF_LOG_EVENTS |
160 }; | 230 }; |
161 #undef DECLARE_ENUM | 231 #undef DECLARE_ENUM |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
532 int length) = 0; | 602 int length) = 0; |
533 | 603 |
534 NameBuffer* name_buffer_; | 604 NameBuffer* name_buffer_; |
535 }; | 605 }; |
536 | 606 |
537 | 607 |
538 } } // namespace v8::internal | 608 } } // namespace v8::internal |
539 | 609 |
540 | 610 |
541 #endif // V8_LOG_H_ | 611 #endif // V8_LOG_H_ |
OLD | NEW |