| Index: src/log.cc
|
| ===================================================================
|
| --- src/log.cc (revision 2260)
|
| +++ src/log.cc (working copy)
|
| @@ -31,9 +31,7 @@
|
|
|
| #include "bootstrapper.h"
|
| #include "log.h"
|
| -#include "log-utils.h"
|
| #include "macro-assembler.h"
|
| -#include "platform.h"
|
| #include "serialize.h"
|
| #include "string-stream.h"
|
|
|
| @@ -304,6 +302,7 @@
|
| SlidingStateWindow* Logger::sliding_state_window_ = NULL;
|
| const char** Logger::log_events_ = NULL;
|
| CompressionHelper* Logger::compression_helper_ = NULL;
|
| +bool Logger::is_logging_ = false;
|
|
|
| #define DECLARE_LONG_EVENT(ignore1, long_name, ignore2) long_name,
|
| const char* kLongLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
|
| @@ -318,11 +317,6 @@
|
| #undef DECLARE_SHORT_EVENT
|
|
|
|
|
| -bool Logger::IsEnabled() {
|
| - return Log::IsEnabled();
|
| -}
|
| -
|
| -
|
| void Logger::ProfilerBeginEvent() {
|
| if (!Log::IsEnabled()) return;
|
| LogMessageBuilder msg;
|
| @@ -946,6 +940,7 @@
|
| // Must be the same message as Log::kDynamicBufferSeal.
|
| LOG(UncheckedStringEvent("profiler", "pause"));
|
| }
|
| + is_logging_ = false;
|
| }
|
|
|
|
|
| @@ -953,6 +948,7 @@
|
| if (!profiler_->paused() || !Log::IsEnabled()) {
|
| return;
|
| }
|
| + is_logging_ = true;
|
| if (FLAG_prof_lazy) {
|
| LOG(UncheckedStringEvent("profiler", "resume"));
|
| FLAG_log_code = true;
|
| @@ -1069,10 +1065,12 @@
|
| FLAG_prof_auto = false;
|
| }
|
|
|
| - bool open_log_file = FLAG_log || FLAG_log_runtime || FLAG_log_api
|
| + bool start_logging = FLAG_log || FLAG_log_runtime || FLAG_log_api
|
| || FLAG_log_code || FLAG_log_gc || FLAG_log_handles || FLAG_log_suspect
|
| - || FLAG_log_regexp || FLAG_log_state_changes || FLAG_prof_lazy;
|
| + || FLAG_log_regexp || FLAG_log_state_changes;
|
|
|
| + bool open_log_file = start_logging || FLAG_prof_lazy;
|
| +
|
| // If we're logging anything, we need to open the log file.
|
| if (open_log_file) {
|
| if (strcmp(FLAG_logfile, "-") == 0) {
|
| @@ -1134,10 +1132,15 @@
|
| compression_helper_ = new CompressionHelper(kCompressionWindowSize);
|
| }
|
|
|
| + is_logging_ = start_logging;
|
| +
|
| if (FLAG_prof) {
|
| profiler_ = new Profiler();
|
| - if (!FLAG_prof_auto)
|
| + if (!FLAG_prof_auto) {
|
| profiler_->pause();
|
| + } else {
|
| + is_logging_ = true;
|
| + }
|
| profiler_->Engage();
|
| }
|
|
|
| @@ -1195,85 +1198,4 @@
|
| }
|
|
|
|
|
| -//
|
| -// VMState class implementation. A simple stack of VM states held by the
|
| -// logger and partially threaded through the call stack. States are pushed by
|
| -// VMState construction and popped by destruction.
|
| -//
|
| -#ifdef ENABLE_LOGGING_AND_PROFILING
|
| -static const char* StateToString(StateTag state) {
|
| - switch (state) {
|
| - case JS:
|
| - return "JS";
|
| - case GC:
|
| - return "GC";
|
| - case COMPILER:
|
| - return "COMPILER";
|
| - case OTHER:
|
| - return "OTHER";
|
| - default:
|
| - UNREACHABLE();
|
| - return NULL;
|
| - }
|
| -}
|
| -
|
| -VMState::VMState(StateTag state) {
|
| -#if !defined(ENABLE_HEAP_PROTECTION)
|
| - // When not protecting the heap, there is no difference between
|
| - // EXTERNAL and OTHER. As an optimization in that case, we will not
|
| - // perform EXTERNAL->OTHER transitions through the API. We thus
|
| - // compress the two states into one.
|
| - if (state == EXTERNAL) state = OTHER;
|
| -#endif
|
| - state_ = state;
|
| - previous_ = Logger::current_state_;
|
| - Logger::current_state_ = this;
|
| -
|
| - if (FLAG_log_state_changes) {
|
| - LOG(UncheckedStringEvent("Entering", StateToString(state_)));
|
| - if (previous_ != NULL) {
|
| - LOG(UncheckedStringEvent("From", StateToString(previous_->state_)));
|
| - }
|
| - }
|
| -
|
| -#ifdef ENABLE_HEAP_PROTECTION
|
| - if (FLAG_protect_heap && previous_ != NULL) {
|
| - if (state_ == EXTERNAL) {
|
| - // We are leaving V8.
|
| - ASSERT(previous_->state_ != EXTERNAL);
|
| - Heap::Protect();
|
| - } else if (previous_->state_ == EXTERNAL) {
|
| - // We are entering V8.
|
| - Heap::Unprotect();
|
| - }
|
| - }
|
| -#endif
|
| -}
|
| -
|
| -
|
| -VMState::~VMState() {
|
| - Logger::current_state_ = previous_;
|
| -
|
| - if (FLAG_log_state_changes) {
|
| - LOG(UncheckedStringEvent("Leaving", StateToString(state_)));
|
| - if (previous_ != NULL) {
|
| - LOG(UncheckedStringEvent("To", StateToString(previous_->state_)));
|
| - }
|
| - }
|
| -
|
| -#ifdef ENABLE_HEAP_PROTECTION
|
| - if (FLAG_protect_heap && previous_ != NULL) {
|
| - if (state_ == EXTERNAL) {
|
| - // We are reentering V8.
|
| - ASSERT(previous_->state_ != EXTERNAL);
|
| - Heap::Unprotect();
|
| - } else if (previous_->state_ == EXTERNAL) {
|
| - // We are leaving V8.
|
| - Heap::Protect();
|
| - }
|
| - }
|
| -#endif
|
| -}
|
| -#endif
|
| -
|
| } } // namespace v8::internal
|
|
|