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

Side by Side Diff: src/log.cc

Issue 358363002: Move platform abstraction to base library (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <stdarg.h> 5 #include <stdarg.h>
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/base/platform/platform.h"
9 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
10 #include "src/code-stubs.h" 11 #include "src/code-stubs.h"
11 #include "src/cpu-profiler.h" 12 #include "src/cpu-profiler.h"
12 #include "src/deoptimizer.h" 13 #include "src/deoptimizer.h"
13 #include "src/global-handles.h" 14 #include "src/global-handles.h"
14 #include "src/log.h" 15 #include "src/log.h"
15 #include "src/log-utils.h" 16 #include "src/log-utils.h"
16 #include "src/macro-assembler.h" 17 #include "src/macro-assembler.h"
17 #include "src/platform.h"
18 #include "src/runtime-profiler.h" 18 #include "src/runtime-profiler.h"
19 #include "src/serialize.h" 19 #include "src/serialize.h"
20 #include "src/string-stream.h" 20 #include "src/string-stream.h"
21 #include "src/vm-state-inl.h" 21 #include "src/vm-state-inl.h"
22 22
23 namespace v8 { 23 namespace v8 {
24 namespace internal { 24 namespace internal {
25 25
26 26
27 #define DECLARE_EVENT(ignore1, name) name, 27 #define DECLARE_EVENT(ignore1, name) name,
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 const int PerfBasicLogger::kFilenameBufferPadding = 16; 255 const int PerfBasicLogger::kFilenameBufferPadding = 16;
256 256
257 PerfBasicLogger::PerfBasicLogger() 257 PerfBasicLogger::PerfBasicLogger()
258 : perf_output_handle_(NULL) { 258 : perf_output_handle_(NULL) {
259 // Open the perf JIT dump file. 259 // Open the perf JIT dump file.
260 int bufferSize = sizeof(kFilenameFormatString) + kFilenameBufferPadding; 260 int bufferSize = sizeof(kFilenameFormatString) + kFilenameBufferPadding;
261 ScopedVector<char> perf_dump_name(bufferSize); 261 ScopedVector<char> perf_dump_name(bufferSize);
262 int size = SNPrintF( 262 int size = SNPrintF(
263 perf_dump_name, 263 perf_dump_name,
264 kFilenameFormatString, 264 kFilenameFormatString,
265 OS::GetCurrentProcessId()); 265 base::OS::GetCurrentProcessId());
266 CHECK_NE(size, -1); 266 CHECK_NE(size, -1);
267 perf_output_handle_ = OS::FOpen(perf_dump_name.start(), OS::LogFileOpenMode); 267 perf_output_handle_ =
268 base::OS::FOpen(perf_dump_name.start(), base::OS::LogFileOpenMode);
268 CHECK_NE(perf_output_handle_, NULL); 269 CHECK_NE(perf_output_handle_, NULL);
269 setvbuf(perf_output_handle_, NULL, _IOFBF, kLogBufferSize); 270 setvbuf(perf_output_handle_, NULL, _IOFBF, kLogBufferSize);
270 } 271 }
271 272
272 273
273 PerfBasicLogger::~PerfBasicLogger() { 274 PerfBasicLogger::~PerfBasicLogger() {
274 fclose(perf_output_handle_); 275 fclose(perf_output_handle_);
275 perf_output_handle_ = NULL; 276 perf_output_handle_ = NULL;
276 } 277 }
277 278
278 279
279 void PerfBasicLogger::LogRecordedBuffer(Code* code, 280 void PerfBasicLogger::LogRecordedBuffer(Code* code,
280 SharedFunctionInfo*, 281 SharedFunctionInfo*,
281 const char* name, 282 const char* name,
282 int length) { 283 int length) {
283 ASSERT(code->instruction_start() == code->address() + Code::kHeaderSize); 284 ASSERT(code->instruction_start() == code->address() + Code::kHeaderSize);
284 285
285 OS::FPrint(perf_output_handle_, "%llx %x %.*s\n", 286 base::OS::FPrint(perf_output_handle_, "%llx %x %.*s\n",
286 reinterpret_cast<uint64_t>(code->instruction_start()), 287 reinterpret_cast<uint64_t>(code->instruction_start()),
287 code->instruction_size(), 288 code->instruction_size(), length, name);
288 length, name);
289 } 289 }
290 290
291 291
292 // Linux perf tool logging support 292 // Linux perf tool logging support
293 class PerfJitLogger : public CodeEventLogger { 293 class PerfJitLogger : public CodeEventLogger {
294 public: 294 public:
295 PerfJitLogger(); 295 PerfJitLogger();
296 virtual ~PerfJitLogger(); 296 virtual ~PerfJitLogger();
297 297
298 virtual void CodeMoveEvent(Address from, Address to) { } 298 virtual void CodeMoveEvent(Address from, Address to) { }
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 const int PerfJitLogger::kFilenameBufferPadding = 16; 379 const int PerfJitLogger::kFilenameBufferPadding = 16;
380 380
381 PerfJitLogger::PerfJitLogger() 381 PerfJitLogger::PerfJitLogger()
382 : perf_output_handle_(NULL) { 382 : perf_output_handle_(NULL) {
383 // Open the perf JIT dump file. 383 // Open the perf JIT dump file.
384 int bufferSize = sizeof(kFilenameFormatString) + kFilenameBufferPadding; 384 int bufferSize = sizeof(kFilenameFormatString) + kFilenameBufferPadding;
385 ScopedVector<char> perf_dump_name(bufferSize); 385 ScopedVector<char> perf_dump_name(bufferSize);
386 int size = SNPrintF( 386 int size = SNPrintF(
387 perf_dump_name, 387 perf_dump_name,
388 kFilenameFormatString, 388 kFilenameFormatString,
389 OS::GetCurrentProcessId()); 389 base::OS::GetCurrentProcessId());
390 CHECK_NE(size, -1); 390 CHECK_NE(size, -1);
391 perf_output_handle_ = OS::FOpen(perf_dump_name.start(), OS::LogFileOpenMode); 391 perf_output_handle_ =
392 base::OS::FOpen(perf_dump_name.start(), base::OS::LogFileOpenMode);
392 CHECK_NE(perf_output_handle_, NULL); 393 CHECK_NE(perf_output_handle_, NULL);
393 setvbuf(perf_output_handle_, NULL, _IOFBF, kLogBufferSize); 394 setvbuf(perf_output_handle_, NULL, _IOFBF, kLogBufferSize);
394 395
395 LogWriteHeader(); 396 LogWriteHeader();
396 } 397 }
397 398
398 399
399 PerfJitLogger::~PerfJitLogger() { 400 PerfJitLogger::~PerfJitLogger() {
400 fclose(perf_output_handle_); 401 fclose(perf_output_handle_);
401 perf_output_handle_ = NULL; 402 perf_output_handle_ = NULL;
(...skipping 10 matching lines...) Expand all
412 const char* code_name = name; 413 const char* code_name = name;
413 uint8_t* code_pointer = reinterpret_cast<uint8_t*>(code->instruction_start()); 414 uint8_t* code_pointer = reinterpret_cast<uint8_t*>(code->instruction_start());
414 uint32_t code_size = code->instruction_size(); 415 uint32_t code_size = code->instruction_size();
415 416
416 static const char string_terminator[] = "\0"; 417 static const char string_terminator[] = "\0";
417 418
418 jr_code_load code_load; 419 jr_code_load code_load;
419 code_load.id = JIT_CODE_LOAD; 420 code_load.id = JIT_CODE_LOAD;
420 code_load.total_size = sizeof(code_load) + length + 1 + code_size; 421 code_load.total_size = sizeof(code_load) + length + 1 + code_size;
421 code_load.timestamp = 422 code_load.timestamp =
422 static_cast<uint64_t>(OS::TimeCurrentMillis() * 1000.0); 423 static_cast<uint64_t>(base::OS::TimeCurrentMillis() * 1000.0);
423 code_load.vma = 0x0; // Our addresses are absolute. 424 code_load.vma = 0x0; // Our addresses are absolute.
424 code_load.code_addr = reinterpret_cast<uint64_t>(code->instruction_start()); 425 code_load.code_addr = reinterpret_cast<uint64_t>(code->instruction_start());
425 code_load.code_size = code_size; 426 code_load.code_size = code_size;
426 code_load.align = 0; 427 code_load.align = 0;
427 428
428 LogWriteBytes(reinterpret_cast<const char*>(&code_load), sizeof(code_load)); 429 LogWriteBytes(reinterpret_cast<const char*>(&code_load), sizeof(code_load));
429 LogWriteBytes(code_name, length); 430 LogWriteBytes(code_name, length);
430 LogWriteBytes(string_terminator, 1); 431 LogWriteBytes(string_terminator, 1);
431 LogWriteBytes(reinterpret_cast<const char*>(code_pointer), code_size); 432 LogWriteBytes(reinterpret_cast<const char*>(code_pointer), code_size);
432 } 433 }
433 434
434 435
435 void PerfJitLogger::LogWriteBytes(const char* bytes, int size) { 436 void PerfJitLogger::LogWriteBytes(const char* bytes, int size) {
436 size_t rv = fwrite(bytes, 1, size, perf_output_handle_); 437 size_t rv = fwrite(bytes, 1, size, perf_output_handle_);
437 ASSERT(static_cast<size_t>(size) == rv); 438 ASSERT(static_cast<size_t>(size) == rv);
438 USE(rv); 439 USE(rv);
439 } 440 }
440 441
441 442
442 void PerfJitLogger::LogWriteHeader() { 443 void PerfJitLogger::LogWriteHeader() {
443 ASSERT(perf_output_handle_ != NULL); 444 ASSERT(perf_output_handle_ != NULL);
444 jitheader header; 445 jitheader header;
445 header.magic = kJitHeaderMagic; 446 header.magic = kJitHeaderMagic;
446 header.version = kJitHeaderVersion; 447 header.version = kJitHeaderVersion;
447 header.total_size = sizeof(jitheader); 448 header.total_size = sizeof(jitheader);
448 header.pad1 = 0xdeadbeef; 449 header.pad1 = 0xdeadbeef;
449 header.elf_mach = GetElfMach(); 450 header.elf_mach = GetElfMach();
450 header.pid = OS::GetCurrentProcessId(); 451 header.pid = base::OS::GetCurrentProcessId();
451 header.timestamp = static_cast<uint64_t>(OS::TimeCurrentMillis() * 1000.0); 452 header.timestamp =
453 static_cast<uint64_t>(base::OS::TimeCurrentMillis() * 1000.0);
452 LogWriteBytes(reinterpret_cast<const char*>(&header), sizeof(header)); 454 LogWriteBytes(reinterpret_cast<const char*>(&header), sizeof(header));
453 } 455 }
454 456
455 457
456 // Low-level logging support. 458 // Low-level logging support.
457 #define LL_LOG(Call) if (ll_logger_) ll_logger_->Call; 459 #define LL_LOG(Call) if (ll_logger_) ll_logger_->Call;
458 460
459 class LowLevelLogger : public CodeEventLogger { 461 class LowLevelLogger : public CodeEventLogger {
460 public: 462 public:
461 explicit LowLevelLogger(const char* file_name); 463 explicit LowLevelLogger(const char* file_name);
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 533
532 const char LowLevelLogger::kLogExt[] = ".ll"; 534 const char LowLevelLogger::kLogExt[] = ".ll";
533 535
534 LowLevelLogger::LowLevelLogger(const char* name) 536 LowLevelLogger::LowLevelLogger(const char* name)
535 : ll_output_handle_(NULL) { 537 : ll_output_handle_(NULL) {
536 // Open the low-level log file. 538 // Open the low-level log file.
537 size_t len = strlen(name); 539 size_t len = strlen(name);
538 ScopedVector<char> ll_name(static_cast<int>(len + sizeof(kLogExt))); 540 ScopedVector<char> ll_name(static_cast<int>(len + sizeof(kLogExt)));
539 MemCopy(ll_name.start(), name, len); 541 MemCopy(ll_name.start(), name, len);
540 MemCopy(ll_name.start() + len, kLogExt, sizeof(kLogExt)); 542 MemCopy(ll_name.start() + len, kLogExt, sizeof(kLogExt));
541 ll_output_handle_ = OS::FOpen(ll_name.start(), OS::LogFileOpenMode); 543 ll_output_handle_ =
544 base::OS::FOpen(ll_name.start(), base::OS::LogFileOpenMode);
542 setvbuf(ll_output_handle_, NULL, _IOFBF, kLogBufferSize); 545 setvbuf(ll_output_handle_, NULL, _IOFBF, kLogBufferSize);
543 546
544 LogCodeInfo(); 547 LogCodeInfo();
545 } 548 }
546 549
547 550
548 LowLevelLogger::~LowLevelLogger() { 551 LowLevelLogger::~LowLevelLogger() {
549 fclose(ll_output_handle_); 552 fclose(ll_output_handle_);
550 ll_output_handle_ = NULL; 553 ll_output_handle_ = NULL;
551 } 554 }
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 751
749 code_event_handler_(&event); 752 code_event_handler_(&event);
750 } 753 }
751 754
752 755
753 // The Profiler samples pc and sp values for the main thread. 756 // The Profiler samples pc and sp values for the main thread.
754 // Each sample is appended to a circular buffer. 757 // Each sample is appended to a circular buffer.
755 // An independent thread removes data and writes it to the log. 758 // An independent thread removes data and writes it to the log.
756 // This design minimizes the time spent in the sampler. 759 // This design minimizes the time spent in the sampler.
757 // 760 //
758 class Profiler: public Thread { 761 class Profiler: public base::Thread {
759 public: 762 public:
760 explicit Profiler(Isolate* isolate); 763 explicit Profiler(Isolate* isolate);
761 void Engage(); 764 void Engage();
762 void Disengage(); 765 void Disengage();
763 766
764 // Inserts collected profiling data into buffer. 767 // Inserts collected profiling data into buffer.
765 void Insert(TickSample* sample) { 768 void Insert(TickSample* sample) {
766 if (paused_) 769 if (paused_)
767 return; 770 return;
768 771
(...skipping 28 matching lines...) Expand all
797 800
798 Isolate* isolate_; 801 Isolate* isolate_;
799 // Cyclic buffer for communicating profiling samples 802 // Cyclic buffer for communicating profiling samples
800 // between the signal handler and the worker thread. 803 // between the signal handler and the worker thread.
801 static const int kBufferSize = 128; 804 static const int kBufferSize = 128;
802 TickSample buffer_[kBufferSize]; // Buffer storage. 805 TickSample buffer_[kBufferSize]; // Buffer storage.
803 int head_; // Index to the buffer head. 806 int head_; // Index to the buffer head.
804 int tail_; // Index to the buffer tail. 807 int tail_; // Index to the buffer tail.
805 bool overflow_; // Tell whether a buffer overflow has occurred. 808 bool overflow_; // Tell whether a buffer overflow has occurred.
806 // Sempahore used for buffer synchronization. 809 // Sempahore used for buffer synchronization.
807 Semaphore buffer_semaphore_; 810 base::Semaphore buffer_semaphore_;
808 811
809 // Tells whether profiler is engaged, that is, processing thread is stated. 812 // Tells whether profiler is engaged, that is, processing thread is stated.
810 bool engaged_; 813 bool engaged_;
811 814
812 // Tells whether worker thread should continue running. 815 // Tells whether worker thread should continue running.
813 bool running_; 816 bool running_;
814 817
815 // Tells whether we are currently recording tick samples. 818 // Tells whether we are currently recording tick samples.
816 bool paused_; 819 bool paused_;
817 }; 820 };
(...skipping 30 matching lines...) Expand all
848 851
849 private: 852 private:
850 Profiler* profiler_; 853 Profiler* profiler_;
851 }; 854 };
852 855
853 856
854 // 857 //
855 // Profiler implementation. 858 // Profiler implementation.
856 // 859 //
857 Profiler::Profiler(Isolate* isolate) 860 Profiler::Profiler(Isolate* isolate)
858 : Thread("v8:Profiler"), 861 : base::Thread("v8:Profiler"),
859 isolate_(isolate), 862 isolate_(isolate),
860 head_(0), 863 head_(0),
861 tail_(0), 864 tail_(0),
862 overflow_(false), 865 overflow_(false),
863 buffer_semaphore_(0), 866 buffer_semaphore_(0),
864 engaged_(false), 867 engaged_(false),
865 running_(false), 868 running_(false),
866 paused_(false) { 869 paused_(false) {
867 } 870 }
868 871
869 872
870 void Profiler::Engage() { 873 void Profiler::Engage() {
871 if (engaged_) return; 874 if (engaged_) return;
872 engaged_ = true; 875 engaged_ = true;
873 876
874 std::vector<OS::SharedLibraryAddress> addresses = 877 std::vector<base::OS::SharedLibraryAddress> addresses =
875 OS::GetSharedLibraryAddresses(); 878 base::OS::GetSharedLibraryAddresses();
876 for (size_t i = 0; i < addresses.size(); ++i) { 879 for (size_t i = 0; i < addresses.size(); ++i) {
877 LOG(isolate_, SharedLibraryEvent( 880 LOG(isolate_, SharedLibraryEvent(
878 addresses[i].library_path, addresses[i].start, addresses[i].end)); 881 addresses[i].library_path, addresses[i].start, addresses[i].end));
879 } 882 }
880 883
881 // Start thread processing the profiler buffer. 884 // Start thread processing the profiler buffer.
882 running_ = true; 885 running_ = true;
883 Start(); 886 Start();
884 887
885 // Register to get ticks. 888 // Register to get ticks.
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
1479 msg.WriteToLogFile(); 1482 msg.WriteToLogFile();
1480 } 1483 }
1481 1484
1482 1485
1483 void Logger::CodeMovingGCEvent() { 1486 void Logger::CodeMovingGCEvent() {
1484 PROFILER_LOG(CodeMovingGCEvent()); 1487 PROFILER_LOG(CodeMovingGCEvent());
1485 1488
1486 if (!is_logging_code_events()) return; 1489 if (!is_logging_code_events()) return;
1487 if (!log_->IsEnabled() || !FLAG_ll_prof) return; 1490 if (!log_->IsEnabled() || !FLAG_ll_prof) return;
1488 CALL_LISTENERS(CodeMovingGCEvent()); 1491 CALL_LISTENERS(CodeMovingGCEvent());
1489 OS::SignalCodeMovingGC(); 1492 base::OS::SignalCodeMovingGC();
1490 } 1493 }
1491 1494
1492 1495
1493 void Logger::RegExpCodeCreateEvent(Code* code, String* source) { 1496 void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
1494 PROFILER_LOG(RegExpCodeCreateEvent(code, source)); 1497 PROFILER_LOG(RegExpCodeCreateEvent(code, source));
1495 1498
1496 if (!is_logging_code_events()) return; 1499 if (!is_logging_code_events()) return;
1497 CALL_LISTENERS(RegExpCodeCreateEvent(code, source)); 1500 CALL_LISTENERS(RegExpCodeCreateEvent(code, source));
1498 1501
1499 if (!FLAG_log_code || !log_->IsEnabled()) return; 1502 if (!FLAG_log_code || !log_->IsEnabled()) return;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1608 msg.WriteToLogFile(); 1611 msg.WriteToLogFile();
1609 } 1612 }
1610 1613
1611 1614
1612 void Logger::ResourceEvent(const char* name, const char* tag) { 1615 void Logger::ResourceEvent(const char* name, const char* tag) {
1613 if (!log_->IsEnabled() || !FLAG_log) return; 1616 if (!log_->IsEnabled() || !FLAG_log) return;
1614 Log::MessageBuilder msg(log_); 1617 Log::MessageBuilder msg(log_);
1615 msg.Append("%s,%s,", name, tag); 1618 msg.Append("%s,%s,", name, tag);
1616 1619
1617 uint32_t sec, usec; 1620 uint32_t sec, usec;
1618 if (OS::GetUserTime(&sec, &usec) != -1) { 1621 if (base::OS::GetUserTime(&sec, &usec) != -1) {
1619 msg.Append("%d,%d,", sec, usec); 1622 msg.Append("%d,%d,", sec, usec);
1620 } 1623 }
1621 msg.Append("%.0f", OS::TimeCurrentMillis()); 1624 msg.Append("%.0f", base::OS::TimeCurrentMillis());
1622 1625
1623 msg.Append('\n'); 1626 msg.Append('\n');
1624 msg.WriteToLogFile(); 1627 msg.WriteToLogFile();
1625 } 1628 }
1626 1629
1627 1630
1628 void Logger::SuspectReadEvent(Name* name, Object* obj) { 1631 void Logger::SuspectReadEvent(Name* name, Object* obj) {
1629 if (!log_->IsEnabled() || !FLAG_log_suspect) return; 1632 if (!log_->IsEnabled() || !FLAG_log_suspect) return;
1630 Log::MessageBuilder msg(log_); 1633 Log::MessageBuilder msg(log_);
1631 String* class_name = obj->IsJSObject() 1634 String* class_name = obj->IsJSObject()
(...skipping 13 matching lines...) Expand all
1645 msg.WriteToLogFile(); 1648 msg.WriteToLogFile();
1646 } 1649 }
1647 1650
1648 1651
1649 void Logger::HeapSampleBeginEvent(const char* space, const char* kind) { 1652 void Logger::HeapSampleBeginEvent(const char* space, const char* kind) {
1650 if (!log_->IsEnabled() || !FLAG_log_gc) return; 1653 if (!log_->IsEnabled() || !FLAG_log_gc) return;
1651 Log::MessageBuilder msg(log_); 1654 Log::MessageBuilder msg(log_);
1652 // Using non-relative system time in order to be able to synchronize with 1655 // Using non-relative system time in order to be able to synchronize with
1653 // external memory profiling events (e.g. DOM memory size). 1656 // external memory profiling events (e.g. DOM memory size).
1654 msg.Append("heap-sample-begin,\"%s\",\"%s\",%.0f\n", 1657 msg.Append("heap-sample-begin,\"%s\",\"%s\",%.0f\n",
1655 space, kind, OS::TimeCurrentMillis()); 1658 space, kind, base::OS::TimeCurrentMillis());
1656 msg.WriteToLogFile(); 1659 msg.WriteToLogFile();
1657 } 1660 }
1658 1661
1659 1662
1660 void Logger::HeapSampleEndEvent(const char* space, const char* kind) { 1663 void Logger::HeapSampleEndEvent(const char* space, const char* kind) {
1661 if (!log_->IsEnabled() || !FLAG_log_gc) return; 1664 if (!log_->IsEnabled() || !FLAG_log_gc) return;
1662 Log::MessageBuilder msg(log_); 1665 Log::MessageBuilder msg(log_);
1663 msg.Append("heap-sample-end,\"%s\",\"%s\"\n", space, kind); 1666 msg.Append("heap-sample-end,\"%s\",\"%s\"\n", space, kind);
1664 msg.WriteToLogFile(); 1667 msg.WriteToLogFile();
1665 } 1668 }
(...skipping 18 matching lines...) Expand all
1684 void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) { 1687 void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) {
1685 if (!log_->IsEnabled() || !FLAG_log) return; 1688 if (!log_->IsEnabled() || !FLAG_log) return;
1686 StringBuilder s(parameter.length() + 1); 1689 StringBuilder s(parameter.length() + 1);
1687 for (int i = 0; i < parameter.length(); ++i) { 1690 for (int i = 0; i < parameter.length(); ++i) {
1688 s.AddCharacter(static_cast<char>(parameter[i])); 1691 s.AddCharacter(static_cast<char>(parameter[i]));
1689 } 1692 }
1690 char* parameter_string = s.Finalize(); 1693 char* parameter_string = s.Finalize();
1691 Log::MessageBuilder msg(log_); 1694 Log::MessageBuilder msg(log_);
1692 msg.Append("debug-queue-event,%s,%15.3f,%s\n", 1695 msg.Append("debug-queue-event,%s,%15.3f,%s\n",
1693 event_type, 1696 event_type,
1694 OS::TimeCurrentMillis(), 1697 base::OS::TimeCurrentMillis(),
1695 parameter_string); 1698 parameter_string);
1696 DeleteArray(parameter_string); 1699 DeleteArray(parameter_string);
1697 msg.WriteToLogFile(); 1700 msg.WriteToLogFile();
1698 } 1701 }
1699 1702
1700 1703
1701 void Logger::TickEvent(TickSample* sample, bool overflow) { 1704 void Logger::TickEvent(TickSample* sample, bool overflow) {
1702 if (!log_->IsEnabled() || !FLAG_prof) return; 1705 if (!log_->IsEnabled() || !FLAG_prof) return;
1703 Log::MessageBuilder msg(log_); 1706 Log::MessageBuilder msg(log_);
1704 msg.Append("%s,", kLogEventsNames[TICK_EVENT]); 1707 msg.Append("%s,", kLogEventsNames[TICK_EVENT]);
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1982 for (const char* p = file_name; *p; p++) { 1985 for (const char* p = file_name; *p; p++) {
1983 if (*p == '%') { 1986 if (*p == '%') {
1984 p++; 1987 p++;
1985 switch (*p) { 1988 switch (*p) {
1986 case '\0': 1989 case '\0':
1987 // If there's a % at the end of the string we back up 1990 // If there's a % at the end of the string we back up
1988 // one character so we can escape the loop properly. 1991 // one character so we can escape the loop properly.
1989 p--; 1992 p--;
1990 break; 1993 break;
1991 case 'p': 1994 case 'p':
1992 stream.Add("%d", OS::GetCurrentProcessId()); 1995 stream.Add("%d", base::OS::GetCurrentProcessId());
1993 break; 1996 break;
1994 case 't': { 1997 case 't': {
1995 // %t expands to the current time in milliseconds. 1998 // %t expands to the current time in milliseconds.
1996 double time = OS::TimeCurrentMillis(); 1999 double time = base::OS::TimeCurrentMillis();
1997 stream.Add("%.0f", FmtElm(time)); 2000 stream.Add("%.0f", FmtElm(time));
1998 break; 2001 break;
1999 } 2002 }
2000 case '%': 2003 case '%':
2001 // %% expands (contracts really) to %. 2004 // %% expands (contracts really) to %.
2002 stream.Put('%'); 2005 stream.Put('%');
2003 break; 2006 break;
2004 default: 2007 default:
2005 // All other %'s expand to themselves. 2008 // All other %'s expand to themselves.
2006 stream.Put('%'); 2009 stream.Put('%');
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
2123 if (jit_logger_) { 2126 if (jit_logger_) {
2124 removeCodeEventListener(jit_logger_); 2127 removeCodeEventListener(jit_logger_);
2125 delete jit_logger_; 2128 delete jit_logger_;
2126 jit_logger_ = NULL; 2129 jit_logger_ = NULL;
2127 } 2130 }
2128 2131
2129 return log_->Close(); 2132 return log_->Close();
2130 } 2133 }
2131 2134
2132 } } // namespace v8::internal 2135 } } // namespace v8::internal
OLDNEW
« src/base/macros.h ('K') | « src/log.h ('k') | src/log-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698