OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 #include "src/log.h" | 5 #include "src/log.h" |
6 | 6 |
7 #include <cstdarg> | 7 #include <cstdarg> |
8 #include <sstream> | 8 #include <sstream> |
9 | 9 |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 #define LL_LOG(Call) if (ll_logger_) ll_logger_->Call; | 291 #define LL_LOG(Call) if (ll_logger_) ll_logger_->Call; |
292 | 292 |
293 class LowLevelLogger : public CodeEventLogger { | 293 class LowLevelLogger : public CodeEventLogger { |
294 public: | 294 public: |
295 explicit LowLevelLogger(const char* file_name); | 295 explicit LowLevelLogger(const char* file_name); |
296 ~LowLevelLogger() override; | 296 ~LowLevelLogger() override; |
297 | 297 |
298 void CodeMoveEvent(AbstractCode* from, Address to) override; | 298 void CodeMoveEvent(AbstractCode* from, Address to) override; |
299 void CodeDisableOptEvent(AbstractCode* code, | 299 void CodeDisableOptEvent(AbstractCode* code, |
300 SharedFunctionInfo* shared) override {} | 300 SharedFunctionInfo* shared) override {} |
301 void SnapshotPositionEvent(Address addr, int pos); | 301 void SnapshotPositionEvent(HeapObject* obj, int pos); |
302 void CodeMovingGCEvent() override; | 302 void CodeMovingGCEvent() override; |
303 | 303 |
304 private: | 304 private: |
305 void LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo* shared, | 305 void LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo* shared, |
306 const char* name, int length) override; | 306 const char* name, int length) override; |
307 | 307 |
308 // Low-level profiling event structures. | 308 // Low-level profiling event structures. |
309 struct CodeCreateStruct { | 309 struct CodeCreateStruct { |
310 static const char kTag = 'C'; | 310 static const char kTag = 'C'; |
311 | 311 |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 } | 414 } |
415 | 415 |
416 void LowLevelLogger::CodeMoveEvent(AbstractCode* from, Address to) { | 416 void LowLevelLogger::CodeMoveEvent(AbstractCode* from, Address to) { |
417 CodeMoveStruct event; | 417 CodeMoveStruct event; |
418 event.from_address = from->instruction_start(); | 418 event.from_address = from->instruction_start(); |
419 size_t header_size = from->instruction_start() - from->address(); | 419 size_t header_size = from->instruction_start() - from->address(); |
420 event.to_address = to + header_size; | 420 event.to_address = to + header_size; |
421 LogWriteStruct(event); | 421 LogWriteStruct(event); |
422 } | 422 } |
423 | 423 |
424 void LowLevelLogger::SnapshotPositionEvent(Address addr, int pos) { | 424 void LowLevelLogger::SnapshotPositionEvent(HeapObject* obj, int pos) { |
425 HeapObject* obj = HeapObject::FromAddress(addr); | |
426 if (obj->IsAbstractCode()) { | 425 if (obj->IsAbstractCode()) { |
427 SnapshotPositionStruct event; | 426 SnapshotPositionStruct event; |
428 event.address = | 427 event.address = |
429 addr + (obj->IsCode() ? Code::kHeaderSize : BytecodeArray::kHeaderSize); | 428 obj->address() + |
| 429 (obj->IsCode() ? Code::kHeaderSize : BytecodeArray::kHeaderSize); |
430 event.position = pos; | 430 event.position = pos; |
431 LogWriteStruct(event); | 431 LogWriteStruct(event); |
432 } | 432 } |
433 } | 433 } |
434 | 434 |
435 | 435 |
436 void LowLevelLogger::LogWriteBytes(const char* bytes, int size) { | 436 void LowLevelLogger::LogWriteBytes(const char* bytes, int size) { |
437 size_t rv = fwrite(bytes, 1, size, ll_output_handle_); | 437 size_t rv = fwrite(bytes, 1, size, ll_output_handle_); |
438 DCHECK(static_cast<size_t>(size) == rv); | 438 DCHECK(static_cast<size_t>(size) == rv); |
439 USE(rv); | 439 USE(rv); |
(...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1287 | 1287 |
1288 | 1288 |
1289 void Logger::CodeNameEvent(Address addr, int pos, const char* code_name) { | 1289 void Logger::CodeNameEvent(Address addr, int pos, const char* code_name) { |
1290 if (code_name == NULL) return; // Not a code object. | 1290 if (code_name == NULL) return; // Not a code object. |
1291 Log::MessageBuilder msg(log_); | 1291 Log::MessageBuilder msg(log_); |
1292 msg.Append("%s,%d,", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos); | 1292 msg.Append("%s,%d,", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos); |
1293 msg.AppendDoubleQuotedString(code_name); | 1293 msg.AppendDoubleQuotedString(code_name); |
1294 msg.WriteToLogFile(); | 1294 msg.WriteToLogFile(); |
1295 } | 1295 } |
1296 | 1296 |
1297 | 1297 void Logger::SnapshotPositionEvent(HeapObject* obj, int pos) { |
1298 void Logger::SnapshotPositionEvent(Address addr, int pos) { | |
1299 if (!log_->IsEnabled()) return; | 1298 if (!log_->IsEnabled()) return; |
1300 LL_LOG(SnapshotPositionEvent(addr, pos)); | 1299 LL_LOG(SnapshotPositionEvent(obj, pos)); |
1301 if (!FLAG_log_snapshot_positions) return; | 1300 if (!FLAG_log_snapshot_positions) return; |
1302 Log::MessageBuilder msg(log_); | 1301 Log::MessageBuilder msg(log_); |
1303 msg.Append("%s,", kLogEventsNames[SNAPSHOT_POSITION_EVENT]); | 1302 msg.Append("%s,", kLogEventsNames[SNAPSHOT_POSITION_EVENT]); |
1304 msg.AppendAddress(addr); | 1303 msg.AppendAddress(obj->address()); |
1305 msg.Append(",%d", pos); | 1304 msg.Append(",%d", pos); |
1306 msg.WriteToLogFile(); | 1305 msg.WriteToLogFile(); |
1307 } | 1306 } |
1308 | 1307 |
1309 | 1308 |
1310 void Logger::SharedFunctionInfoMoveEvent(Address from, Address to) { | 1309 void Logger::SharedFunctionInfoMoveEvent(Address from, Address to) { |
1311 if (!is_logging_code_events()) return; | 1310 if (!is_logging_code_events()) return; |
1312 MoveEventInternal(SHARED_FUNC_MOVE_EVENT, from, to); | 1311 MoveEventInternal(SHARED_FUNC_MOVE_EVENT, from, to); |
1313 } | 1312 } |
1314 | 1313 |
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1836 removeCodeEventListener(jit_logger_); | 1835 removeCodeEventListener(jit_logger_); |
1837 delete jit_logger_; | 1836 delete jit_logger_; |
1838 jit_logger_ = NULL; | 1837 jit_logger_ = NULL; |
1839 } | 1838 } |
1840 | 1839 |
1841 return log_->Close(); | 1840 return log_->Close(); |
1842 } | 1841 } |
1843 | 1842 |
1844 } // namespace internal | 1843 } // namespace internal |
1845 } // namespace v8 | 1844 } // namespace v8 |
OLD | NEW |