Remove the ability to compile without logging and profiling
The preprocessor defines ENABLE_LOGGING_AND_PROFILING and ENABLE_VMSTATE_TRACKING has been removed as these where required to be turned on for Crankshaft to work. To re-enable reducing the binary size by leaving out heap and CPU profiler a new set of defines needs to be created. R=ager@chromium.org BUG=v8:1271 TEST=all Review URL: http://codereview.chromium.org//7350014 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8622 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
c0044bb7e2
commit
8a6108de95
19
SConstruct
19
SConstruct
@ -60,18 +60,9 @@ LIBRARY_FLAGS = {
|
||||
'mode:debug': {
|
||||
'CPPDEFINES': ['V8_ENABLE_CHECKS', 'OBJECT_PRINT']
|
||||
},
|
||||
'vmstate:on': {
|
||||
'CPPDEFINES': ['ENABLE_VMSTATE_TRACKING'],
|
||||
},
|
||||
'objectprint:on': {
|
||||
'CPPDEFINES': ['OBJECT_PRINT'],
|
||||
},
|
||||
'protectheap:on': {
|
||||
'CPPDEFINES': ['ENABLE_VMSTATE_TRACKING', 'ENABLE_HEAP_PROTECTION'],
|
||||
},
|
||||
'profilingsupport:on': {
|
||||
'CPPDEFINES': ['ENABLE_VMSTATE_TRACKING', 'ENABLE_LOGGING_AND_PROFILING'],
|
||||
},
|
||||
'debuggersupport:on': {
|
||||
'CPPDEFINES': ['ENABLE_DEBUGGER_SUPPORT'],
|
||||
},
|
||||
@ -929,21 +920,11 @@ SIMPLE_OPTIONS = {
|
||||
'default': 'static',
|
||||
'help': 'the type of library to produce'
|
||||
},
|
||||
'vmstate': {
|
||||
'values': ['on', 'off'],
|
||||
'default': 'off',
|
||||
'help': 'enable VM state tracking'
|
||||
},
|
||||
'objectprint': {
|
||||
'values': ['on', 'off'],
|
||||
'default': 'off',
|
||||
'help': 'enable object printing'
|
||||
},
|
||||
'protectheap': {
|
||||
'values': ['on', 'off'],
|
||||
'default': 'off',
|
||||
'help': 'enable heap protection'
|
||||
},
|
||||
'profilingsupport': {
|
||||
'values': ['on', 'off'],
|
||||
'default': 'on',
|
||||
|
@ -313,10 +313,7 @@ def ConfigureObjectFiles():
|
||||
env.Replace(**context.flags['v8'])
|
||||
context.ApplyEnvOverrides(env)
|
||||
env['BUILDERS']['JS2C'] = Builder(action=js2c.JS2C)
|
||||
if 'ENABLE_LOGGING_AND_PROFILING' in env['CPPDEFINES']:
|
||||
env['BUILDERS']['Snapshot'] = Builder(action='$SOURCE $TARGET --logfile "$LOGFILE" --log-snapshot-positions')
|
||||
else:
|
||||
env['BUILDERS']['Snapshot'] = Builder(action='$SOURCE $TARGET')
|
||||
env['BUILDERS']['Snapshot'] = Builder(action='$SOURCE $TARGET --logfile "$LOGFILE" --log-snapshot-positions')
|
||||
|
||||
def BuildJS2CEnv(type):
|
||||
js2c_env = { 'TYPE': type, 'COMPRESSION': 'off' }
|
||||
|
208
src/api.cc
208
src/api.cc
@ -54,16 +54,11 @@
|
||||
|
||||
#define LOG_API(isolate, expr) LOG(isolate, ApiEntryCall(expr))
|
||||
|
||||
#ifdef ENABLE_VMSTATE_TRACKING
|
||||
#define ENTER_V8(isolate) \
|
||||
ASSERT((isolate)->IsInitialized()); \
|
||||
i::VMState __state__((isolate), i::OTHER)
|
||||
#define LEAVE_V8(isolate) \
|
||||
i::VMState __state__((isolate), i::EXTERNAL)
|
||||
#else
|
||||
#define ENTER_V8(isolate) ((void) 0)
|
||||
#define LEAVE_V8(isolate) ((void) 0)
|
||||
#endif
|
||||
|
||||
namespace v8 {
|
||||
|
||||
@ -114,9 +109,7 @@ namespace v8 {
|
||||
|
||||
static void DefaultFatalErrorHandler(const char* location,
|
||||
const char* message) {
|
||||
#ifdef ENABLE_VMSTATE_TRACKING
|
||||
i::VMState __state__(i::Isolate::Current(), i::OTHER);
|
||||
#endif
|
||||
API_Fatal(location, message);
|
||||
}
|
||||
|
||||
@ -4800,37 +4793,26 @@ void V8::RemoveMemoryAllocationCallback(MemoryAllocationCallback callback) {
|
||||
|
||||
|
||||
void V8::PauseProfiler() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
isolate->logger()->PauseProfiler();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void V8::ResumeProfiler() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
isolate->logger()->ResumeProfiler();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
bool V8::IsProfilerPaused() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
return isolate->logger()->IsProfilerPaused();
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int V8::GetLogLines(int from_pos, char* dest_buf, int max_size) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
ASSERT(max_size >= kMinimumSizeForLogLinesBuffer);
|
||||
return LOGGER->GetLogLines(from_pos, dest_buf, max_size);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -5295,7 +5277,6 @@ Local<Context> Debug::GetDebugContext() {
|
||||
|
||||
|
||||
Handle<String> CpuProfileNode::GetFunctionName() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetFunctionName");
|
||||
const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this);
|
||||
@ -5308,117 +5289,77 @@ Handle<String> CpuProfileNode::GetFunctionName() const {
|
||||
isolate->factory()->LookupAsciiSymbol(entry->name_prefix()),
|
||||
isolate->factory()->LookupAsciiSymbol(entry->name()))));
|
||||
}
|
||||
#else
|
||||
return v8::String::Empty();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Handle<String> CpuProfileNode::GetScriptResourceName() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetScriptResourceName");
|
||||
const i::ProfileNode* node = reinterpret_cast<const i::ProfileNode*>(this);
|
||||
return Handle<String>(ToApi<String>(isolate->factory()->LookupAsciiSymbol(
|
||||
node->entry()->resource_name())));
|
||||
#else
|
||||
return v8::String::Empty();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int CpuProfileNode::GetLineNumber() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetLineNumber");
|
||||
return reinterpret_cast<const i::ProfileNode*>(this)->entry()->line_number();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double CpuProfileNode::GetTotalTime() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetTotalTime");
|
||||
return reinterpret_cast<const i::ProfileNode*>(this)->GetTotalMillis();
|
||||
#else
|
||||
return 0.0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double CpuProfileNode::GetSelfTime() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetSelfTime");
|
||||
return reinterpret_cast<const i::ProfileNode*>(this)->GetSelfMillis();
|
||||
#else
|
||||
return 0.0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double CpuProfileNode::GetTotalSamplesCount() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetTotalSamplesCount");
|
||||
return reinterpret_cast<const i::ProfileNode*>(this)->total_ticks();
|
||||
#else
|
||||
return 0.0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double CpuProfileNode::GetSelfSamplesCount() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetSelfSamplesCount");
|
||||
return reinterpret_cast<const i::ProfileNode*>(this)->self_ticks();
|
||||
#else
|
||||
return 0.0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
unsigned CpuProfileNode::GetCallUid() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetCallUid");
|
||||
return reinterpret_cast<const i::ProfileNode*>(this)->entry()->GetCallUid();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int CpuProfileNode::GetChildrenCount() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetChildrenCount");
|
||||
return reinterpret_cast<const i::ProfileNode*>(this)->children()->length();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const CpuProfileNode* CpuProfileNode::GetChild(int index) const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfileNode::GetChild");
|
||||
const i::ProfileNode* child =
|
||||
reinterpret_cast<const i::ProfileNode*>(this)->children()->at(index);
|
||||
return reinterpret_cast<const CpuProfileNode*>(child);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void CpuProfile::Delete() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfile::Delete");
|
||||
i::CpuProfiler::DeleteProfile(reinterpret_cast<i::CpuProfile*>(this));
|
||||
@ -5427,153 +5368,109 @@ void CpuProfile::Delete() {
|
||||
// If this was the last profile, clean up all accessory data as well.
|
||||
i::CpuProfiler::DeleteAllProfiles();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
unsigned CpuProfile::GetUid() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfile::GetUid");
|
||||
return reinterpret_cast<const i::CpuProfile*>(this)->uid();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Handle<String> CpuProfile::GetTitle() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfile::GetTitle");
|
||||
const i::CpuProfile* profile = reinterpret_cast<const i::CpuProfile*>(this);
|
||||
return Handle<String>(ToApi<String>(isolate->factory()->LookupAsciiSymbol(
|
||||
profile->title())));
|
||||
#else
|
||||
return v8::String::Empty();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const CpuProfileNode* CpuProfile::GetBottomUpRoot() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfile::GetBottomUpRoot");
|
||||
const i::CpuProfile* profile = reinterpret_cast<const i::CpuProfile*>(this);
|
||||
return reinterpret_cast<const CpuProfileNode*>(profile->bottom_up()->root());
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const CpuProfileNode* CpuProfile::GetTopDownRoot() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfile::GetTopDownRoot");
|
||||
const i::CpuProfile* profile = reinterpret_cast<const i::CpuProfile*>(this);
|
||||
return reinterpret_cast<const CpuProfileNode*>(profile->top_down()->root());
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int CpuProfiler::GetProfilesCount() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfiler::GetProfilesCount");
|
||||
return i::CpuProfiler::GetProfilesCount();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const CpuProfile* CpuProfiler::GetProfile(int index,
|
||||
Handle<Value> security_token) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfiler::GetProfile");
|
||||
return reinterpret_cast<const CpuProfile*>(
|
||||
i::CpuProfiler::GetProfile(
|
||||
security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
|
||||
index));
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const CpuProfile* CpuProfiler::FindProfile(unsigned uid,
|
||||
Handle<Value> security_token) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfiler::FindProfile");
|
||||
return reinterpret_cast<const CpuProfile*>(
|
||||
i::CpuProfiler::FindProfile(
|
||||
security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
|
||||
uid));
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void CpuProfiler::StartProfiling(Handle<String> title) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfiler::StartProfiling");
|
||||
i::CpuProfiler::StartProfiling(*Utils::OpenHandle(*title));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const CpuProfile* CpuProfiler::StopProfiling(Handle<String> title,
|
||||
Handle<Value> security_token) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfiler::StopProfiling");
|
||||
return reinterpret_cast<const CpuProfile*>(
|
||||
i::CpuProfiler::StopProfiling(
|
||||
security_token.IsEmpty() ? NULL : *Utils::OpenHandle(*security_token),
|
||||
*Utils::OpenHandle(*title)));
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void CpuProfiler::DeleteAllProfiles() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::CpuProfiler::DeleteAllProfiles");
|
||||
i::CpuProfiler::DeleteAllProfiles();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static i::HeapGraphEdge* ToInternal(const HeapGraphEdge* edge) {
|
||||
return const_cast<i::HeapGraphEdge*>(
|
||||
reinterpret_cast<const i::HeapGraphEdge*>(edge));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
HeapGraphEdge::Type HeapGraphEdge::GetType() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapGraphEdge::GetType");
|
||||
return static_cast<HeapGraphEdge::Type>(ToInternal(this)->type());
|
||||
#else
|
||||
return static_cast<HeapGraphEdge::Type>(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Handle<Value> HeapGraphEdge::GetName() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapGraphEdge::GetName");
|
||||
i::HeapGraphEdge* edge = ToInternal(this);
|
||||
@ -5590,166 +5487,112 @@ Handle<Value> HeapGraphEdge::GetName() const {
|
||||
edge->index())));
|
||||
default: UNREACHABLE();
|
||||
}
|
||||
#endif
|
||||
return v8::Undefined();
|
||||
}
|
||||
|
||||
|
||||
const HeapGraphNode* HeapGraphEdge::GetFromNode() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapGraphEdge::GetFromNode");
|
||||
const i::HeapEntry* from = ToInternal(this)->From();
|
||||
return reinterpret_cast<const HeapGraphNode*>(from);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapGraphNode* HeapGraphEdge::GetToNode() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapGraphEdge::GetToNode");
|
||||
const i::HeapEntry* to = ToInternal(this)->to();
|
||||
return reinterpret_cast<const HeapGraphNode*>(to);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static i::HeapEntry* ToInternal(const HeapGraphNode* entry) {
|
||||
return const_cast<i::HeapEntry*>(
|
||||
reinterpret_cast<const i::HeapEntry*>(entry));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
HeapGraphNode::Type HeapGraphNode::GetType() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapGraphNode::GetType");
|
||||
return static_cast<HeapGraphNode::Type>(ToInternal(this)->type());
|
||||
#else
|
||||
return static_cast<HeapGraphNode::Type>(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Handle<String> HeapGraphNode::GetName() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapGraphNode::GetName");
|
||||
return Handle<String>(ToApi<String>(isolate->factory()->LookupAsciiSymbol(
|
||||
ToInternal(this)->name())));
|
||||
#else
|
||||
return v8::String::Empty();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
uint64_t HeapGraphNode::GetId() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapGraphNode::GetId");
|
||||
return ToInternal(this)->id();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int HeapGraphNode::GetSelfSize() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapGraphNode::GetSelfSize");
|
||||
return ToInternal(this)->self_size();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int HeapGraphNode::GetRetainedSize(bool exact) const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetRetainedSize");
|
||||
return ToInternal(this)->RetainedSize(exact);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int HeapGraphNode::GetChildrenCount() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetChildrenCount");
|
||||
return ToInternal(this)->children().length();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapGraphEdge* HeapGraphNode::GetChild(int index) const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetChild");
|
||||
return reinterpret_cast<const HeapGraphEdge*>(
|
||||
&ToInternal(this)->children()[index]);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int HeapGraphNode::GetRetainersCount() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetRetainersCount");
|
||||
return ToInternal(this)->retainers().length();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapGraphEdge* HeapGraphNode::GetRetainer(int index) const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetRetainer");
|
||||
return reinterpret_cast<const HeapGraphEdge*>(
|
||||
ToInternal(this)->retainers()[index]);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapGraphNode* HeapGraphNode::GetDominatorNode() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetDominatorNode");
|
||||
return reinterpret_cast<const HeapGraphNode*>(ToInternal(this)->dominator());
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static i::HeapSnapshot* ToInternal(const HeapSnapshot* snapshot) {
|
||||
return const_cast<i::HeapSnapshot*>(
|
||||
reinterpret_cast<const i::HeapSnapshot*>(snapshot));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void HeapSnapshot::Delete() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::Delete");
|
||||
if (i::HeapProfiler::GetSnapshotsCount() > 1) {
|
||||
@ -5758,93 +5601,63 @@ void HeapSnapshot::Delete() {
|
||||
// If this is the last snapshot, clean up all accessory data as well.
|
||||
i::HeapProfiler::DeleteAllSnapshots();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
HeapSnapshot::Type HeapSnapshot::GetType() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetType");
|
||||
return static_cast<HeapSnapshot::Type>(ToInternal(this)->type());
|
||||
#else
|
||||
return static_cast<HeapSnapshot::Type>(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
unsigned HeapSnapshot::GetUid() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetUid");
|
||||
return ToInternal(this)->uid();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Handle<String> HeapSnapshot::GetTitle() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetTitle");
|
||||
return Handle<String>(ToApi<String>(isolate->factory()->LookupAsciiSymbol(
|
||||
ToInternal(this)->title())));
|
||||
#else
|
||||
return v8::String::Empty();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapGraphNode* HeapSnapshot::GetRoot() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetHead");
|
||||
return reinterpret_cast<const HeapGraphNode*>(ToInternal(this)->root());
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapGraphNode* HeapSnapshot::GetNodeById(uint64_t id) const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetNodeById");
|
||||
return reinterpret_cast<const HeapGraphNode*>(
|
||||
ToInternal(this)->GetEntryById(id));
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int HeapSnapshot::GetNodesCount() const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetNodesCount");
|
||||
return ToInternal(this)->entries()->length();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapGraphNode* HeapSnapshot::GetNode(int index) const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::GetNode");
|
||||
return reinterpret_cast<const HeapGraphNode*>(
|
||||
ToInternal(this)->entries()->at(index));
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void HeapSnapshot::Serialize(OutputStream* stream,
|
||||
HeapSnapshot::SerializationFormat format) const {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapSnapshot::Serialize");
|
||||
ApiCheck(format == kJSON,
|
||||
@ -5858,49 +5671,35 @@ void HeapSnapshot::Serialize(OutputStream* stream,
|
||||
"Invalid stream chunk size");
|
||||
i::HeapSnapshotJSONSerializer serializer(ToInternal(this));
|
||||
serializer.Serialize(stream);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
int HeapProfiler::GetSnapshotsCount() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapProfiler::GetSnapshotsCount");
|
||||
return i::HeapProfiler::GetSnapshotsCount();
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapSnapshot* HeapProfiler::GetSnapshot(int index) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapProfiler::GetSnapshot");
|
||||
return reinterpret_cast<const HeapSnapshot*>(
|
||||
i::HeapProfiler::GetSnapshot(index));
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapProfiler::FindSnapshot");
|
||||
return reinterpret_cast<const HeapSnapshot*>(
|
||||
i::HeapProfiler::FindSnapshot(uid));
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
const HeapSnapshot* HeapProfiler::TakeSnapshot(Handle<String> title,
|
||||
HeapSnapshot::Type type,
|
||||
ActivityControl* control) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapProfiler::TakeSnapshot");
|
||||
i::HeapSnapshot::Type internal_type = i::HeapSnapshot::kFull;
|
||||
@ -5914,27 +5713,20 @@ const HeapSnapshot* HeapProfiler::TakeSnapshot(Handle<String> title,
|
||||
return reinterpret_cast<const HeapSnapshot*>(
|
||||
i::HeapProfiler::TakeSnapshot(
|
||||
*Utils::OpenHandle(*title), internal_type, control));
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void HeapProfiler::DeleteAllSnapshots() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate* isolate = i::Isolate::Current();
|
||||
IsDeadCheck(isolate, "v8::HeapProfiler::DeleteAllSnapshots");
|
||||
i::HeapProfiler::DeleteAllSnapshots();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void HeapProfiler::DefineWrapperClass(uint16_t class_id,
|
||||
WrapperInfoCallback callback) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
i::Isolate::Current()->heap_profiler()->DefineWrapperClass(class_id,
|
||||
callback);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -3562,7 +3562,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
// Setup frame pointer for the frame to be pushed.
|
||||
__ add(fp, sp, Operand(-EntryFrameConstants::kCallerFPOffset));
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// If this is the outermost JS call, set js_entry_sp value.
|
||||
Label non_outermost_js;
|
||||
ExternalReference js_entry_sp(Isolate::k_js_entry_sp_address, isolate);
|
||||
@ -3578,7 +3577,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ mov(ip, Operand(Smi::FromInt(StackFrame::INNER_JSENTRY_FRAME)));
|
||||
__ bind(&cont);
|
||||
__ push(ip);
|
||||
#endif
|
||||
|
||||
// Call a faked try-block that does the invoke.
|
||||
__ bl(&invoke);
|
||||
@ -3639,7 +3637,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ PopTryHandler();
|
||||
|
||||
__ bind(&exit); // r0 holds result
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// Check if the current stack frame is marked as the outermost JS frame.
|
||||
Label non_outermost_js_2;
|
||||
__ pop(r5);
|
||||
@ -3649,7 +3646,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ mov(r5, Operand(ExternalReference(js_entry_sp)));
|
||||
__ str(r6, MemOperand(r5));
|
||||
__ bind(&non_outermost_js_2);
|
||||
#endif
|
||||
|
||||
// Restore the top frame descriptors from the stack.
|
||||
__ pop(r3);
|
||||
|
@ -58,9 +58,7 @@ class CodeGenerator: public AstVisitor {
|
||||
// Print the code after compiling it.
|
||||
static void PrintCode(Handle<Code> code, CompilationInfo* info);
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static bool ShouldGenerateLog(Expression* type);
|
||||
#endif
|
||||
|
||||
static void SetFunctionInfo(Handle<JSFunction> fun,
|
||||
FunctionLiteral* lit,
|
||||
|
@ -2776,13 +2776,12 @@ void FullCodeGenerator::EmitLog(ZoneList<Expression*>* args) {
|
||||
// with '%2s' (see Logger::LogRuntime for all the formats).
|
||||
// 2 (array): Arguments to the format string.
|
||||
ASSERT_EQ(args->length(), 3);
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (CodeGenerator::ShouldGenerateLog(args->at(0))) {
|
||||
VisitForStackValue(args->at(1));
|
||||
VisitForStackValue(args->at(2));
|
||||
__ CallRuntime(Runtime::kLog, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Finally, we're expected to leave a value on the top of the stack.
|
||||
__ LoadRoot(r0, Heap::kUndefinedValueRootIndex);
|
||||
context()->Plug(r0);
|
||||
|
@ -169,8 +169,6 @@ void CodeGenerator::PrintCode(Handle<Code> code, CompilationInfo* info) {
|
||||
#endif // ENABLE_DISASSEMBLER
|
||||
}
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
static Vector<const char> kRegexp = CStrVector("regexp");
|
||||
|
||||
bool CodeGenerator::ShouldGenerateLog(Expression* type) {
|
||||
@ -187,8 +185,6 @@ bool CodeGenerator::ShouldGenerateLog(Expression* type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
bool CodeGenerator::RecordPositions(MacroAssembler* masm,
|
||||
int pos,
|
||||
|
@ -30,8 +30,6 @@
|
||||
|
||||
#include "cpu-profiler.h"
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include <new>
|
||||
#include "circular-queue-inl.h"
|
||||
#include "profile-generator-inl.h"
|
||||
@ -83,6 +81,4 @@ bool ProfilerEventsProcessor::FilterOutCodeCreateEvent(
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#endif // V8_CPU_PROFILER_INL_H_
|
||||
|
@ -29,8 +29,6 @@
|
||||
|
||||
#include "cpu-profiler-inl.h"
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include "frames-inl.h"
|
||||
#include "hashmap.h"
|
||||
#include "log-inl.h"
|
||||
@ -574,31 +572,21 @@ void CpuProfiler::StopProcessor() {
|
||||
logger->logging_nesting_ = saved_logging_nesting_;
|
||||
}
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
void CpuProfiler::Setup() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Isolate* isolate = Isolate::Current();
|
||||
if (isolate->cpu_profiler() == NULL) {
|
||||
isolate->set_cpu_profiler(new CpuProfiler());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void CpuProfiler::TearDown() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Isolate* isolate = Isolate::Current();
|
||||
if (isolate->cpu_profiler() != NULL) {
|
||||
delete isolate->cpu_profiler();
|
||||
}
|
||||
isolate->set_cpu_profiler(NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -28,8 +28,6 @@
|
||||
#ifndef V8_CPU_PROFILER_H_
|
||||
#define V8_CPU_PROFILER_H_
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include "allocation.h"
|
||||
#include "atomicops.h"
|
||||
#include "circular-queue.h"
|
||||
@ -206,9 +204,6 @@ class ProfilerEventsProcessor : public Thread {
|
||||
v8::internal::CpuProfiler::Call; \
|
||||
} \
|
||||
} while (false)
|
||||
#else
|
||||
#define PROFILE(isolate, Call) LOG(isolate, Call)
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
|
||||
namespace v8 {
|
||||
@ -221,7 +216,6 @@ class CpuProfiler {
|
||||
static void Setup();
|
||||
static void TearDown();
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static void StartProfiling(const char* title);
|
||||
static void StartProfiling(String* title);
|
||||
static CpuProfile* StopProfiling(const char* title);
|
||||
@ -289,10 +283,6 @@ class CpuProfiler {
|
||||
bool need_to_stop_sampler_;
|
||||
Atomic32 is_profiling_;
|
||||
|
||||
#else
|
||||
static INLINE(bool is_profiling(Isolate* isolate)) { return false; }
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(CpuProfiler);
|
||||
};
|
||||
|
@ -38,9 +38,7 @@
|
||||
'../src',
|
||||
],
|
||||
'defines': [
|
||||
'ENABLE_LOGGING_AND_PROFILING',
|
||||
'ENABLE_DEBUGGER_SUPPORT',
|
||||
'ENABLE_VMSTATE_TRACKING',
|
||||
'V8_FAST_TLS',
|
||||
],
|
||||
'sources': [
|
||||
|
@ -452,14 +452,10 @@ DEFINE_bool(trace_regexp_assembler,
|
||||
"trace regexp macro assembler calls.")
|
||||
|
||||
//
|
||||
// Logging and profiling only flags
|
||||
// Logging and profiling flags
|
||||
//
|
||||
#undef FLAG
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
#define FLAG FLAG_FULL
|
||||
#else
|
||||
#define FLAG FLAG_READONLY
|
||||
#endif
|
||||
|
||||
// log.cc
|
||||
DEFINE_bool(log, false,
|
||||
|
@ -348,7 +348,6 @@ void SafeStackFrameIterator::Reset() {
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
SafeStackTraceFrameIterator::SafeStackTraceFrameIterator(
|
||||
Isolate* isolate,
|
||||
Address fp, Address sp, Address low_bound, Address high_bound) :
|
||||
@ -364,7 +363,6 @@ void SafeStackTraceFrameIterator::Advance() {
|
||||
if (frame()->is_java_script()) return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Code* StackFrame::GetSafepointData(Isolate* isolate,
|
||||
|
@ -843,7 +843,6 @@ class SafeStackFrameIterator BASE_EMBEDDED {
|
||||
};
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
typedef JavaScriptFrameIteratorTemp<SafeStackFrameIterator>
|
||||
SafeJavaScriptFrameIterator;
|
||||
|
||||
@ -855,7 +854,6 @@ class SafeStackTraceFrameIterator: public SafeJavaScriptFrameIterator {
|
||||
Address low_bound, Address high_bound);
|
||||
void Advance();
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
class StackFrameLocator BASE_EMBEDDED {
|
||||
|
@ -34,7 +34,6 @@ namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
HeapProfiler::HeapProfiler()
|
||||
: snapshots_(new HeapSnapshotsCollection()),
|
||||
next_snapshot_uid_(1) {
|
||||
@ -52,29 +51,21 @@ void HeapProfiler::ResetSnapshots() {
|
||||
}
|
||||
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
void HeapProfiler::Setup() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Isolate* isolate = Isolate::Current();
|
||||
if (isolate->heap_profiler() == NULL) {
|
||||
isolate->set_heap_profiler(new HeapProfiler());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void HeapProfiler::TearDown() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Isolate* isolate = Isolate::Current();
|
||||
delete isolate->heap_profiler();
|
||||
isolate->set_heap_profiler(NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
HeapSnapshot* HeapProfiler::TakeSnapshot(const char* name,
|
||||
int type,
|
||||
v8::ActivityControl* control) {
|
||||
@ -179,7 +170,5 @@ void HeapProfiler::ObjectMoveEvent(Address from, Address to) {
|
||||
snapshots_->ObjectMoveEvent(from, to);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -33,8 +33,6 @@
|
||||
namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
class HeapSnapshot;
|
||||
class HeapSnapshotsCollection;
|
||||
|
||||
@ -45,9 +43,6 @@ class HeapSnapshotsCollection;
|
||||
profiler->call; \
|
||||
} \
|
||||
} while (false)
|
||||
#else
|
||||
#define HEAP_PROFILE(heap, call) ((void) 0)
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
// The HeapProfiler writes data to the log files, which can be postprocessed
|
||||
// to generate .hp files for use by the GHC/Valgrind tool hp2ps.
|
||||
@ -56,7 +51,6 @@ class HeapProfiler {
|
||||
static void Setup();
|
||||
static void TearDown();
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static HeapSnapshot* TakeSnapshot(const char* name,
|
||||
int type,
|
||||
v8::ActivityControl* control);
|
||||
@ -93,8 +87,6 @@ class HeapProfiler {
|
||||
HeapSnapshotsCollection* snapshots_;
|
||||
unsigned next_snapshot_uid_;
|
||||
List<v8::HeapProfiler::WrapperInfoCallback> wrapper_callbacks_;
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
};
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
52
src/heap.cc
52
src/heap.cc
@ -293,12 +293,11 @@ GarbageCollector Heap::SelectGarbageCollector(AllocationSpace space) {
|
||||
|
||||
// TODO(1238405): Combine the infrastructure for --heap-stats and
|
||||
// --log-gc to avoid the complicated preprocessor and flag testing.
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
void Heap::ReportStatisticsBeforeGC() {
|
||||
// Heap::ReportHeapStatistics will also log NewSpace statistics when
|
||||
// compiled with ENABLE_LOGGING_AND_PROFILING and --log-gc is set. The
|
||||
// following logic is used to avoid double logging.
|
||||
#if defined(DEBUG) && defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
// compiled --log-gc is set. The following logic is used to avoid
|
||||
// double logging.
|
||||
#ifdef DEBUG
|
||||
if (FLAG_heap_stats || FLAG_log_gc) new_space_.CollectStatistics();
|
||||
if (FLAG_heap_stats) {
|
||||
ReportHeapStatistics("Before GC");
|
||||
@ -306,23 +305,16 @@ void Heap::ReportStatisticsBeforeGC() {
|
||||
new_space_.ReportStatistics();
|
||||
}
|
||||
if (FLAG_heap_stats || FLAG_log_gc) new_space_.ClearHistograms();
|
||||
#elif defined(DEBUG)
|
||||
if (FLAG_heap_stats) {
|
||||
new_space_.CollectStatistics();
|
||||
ReportHeapStatistics("Before GC");
|
||||
new_space_.ClearHistograms();
|
||||
}
|
||||
#elif defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
#else
|
||||
if (FLAG_log_gc) {
|
||||
new_space_.CollectStatistics();
|
||||
new_space_.ReportStatistics();
|
||||
new_space_.ClearHistograms();
|
||||
}
|
||||
#endif
|
||||
#endif // DEBUG
|
||||
}
|
||||
|
||||
|
||||
#if defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
void Heap::PrintShortHeapStatistics() {
|
||||
if (!FLAG_trace_gc_verbose) return;
|
||||
PrintF("Memory allocator, used: %8" V8_PTR_PREFIX "d"
|
||||
@ -368,7 +360,6 @@ void Heap::PrintShortHeapStatistics() {
|
||||
lo_space_->Size(),
|
||||
lo_space_->Available());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// TODO(1238405): Combine the infrastructure for --heap-stats and
|
||||
@ -376,20 +367,17 @@ void Heap::PrintShortHeapStatistics() {
|
||||
void Heap::ReportStatisticsAfterGC() {
|
||||
// Similar to the before GC, we use some complicated logic to ensure that
|
||||
// NewSpace statistics are logged exactly once when --log-gc is turned on.
|
||||
#if defined(DEBUG) && defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
#if defined(DEBUG)
|
||||
if (FLAG_heap_stats) {
|
||||
new_space_.CollectStatistics();
|
||||
ReportHeapStatistics("After GC");
|
||||
} else if (FLAG_log_gc) {
|
||||
new_space_.ReportStatistics();
|
||||
}
|
||||
#elif defined(DEBUG)
|
||||
if (FLAG_heap_stats) ReportHeapStatistics("After GC");
|
||||
#elif defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
#else
|
||||
if (FLAG_log_gc) new_space_.ReportStatistics();
|
||||
#endif
|
||||
#endif // DEBUG
|
||||
}
|
||||
#endif // defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
|
||||
|
||||
void Heap::GarbageCollectionPrologue() {
|
||||
@ -406,11 +394,11 @@ void Heap::GarbageCollectionPrologue() {
|
||||
}
|
||||
|
||||
if (FLAG_gc_verbose) Print();
|
||||
#endif
|
||||
#endif // DEBUG
|
||||
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
#if defined(DEBUG)
|
||||
ReportStatisticsBeforeGC();
|
||||
#endif
|
||||
#endif // DEBUG
|
||||
|
||||
LiveObjectList::GCPrologue();
|
||||
}
|
||||
@ -447,12 +435,10 @@ void Heap::GarbageCollectionEpilogue() {
|
||||
symbol_table()->Capacity());
|
||||
isolate_->counters()->number_of_symbols()->Set(
|
||||
symbol_table()->NumberOfElements());
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
#if defined(DEBUG)
|
||||
ReportStatisticsAfterGC();
|
||||
#endif
|
||||
#ifdef ENABLE_DEBUGGER_SUPPORT
|
||||
#endif // DEBUG
|
||||
isolate_->debug()->AfterGarbageCollection();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -1335,15 +1321,12 @@ class ScavengingVisitor : public StaticVisitorBase {
|
||||
enum ObjectContents { DATA_OBJECT, POINTER_OBJECT };
|
||||
enum SizeRestriction { SMALL, UNKNOWN_SIZE };
|
||||
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
static void RecordCopiedObject(Heap* heap, HeapObject* obj) {
|
||||
bool should_record = false;
|
||||
#ifdef DEBUG
|
||||
should_record = FLAG_heap_stats;
|
||||
#endif
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
should_record = should_record || FLAG_log_gc;
|
||||
#endif
|
||||
if (should_record) {
|
||||
if (heap->new_space()->Contains(obj)) {
|
||||
heap->new_space()->RecordAllocation(obj);
|
||||
@ -1352,7 +1335,6 @@ class ScavengingVisitor : public StaticVisitorBase {
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
|
||||
// Helper function used by CopyObject to copy a source object to an
|
||||
// allocated target object and update the forwarding pointer in the source
|
||||
@ -1368,12 +1350,9 @@ class ScavengingVisitor : public StaticVisitorBase {
|
||||
source->set_map_word(MapWord::FromForwardingAddress(target));
|
||||
|
||||
if (logging_and_profiling_mode == LOGGING_AND_PROFILING_ENABLED) {
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
// Update NewSpace stats if necessary.
|
||||
RecordCopiedObject(heap, target);
|
||||
#endif
|
||||
HEAP_PROFILE(heap, ObjectMoveEvent(source->address(), target->address()));
|
||||
#if defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
Isolate* isolate = heap->isolate();
|
||||
if (isolate->logger()->is_logging() ||
|
||||
CpuProfiler::is_profiling(isolate)) {
|
||||
@ -1382,7 +1361,6 @@ class ScavengingVisitor : public StaticVisitorBase {
|
||||
source->address(), target->address()));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return target;
|
||||
@ -1558,7 +1536,6 @@ static void InitializeScavengingVisitorsTables() {
|
||||
|
||||
|
||||
void Heap::SwitchScavengingVisitorsTableIfProfilingWasEnabled() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (scavenging_visitors_table_mode_ == LOGGING_AND_PROFILING_ENABLED) {
|
||||
// Table was already updated by some isolate.
|
||||
return;
|
||||
@ -1584,7 +1561,6 @@ void Heap::SwitchScavengingVisitorsTableIfProfilingWasEnabled() {
|
||||
Release_Store(&scavenging_visitors_table_mode_,
|
||||
LOGGING_AND_PROFILING_ENABLED);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -5908,9 +5884,7 @@ GCTracer::~GCTracer() {
|
||||
PrintF("\n");
|
||||
}
|
||||
|
||||
#if defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
heap_->PrintShortHeapStatistics();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -1046,10 +1046,8 @@ class Heap {
|
||||
void ZapFromSpace();
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
// Print short heap statistics.
|
||||
void PrintShortHeapStatistics();
|
||||
#endif
|
||||
|
||||
// Makes a new symbol object
|
||||
// Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
|
||||
@ -1508,11 +1506,9 @@ class Heap {
|
||||
// around a GC).
|
||||
inline void CompletelyClearInstanceofCache();
|
||||
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
// Record statistics before and after garbage collection.
|
||||
void ReportStatisticsBeforeGC();
|
||||
void ReportStatisticsAfterGC();
|
||||
#endif
|
||||
|
||||
// Slow part of scavenge object.
|
||||
static void ScavengeObjectSlow(HeapObject** p, HeapObject* object);
|
||||
|
@ -4380,9 +4380,7 @@ void CEntryStub::Generate(MacroAssembler* masm) {
|
||||
|
||||
void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
Label invoke, exit;
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Label not_outermost_js, not_outermost_js_2;
|
||||
#endif
|
||||
|
||||
// Setup frame.
|
||||
__ push(ebp);
|
||||
@ -4401,7 +4399,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
ExternalReference c_entry_fp(Isolate::k_c_entry_fp_address, masm->isolate());
|
||||
__ push(Operand::StaticVariable(c_entry_fp));
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// If this is the outermost JS call, set js_entry_sp value.
|
||||
ExternalReference js_entry_sp(Isolate::k_js_entry_sp_address,
|
||||
masm->isolate());
|
||||
@ -4414,7 +4411,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ bind(¬_outermost_js);
|
||||
__ push(Immediate(Smi::FromInt(StackFrame::INNER_JSENTRY_FRAME)));
|
||||
__ bind(&cont);
|
||||
#endif
|
||||
|
||||
// Call a faked try-block that does the invoke.
|
||||
__ call(&invoke);
|
||||
@ -4462,7 +4458,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ PopTryHandler();
|
||||
|
||||
__ bind(&exit);
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// Check if the current stack frame is marked as the outermost JS frame.
|
||||
__ pop(ebx);
|
||||
__ cmp(Operand(ebx),
|
||||
@ -4470,7 +4465,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ j(not_equal, ¬_outermost_js_2);
|
||||
__ mov(Operand::StaticVariable(js_entry_sp), Immediate(0));
|
||||
__ bind(¬_outermost_js_2);
|
||||
#endif
|
||||
|
||||
// Restore the top frame descriptor from the stack.
|
||||
__ pop(Operand::StaticVariable(ExternalReference(
|
||||
|
@ -53,9 +53,7 @@ class CodeGenerator {
|
||||
// Print the code after compiling it.
|
||||
static void PrintCode(Handle<Code> code, CompilationInfo* info);
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static bool ShouldGenerateLog(Expression* type);
|
||||
#endif
|
||||
|
||||
static bool RecordPositions(MacroAssembler* masm,
|
||||
int pos,
|
||||
|
@ -2705,13 +2705,11 @@ void FullCodeGenerator::EmitLog(ZoneList<Expression*>* args) {
|
||||
// with '%2s' (see Logger::LogRuntime for all the formats).
|
||||
// 2 (array): Arguments to the format string.
|
||||
ASSERT_EQ(args->length(), 3);
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (CodeGenerator::ShouldGenerateLog(args->at(0))) {
|
||||
VisitForStackValue(args->at(1));
|
||||
VisitForStackValue(args->at(2));
|
||||
__ CallRuntime(Runtime::kLog, 2);
|
||||
}
|
||||
#endif
|
||||
// Finally, we're expected to leave a value on the top of the stack.
|
||||
__ mov(eax, isolate()->factory()->undefined_value());
|
||||
context()->Plug(eax);
|
||||
|
@ -85,13 +85,9 @@ void ThreadLocalTop::InitializeInternal() {
|
||||
#ifdef USE_SIMULATOR
|
||||
simulator_ = NULL;
|
||||
#endif
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
js_entry_sp_ = NULL;
|
||||
external_callback_ = NULL;
|
||||
#endif
|
||||
#ifdef ENABLE_VMSTATE_TRACKING
|
||||
current_vm_state_ = EXTERNAL;
|
||||
#endif
|
||||
try_catch_handler_address_ = NULL;
|
||||
context_ = NULL;
|
||||
thread_id_ = ThreadId::Invalid();
|
||||
@ -1279,11 +1275,9 @@ Handle<Context> Isolate::GetCallingGlobalContext() {
|
||||
|
||||
|
||||
char* Isolate::ArchiveThread(char* to) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (RuntimeProfiler::IsEnabled() && current_vm_state() == JS) {
|
||||
RuntimeProfiler::IsolateExitedJS(this);
|
||||
}
|
||||
#endif
|
||||
memcpy(to, reinterpret_cast<char*>(thread_local_top()),
|
||||
sizeof(ThreadLocalTop));
|
||||
InitializeThreadLocal();
|
||||
@ -1303,12 +1297,10 @@ char* Isolate::RestoreThread(char* from) {
|
||||
thread_local_top()->simulator_ = Simulator::current(this);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (RuntimeProfiler::IsEnabled() && current_vm_state() == JS) {
|
||||
RuntimeProfiler::IsolateEnteredJS(this);
|
||||
}
|
||||
ASSERT(context() == NULL || context()->IsContext());
|
||||
#endif
|
||||
return from + sizeof(ThreadLocalTop);
|
||||
}
|
||||
|
||||
@ -1627,7 +1619,6 @@ bool Isolate::PreInit() {
|
||||
#define C(name) isolate_addresses_[Isolate::k_##name] = \
|
||||
reinterpret_cast<Address>(name());
|
||||
ISOLATE_ADDRESS_LIST(C)
|
||||
ISOLATE_ADDRESS_LIST_PROF(C)
|
||||
#undef C
|
||||
|
||||
string_tracker_ = new StringTracker();
|
||||
|
@ -125,14 +125,8 @@ typedef ZoneList<Handle<Object> > ZoneObjectList;
|
||||
C(c_entry_fp_address) \
|
||||
C(context_address) \
|
||||
C(pending_exception_address) \
|
||||
C(external_caught_exception_address)
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
#define ISOLATE_ADDRESS_LIST_PROF(C) \
|
||||
C(external_caught_exception_address) \
|
||||
C(js_entry_sp_address)
|
||||
#else
|
||||
#define ISOLATE_ADDRESS_LIST_PROF(C)
|
||||
#endif
|
||||
|
||||
|
||||
// Platform-independent, reliable thread identifier.
|
||||
@ -252,14 +246,9 @@ class ThreadLocalTop BASE_EMBEDDED {
|
||||
#endif
|
||||
#endif // USE_SIMULATOR
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Address js_entry_sp_; // the stack pointer of the bottom js entry frame
|
||||
Address external_callback_; // the external callback we're currently in
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_VMSTATE_TRACKING
|
||||
StateTag current_vm_state_;
|
||||
#endif
|
||||
|
||||
// Generated code scratch locations.
|
||||
int32_t formal_count_;
|
||||
@ -313,18 +302,6 @@ class HashMap;
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#define ISOLATE_LOGGING_INIT_LIST(V) \
|
||||
V(CpuProfiler*, cpu_profiler, NULL) \
|
||||
V(HeapProfiler*, heap_profiler, NULL)
|
||||
|
||||
#else
|
||||
|
||||
#define ISOLATE_LOGGING_INIT_LIST(V)
|
||||
|
||||
#endif
|
||||
|
||||
#define ISOLATE_INIT_ARRAY_LIST(V) \
|
||||
/* SerializerDeserializer state. */ \
|
||||
V(Object*, serialize_partial_snapshot_cache, kPartialSnapshotCacheCapacity) \
|
||||
@ -373,8 +350,9 @@ typedef List<HeapObject*, PreallocatedStorage> DebugObjectCache;
|
||||
/* SafeStackFrameIterator activations count. */ \
|
||||
V(int, safe_stack_iterator_counter, 0) \
|
||||
V(uint64_t, enabled_cpu_features, 0) \
|
||||
V(CpuProfiler*, cpu_profiler, NULL) \
|
||||
V(HeapProfiler*, heap_profiler, NULL) \
|
||||
ISOLATE_PLATFORM_INIT_LIST(V) \
|
||||
ISOLATE_LOGGING_INIT_LIST(V) \
|
||||
ISOLATE_DEBUGGER_INIT_LIST(V)
|
||||
|
||||
class Isolate {
|
||||
@ -445,7 +423,6 @@ class Isolate {
|
||||
enum AddressId {
|
||||
#define C(name) k_##name,
|
||||
ISOLATE_ADDRESS_LIST(C)
|
||||
ISOLATE_ADDRESS_LIST_PROF(C)
|
||||
#undef C
|
||||
k_isolate_address_count
|
||||
};
|
||||
@ -620,7 +597,6 @@ class Isolate {
|
||||
}
|
||||
inline Address* handler_address() { return &thread_local_top_.handler_; }
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// Bottom JS entry (see StackTracer::Trace in log.cc).
|
||||
static Address js_entry_sp(ThreadLocalTop* thread) {
|
||||
return thread->js_entry_sp_;
|
||||
@ -628,7 +604,6 @@ class Isolate {
|
||||
inline Address* js_entry_sp_address() {
|
||||
return &thread_local_top_.js_entry_sp_;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Generated code scratch locations.
|
||||
void* formal_count_address() { return &thread_local_top_.formal_count_; }
|
||||
@ -945,16 +920,13 @@ class Isolate {
|
||||
|
||||
static const int kJSRegexpStaticOffsetsVectorSize = 50;
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Address external_callback() {
|
||||
return thread_local_top_.external_callback_;
|
||||
}
|
||||
void set_external_callback(Address callback) {
|
||||
thread_local_top_.external_callback_ = callback;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_VMSTATE_TRACKING
|
||||
StateTag current_vm_state() {
|
||||
return thread_local_top_.current_vm_state_;
|
||||
}
|
||||
@ -980,7 +952,6 @@ class Isolate {
|
||||
}
|
||||
thread_local_top_.current_vm_state_ = state;
|
||||
}
|
||||
#endif
|
||||
|
||||
void SetData(void* data) { embedder_data_ = data; }
|
||||
void* GetData() { return embedder_data_; }
|
||||
|
@ -34,8 +34,6 @@
|
||||
namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
Logger::LogEventsAndTags Logger::ToNativeByScript(Logger::LogEventsAndTags tag,
|
||||
Script* script) {
|
||||
if ((tag == FUNCTION_TAG || tag == LAZY_COMPILE_TAG || tag == SCRIPT_TAG)
|
||||
@ -51,8 +49,6 @@ Logger::LogEventsAndTags Logger::ToNativeByScript(Logger::LogEventsAndTags tag,
|
||||
}
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
|
@ -33,8 +33,6 @@
|
||||
namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
LogDynamicBuffer::LogDynamicBuffer(
|
||||
int block_size, int max_size, const char* seal, int seal_size)
|
||||
: block_size_(block_size),
|
||||
@ -142,7 +140,6 @@ static void AddIsolateIdIfNeeded(StringStream* stream) {
|
||||
|
||||
|
||||
void Log::Initialize() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
mutex_ = OS::CreateMutex();
|
||||
message_buffer_ = NewArray<char>(kMessageBufferSize);
|
||||
|
||||
@ -222,7 +219,6 @@ void Log::Initialize() {
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -423,6 +419,4 @@ void LogMessageBuilder::WriteToLogFile() {
|
||||
}
|
||||
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -33,8 +33,6 @@
|
||||
namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
class Logger;
|
||||
|
||||
// A memory buffer that increments its size as you write in it. Size
|
||||
@ -224,8 +222,6 @@ class LogMessageBuilder BASE_EMBEDDED {
|
||||
int pos_;
|
||||
};
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
#endif // V8_LOG_UTILS_H_
|
||||
|
120
src/log.cc
120
src/log.cc
@ -43,8 +43,6 @@
|
||||
namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
//
|
||||
// Sliding state window. Updates counters to keep track of the last
|
||||
// window of kBufferSize states. This is useful to track where we
|
||||
@ -554,71 +552,54 @@ void Logger::ProfilerBeginEvent() {
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
|
||||
void Logger::StringEvent(const char* name, const char* value) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (FLAG_log) UncheckedStringEvent(name, value);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
void Logger::UncheckedStringEvent(const char* name, const char* value) {
|
||||
if (!log_->IsEnabled()) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("%s,\"%s\"\n", name, value);
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void Logger::IntEvent(const char* name, int value) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (FLAG_log) UncheckedIntEvent(name, value);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::IntPtrTEvent(const char* name, intptr_t value) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (FLAG_log) UncheckedIntPtrTEvent(name, value);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
void Logger::UncheckedIntEvent(const char* name, int value) {
|
||||
if (!log_->IsEnabled()) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("%s,%d\n", name, value);
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
void Logger::UncheckedIntPtrTEvent(const char* name, intptr_t value) {
|
||||
if (!log_->IsEnabled()) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("%s,%" V8_PTR_PREFIX "d\n", name, value);
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void Logger::HandleEvent(const char* name, Object** location) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_handles) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("%s,0x%" V8PRIxPTR "\n", name, location);
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// ApiEvent is private so all the calls come from the Logger class. It is the
|
||||
// caller's responsibility to ensure that log is enabled and that
|
||||
// FLAG_log_api is true.
|
||||
@ -631,11 +612,9 @@ void Logger::ApiEvent(const char* format, ...) {
|
||||
va_end(ap);
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void Logger::ApiNamedSecurityCheck(Object* key) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_api) return;
|
||||
if (key->IsString()) {
|
||||
SmartPointer<char> str =
|
||||
@ -646,14 +625,12 @@ void Logger::ApiNamedSecurityCheck(Object* key) {
|
||||
} else {
|
||||
ApiEvent("api,check-security,['no-name']\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::SharedLibraryEvent(const char* library_path,
|
||||
uintptr_t start,
|
||||
uintptr_t end) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_prof) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("shared-library,\"%s\",0x%08" V8PRIxPTR ",0x%08" V8PRIxPTR "\n",
|
||||
@ -661,14 +638,12 @@ void Logger::SharedLibraryEvent(const char* library_path,
|
||||
start,
|
||||
end);
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::SharedLibraryEvent(const wchar_t* library_path,
|
||||
uintptr_t start,
|
||||
uintptr_t end) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_prof) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("shared-library,\"%ls\",0x%08" V8PRIxPTR ",0x%08" V8PRIxPTR "\n",
|
||||
@ -676,11 +651,9 @@ void Logger::SharedLibraryEvent(const wchar_t* library_path,
|
||||
start,
|
||||
end);
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
void Logger::LogRegExpSource(Handle<JSRegExp> regexp) {
|
||||
// Prints "/" + re.source + "/" +
|
||||
// (re.global?"g":"") + (re.ignorecase?"i":"") + (re.multiline?"m":"")
|
||||
@ -721,23 +694,19 @@ void Logger::LogRegExpSource(Handle<JSRegExp> regexp) {
|
||||
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
|
||||
void Logger::RegExpCompileEvent(Handle<JSRegExp> regexp, bool in_cache) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_regexp) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("regexp-compile,");
|
||||
LogRegExpSource(regexp);
|
||||
msg.Append(in_cache ? ",hit\n" : ",miss\n");
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::LogRuntime(Vector<const char> format, JSArray* args) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_runtime) return;
|
||||
HandleScope scope;
|
||||
LogMessageBuilder msg(this);
|
||||
@ -778,22 +747,18 @@ void Logger::LogRuntime(Vector<const char> format, JSArray* args) {
|
||||
}
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::ApiIndexedSecurityCheck(uint32_t index) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_api) return;
|
||||
ApiEvent("api,check-security,%u\n", index);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::ApiNamedPropertyAccess(const char* tag,
|
||||
JSObject* holder,
|
||||
Object* name) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
ASSERT(name->IsString());
|
||||
if (!log_->IsEnabled() || !FLAG_log_api) return;
|
||||
String* class_name_obj = holder->class_name();
|
||||
@ -802,58 +767,47 @@ void Logger::ApiNamedPropertyAccess(const char* tag,
|
||||
SmartPointer<char> property_name =
|
||||
String::cast(name)->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
||||
ApiEvent("api,%s,\"%s\",\"%s\"\n", tag, *class_name, *property_name);
|
||||
#endif
|
||||
}
|
||||
|
||||
void Logger::ApiIndexedPropertyAccess(const char* tag,
|
||||
JSObject* holder,
|
||||
uint32_t index) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_api) return;
|
||||
String* class_name_obj = holder->class_name();
|
||||
SmartPointer<char> class_name =
|
||||
class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
||||
ApiEvent("api,%s,\"%s\",%u\n", tag, *class_name, index);
|
||||
#endif
|
||||
}
|
||||
|
||||
void Logger::ApiObjectAccess(const char* tag, JSObject* object) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_api) return;
|
||||
String* class_name_obj = object->class_name();
|
||||
SmartPointer<char> class_name =
|
||||
class_name_obj->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
||||
ApiEvent("api,%s,\"%s\"\n", tag, *class_name);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::ApiEntryCall(const char* name) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_api) return;
|
||||
ApiEvent("api,%s\n", name);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::NewEvent(const char* name, void* object, size_t size) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("new,%s,0x%" V8PRIxPTR ",%u\n", name, object,
|
||||
static_cast<unsigned int>(size));
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::DeleteEvent(const char* name, void* object) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("delete,%s,0x%" V8PRIxPTR "\n", name, object);
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -866,7 +820,6 @@ void Logger::DeleteEventStatic(const char* name, void* object) {
|
||||
LOGGER->DeleteEvent(name, object);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
void Logger::CallbackEventInternal(const char* prefix, const char* name,
|
||||
Address entry_point) {
|
||||
if (!log_->IsEnabled() || !FLAG_log_code) return;
|
||||
@ -879,43 +832,35 @@ void Logger::CallbackEventInternal(const char* prefix, const char* name,
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void Logger::CallbackEvent(String* name, Address entry_point) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_code) return;
|
||||
SmartPointer<char> str =
|
||||
name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
||||
CallbackEventInternal("", *str, entry_point);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::GetterCallbackEvent(String* name, Address entry_point) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_code) return;
|
||||
SmartPointer<char> str =
|
||||
name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
||||
CallbackEventInternal("get ", *str, entry_point);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::SetterCallbackEvent(String* name, Address entry_point) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_code) return;
|
||||
SmartPointer<char> str =
|
||||
name->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
|
||||
CallbackEventInternal("set ", *str, entry_point);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
||||
Code* code,
|
||||
const char* comment) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof || Serializer::enabled()) {
|
||||
name_buffer_->Reset();
|
||||
@ -945,14 +890,12 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
||||
msg.Append('"');
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
||||
Code* code,
|
||||
String* name) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof || Serializer::enabled()) {
|
||||
name_buffer_->Reset();
|
||||
@ -977,11 +920,9 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
||||
msg.Append('"');
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// ComputeMarker must only be used when SharedFunctionInfo is known.
|
||||
static const char* ComputeMarker(Code* code) {
|
||||
switch (code->kind()) {
|
||||
@ -990,14 +931,12 @@ static const char* ComputeMarker(Code* code) {
|
||||
default: return "";
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
||||
Code* code,
|
||||
SharedFunctionInfo* shared,
|
||||
String* name) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof || Serializer::enabled()) {
|
||||
name_buffer_->Reset();
|
||||
@ -1029,7 +968,6 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
||||
msg.Append(",%s", ComputeMarker(code));
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -1040,7 +978,6 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
||||
Code* code,
|
||||
SharedFunctionInfo* shared,
|
||||
String* source, int line) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof || Serializer::enabled()) {
|
||||
name_buffer_->Reset();
|
||||
@ -1078,12 +1015,10 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
||||
msg.Append(",%s", ComputeMarker(code));
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof || Serializer::enabled()) {
|
||||
name_buffer_->Reset();
|
||||
@ -1106,21 +1041,17 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count) {
|
||||
msg.Append(",%d,\"args_count: %d\"", code->ExecutableSize(), args_count);
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::CodeMovingGCEvent() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_ll_prof) return;
|
||||
LowLevelLogWriteBytes(&kCodeMovingGCTag, sizeof(kCodeMovingGCTag));
|
||||
OS::SignalCodeMovingGC();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof || Serializer::enabled()) {
|
||||
name_buffer_->Reset();
|
||||
@ -1145,36 +1076,30 @@ void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
|
||||
msg.Append('\"');
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::CodeMoveEvent(Address from, Address to) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof) LowLevelCodeMoveEvent(from, to);
|
||||
if (Serializer::enabled() && address_to_name_map_ != NULL) {
|
||||
address_to_name_map_->Move(from, to);
|
||||
}
|
||||
MoveEventInternal(CODE_MOVE_EVENT, from, to);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::CodeDeleteEvent(Address from) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof) LowLevelCodeDeleteEvent(from);
|
||||
if (Serializer::enabled() && address_to_name_map_ != NULL) {
|
||||
address_to_name_map_->Remove(from);
|
||||
}
|
||||
DeleteEventInternal(CODE_DELETE_EVENT, from);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::SnapshotPositionEvent(Address addr, int pos) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled()) return;
|
||||
if (FLAG_ll_prof) LowLevelSnapshotPositionEvent(addr, pos);
|
||||
if (Serializer::enabled() && address_to_name_map_ != NULL) {
|
||||
@ -1196,18 +1121,14 @@ void Logger::SnapshotPositionEvent(Address addr, int pos) {
|
||||
msg.Append(",%d", pos);
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::SharedFunctionInfoMoveEvent(Address from, Address to) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
MoveEventInternal(SHARED_FUNC_MOVE_EVENT, from, to);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
void Logger::MoveEventInternal(LogEventsAndTags event,
|
||||
Address from,
|
||||
Address to) {
|
||||
@ -1220,10 +1141,8 @@ void Logger::MoveEventInternal(LogEventsAndTags event,
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
void Logger::DeleteEventInternal(LogEventsAndTags event, Address from) {
|
||||
if (!log_->IsEnabled() || !FLAG_log_code) return;
|
||||
LogMessageBuilder msg(this);
|
||||
@ -1232,11 +1151,9 @@ void Logger::DeleteEventInternal(LogEventsAndTags event, Address from) {
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void Logger::ResourceEvent(const char* name, const char* tag) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("%s,%s,", name, tag);
|
||||
@ -1249,12 +1166,10 @@ void Logger::ResourceEvent(const char* name, const char* tag) {
|
||||
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::SuspectReadEvent(String* name, Object* obj) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_suspect) return;
|
||||
LogMessageBuilder msg(this);
|
||||
String* class_name = obj->IsJSObject()
|
||||
@ -1268,12 +1183,10 @@ void Logger::SuspectReadEvent(String* name, Object* obj) {
|
||||
msg.Append('"');
|
||||
msg.Append('\n');
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::HeapSampleBeginEvent(const char* space, const char* kind) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_gc) return;
|
||||
LogMessageBuilder msg(this);
|
||||
// Using non-relative system time in order to be able to synchronize with
|
||||
@ -1281,42 +1194,34 @@ void Logger::HeapSampleBeginEvent(const char* space, const char* kind) {
|
||||
msg.Append("heap-sample-begin,\"%s\",\"%s\",%.0f\n",
|
||||
space, kind, OS::TimeCurrentMillis());
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::HeapSampleEndEvent(const char* space, const char* kind) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_gc) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("heap-sample-end,\"%s\",\"%s\"\n", space, kind);
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::HeapSampleItemEvent(const char* type, int number, int bytes) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log_gc) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("heap-sample-item,%s,%d,%d\n", type, number, bytes);
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::DebugTag(const char* call_site_tag) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log) return;
|
||||
LogMessageBuilder msg(this);
|
||||
msg.Append("debug-tag,%s\n", call_site_tag);
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_log) return;
|
||||
StringBuilder s(parameter.length() + 1);
|
||||
for (int i = 0; i < parameter.length(); ++i) {
|
||||
@ -1330,11 +1235,9 @@ void Logger::DebugEvent(const char* event_type, Vector<uint16_t> parameter) {
|
||||
parameter_string);
|
||||
DeleteArray(parameter_string);
|
||||
msg.WriteToLogFile();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
void Logger::TickEvent(TickSample* sample, bool overflow) {
|
||||
if (!log_->IsEnabled() || !FLAG_prof) return;
|
||||
LogMessageBuilder msg(this);
|
||||
@ -1545,7 +1448,6 @@ void Logger::LogCodeObject(Object* object) {
|
||||
|
||||
|
||||
void Logger::LogCodeInfo() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!log_->IsEnabled() || !FLAG_ll_prof) return;
|
||||
#if V8_TARGET_ARCH_IA32
|
||||
const char arch[] = "ia32";
|
||||
@ -1557,7 +1459,6 @@ void Logger::LogCodeInfo() {
|
||||
const char arch[] = "unknown";
|
||||
#endif
|
||||
LowLevelLogWriteBytes(arch, sizeof(arch));
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
}
|
||||
|
||||
|
||||
@ -1710,11 +1611,8 @@ void Logger::LogAccessorCallbacks() {
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
bool Logger::Setup() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// Tests and EnsureInitialize() can call this twice in a row. It's harmless.
|
||||
if (is_initialized_) return true;
|
||||
is_initialized_ = true;
|
||||
@ -1766,39 +1664,26 @@ bool Logger::Setup() {
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Sampler* Logger::sampler() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
return ticker_;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::EnsureTickerStarted() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
ASSERT(ticker_ != NULL);
|
||||
if (!ticker_->IsActive()) ticker_->Start();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::EnsureTickerStopped() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (ticker_ != NULL && ticker_->IsActive()) ticker_->Stop();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::TearDown() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!is_initialized_) return;
|
||||
is_initialized_ = false;
|
||||
|
||||
@ -1816,12 +1701,10 @@ void Logger::TearDown() {
|
||||
ticker_ = NULL;
|
||||
|
||||
log_->Close();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void Logger::EnableSlidingStateWindow() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// If the ticker is NULL, Logger::Setup has not been called yet. In
|
||||
// that case, we set the sliding_state_window flag so that the
|
||||
// sliding window computation will be started when Logger::Setup is
|
||||
@ -1835,7 +1718,6 @@ void Logger::EnableSlidingStateWindow() {
|
||||
if (sliding_state_window_ == NULL) {
|
||||
sliding_state_window_ = new SlidingStateWindow(Isolate::Current());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -1855,10 +1737,8 @@ bool SamplerRegistry::IterateActiveSamplers(VisitSampler func, void* param) {
|
||||
|
||||
|
||||
static void ComputeCpuProfiling(Sampler* sampler, void* flag_ptr) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
bool* flag = reinterpret_cast<bool*>(flag_ptr);
|
||||
*flag |= sampler->IsProfiling();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -78,7 +78,6 @@ class SlidingStateWindow;
|
||||
class Ticker;
|
||||
|
||||
#undef LOG
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
#define LOG(isolate, Call) \
|
||||
do { \
|
||||
v8::internal::Logger* logger = \
|
||||
@ -86,9 +85,6 @@ class Ticker;
|
||||
if (logger->is_logging()) \
|
||||
logger->Call; \
|
||||
} while (false)
|
||||
#else
|
||||
#define LOG(isolate, Call) ((void) 0)
|
||||
#endif
|
||||
|
||||
#define LOG_EVENTS_AND_TAGS_LIST(V) \
|
||||
V(CODE_CREATION_EVENT, "code-creation") \
|
||||
@ -272,7 +268,6 @@ class Logger {
|
||||
// Log an event reported from generated code
|
||||
void LogRuntime(Vector<const char> format, JSArray* args);
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
bool is_logging() {
|
||||
return logging_nesting_ > 0;
|
||||
}
|
||||
@ -424,9 +419,6 @@ class Logger {
|
||||
Address prev_code_;
|
||||
|
||||
friend class CpuProfiler;
|
||||
#else
|
||||
bool is_logging() { return false; }
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
@ -3255,11 +3255,9 @@ void MarkCompactCollector::ReportDeleteIfNeeded(HeapObject* obj,
|
||||
GDBJITInterface::RemoveCode(reinterpret_cast<Code*>(obj));
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (obj->IsCode()) {
|
||||
PROFILE(isolate, CodeDeleteEvent(obj->address()));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -3743,24 +3743,22 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
// 4 args slots
|
||||
// args
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// If this is the outermost JS call, set js_entry_sp value.
|
||||
Label non_outermost_js;
|
||||
ExternalReference js_entry_sp(Isolate::k_js_entry_sp_address,
|
||||
masm->isolate());
|
||||
__ li(t1, Operand(ExternalReference(js_entry_sp)));
|
||||
__ lw(t2, MemOperand(t1));
|
||||
__ Branch(&non_outermost_js, ne, t2, Operand(zero_reg));
|
||||
__ sw(fp, MemOperand(t1));
|
||||
__ li(t0, Operand(Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME)));
|
||||
Label cont;
|
||||
__ b(&cont);
|
||||
__ nop(); // Branch delay slot nop.
|
||||
__ bind(&non_outermost_js);
|
||||
__ li(t0, Operand(Smi::FromInt(StackFrame::INNER_JSENTRY_FRAME)));
|
||||
__ bind(&cont);
|
||||
__ push(t0);
|
||||
#endif
|
||||
// If this is the outermost JS call, set js_entry_sp value.
|
||||
Label non_outermost_js;
|
||||
ExternalReference js_entry_sp(Isolate::k_js_entry_sp_address,
|
||||
masm->isolate());
|
||||
__ li(t1, Operand(ExternalReference(js_entry_sp)));
|
||||
__ lw(t2, MemOperand(t1));
|
||||
__ Branch(&non_outermost_js, ne, t2, Operand(zero_reg));
|
||||
__ sw(fp, MemOperand(t1));
|
||||
__ li(t0, Operand(Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME)));
|
||||
Label cont;
|
||||
__ b(&cont);
|
||||
__ nop(); // Branch delay slot nop.
|
||||
__ bind(&non_outermost_js);
|
||||
__ li(t0, Operand(Smi::FromInt(StackFrame::INNER_JSENTRY_FRAME)));
|
||||
__ bind(&cont);
|
||||
__ push(t0);
|
||||
|
||||
// Call a faked try-block that does the invoke.
|
||||
__ bal(&invoke); // bal exposes branch delay slot.
|
||||
@ -3829,16 +3827,14 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ PopTryHandler();
|
||||
|
||||
__ bind(&exit); // v0 holds result
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// Check if the current stack frame is marked as the outermost JS frame.
|
||||
Label non_outermost_js_2;
|
||||
__ pop(t1);
|
||||
__ Branch(&non_outermost_js_2, ne, t1,
|
||||
Operand(Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME)));
|
||||
__ li(t1, Operand(ExternalReference(js_entry_sp)));
|
||||
__ sw(zero_reg, MemOperand(t1));
|
||||
__ bind(&non_outermost_js_2);
|
||||
#endif
|
||||
// Check if the current stack frame is marked as the outermost JS frame.
|
||||
Label non_outermost_js_2;
|
||||
__ pop(t1);
|
||||
__ Branch(&non_outermost_js_2, ne, t1,
|
||||
Operand(Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME)));
|
||||
__ li(t1, Operand(ExternalReference(js_entry_sp)));
|
||||
__ sw(zero_reg, MemOperand(t1));
|
||||
__ bind(&non_outermost_js_2);
|
||||
|
||||
// Restore the top frame descriptors from the stack.
|
||||
__ pop(t1);
|
||||
|
@ -60,9 +60,7 @@ class CodeGenerator: public AstVisitor {
|
||||
// Print the code after compiling it.
|
||||
static void PrintCode(Handle<Code> code, CompilationInfo* info);
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static bool ShouldGenerateLog(Expression* type);
|
||||
#endif
|
||||
|
||||
static void SetFunctionInfo(Handle<JSFunction> fun,
|
||||
FunctionLiteral* lit,
|
||||
|
@ -2784,13 +2784,12 @@ void FullCodeGenerator::EmitLog(ZoneList<Expression*>* args) {
|
||||
// with '%2s' (see Logger::LogRuntime for all the formats).
|
||||
// 2 (array): Arguments to the format string.
|
||||
ASSERT_EQ(args->length(), 3);
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (CodeGenerator::ShouldGenerateLog(args->at(0))) {
|
||||
VisitForStackValue(args->at(1));
|
||||
VisitForStackValue(args->at(2));
|
||||
__ CallRuntime(Runtime::kLog, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Finally, we're expected to leave a value on the top of the stack.
|
||||
__ LoadRoot(v0, Heap::kUndefinedValueRootIndex);
|
||||
context()->Plug(v0);
|
||||
|
@ -296,10 +296,9 @@ class BZip2Decompressor : public StartupDataDecompressor {
|
||||
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// By default, log code create information in the snapshot.
|
||||
i::FLAG_log_code = true;
|
||||
#endif
|
||||
|
||||
// Print the usage if an error occurs when parsing the command line
|
||||
// flags or if the help flag is set.
|
||||
int result = i::FlagList::SetFlagsFromCommandLine(&argc, argv, true);
|
||||
|
@ -232,7 +232,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
||||
|
||||
|
||||
void OS::LogSharedLibraryAddresses() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// This function assumes that the layout of the file is as follows:
|
||||
// hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name]
|
||||
// If we encounter an unexpected situation we abort scanning further entries.
|
||||
@ -289,7 +288,6 @@ void OS::LogSharedLibraryAddresses() {
|
||||
}
|
||||
free(lib_name);
|
||||
fclose(fp);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -574,8 +572,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Cygwin profiler support.
|
||||
//
|
||||
@ -752,7 +748,5 @@ void Sampler::Stop() {
|
||||
SetActive(false);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
|
@ -252,15 +252,12 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static unsigned StringToLong(char* buffer) {
|
||||
return static_cast<unsigned>(strtol(buffer, NULL, 16)); // NOLINT
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void OS::LogSharedLibraryAddresses() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static const int MAP_LENGTH = 1024;
|
||||
int fd = open("/proc/self/maps", O_RDONLY);
|
||||
if (fd < 0) return;
|
||||
@ -297,7 +294,6 @@ void OS::LogSharedLibraryAddresses() {
|
||||
LOG(i::Isolate::Current(), SharedLibraryEvent(start_of_path, start, end));
|
||||
}
|
||||
close(fd);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -574,8 +570,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
static pthread_t GetThreadID() {
|
||||
pthread_t thread_id = pthread_self();
|
||||
return thread_id;
|
||||
@ -803,6 +797,5 @@ void Sampler::Stop() {
|
||||
SetActive(false);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -466,7 +466,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
||||
|
||||
|
||||
void OS::LogSharedLibraryAddresses() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// This function assumes that the layout of the file is as follows:
|
||||
// hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name]
|
||||
// If we encounter an unexpected situation we abort scanning further entries.
|
||||
@ -523,7 +522,6 @@ void OS::LogSharedLibraryAddresses() {
|
||||
}
|
||||
free(lib_name);
|
||||
fclose(fp);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -531,7 +529,6 @@ static const char kGCFakeMmap[] = "/tmp/__v8_gc__";
|
||||
|
||||
|
||||
void OS::SignalCodeMovingGC() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// Support for ll_prof.py.
|
||||
//
|
||||
// The Linux profiler built into the kernel logs all mmap's with
|
||||
@ -547,7 +544,6 @@ void OS::SignalCodeMovingGC() {
|
||||
ASSERT(addr != MAP_FAILED);
|
||||
munmap(addr, size);
|
||||
fclose(f);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -842,8 +838,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#if !defined(__GLIBC__) && (defined(__arm__) || defined(__thumb__))
|
||||
// Android runs a fairly new Linux kernel, so signal info is there,
|
||||
// but the C library doesn't have the structs defined.
|
||||
@ -1131,6 +1125,5 @@ void Sampler::Stop() {
|
||||
SetActive(false);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -234,7 +234,6 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
||||
|
||||
|
||||
void OS::LogSharedLibraryAddresses() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
unsigned int images_count = _dyld_image_count();
|
||||
for (unsigned int i = 0; i < images_count; ++i) {
|
||||
const mach_header* header = _dyld_get_image_header(i);
|
||||
@ -256,7 +255,6 @@ void OS::LogSharedLibraryAddresses() {
|
||||
LOG(Isolate::Current(),
|
||||
SharedLibraryEvent(_dyld_get_image_name(i), start, start + size));
|
||||
}
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
}
|
||||
|
||||
|
||||
@ -630,8 +628,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
class Sampler::PlatformData : public Malloced {
|
||||
public:
|
||||
PlatformData() : profiled_thread_(mach_thread_self()) {}
|
||||
@ -807,6 +803,5 @@ void Sampler::Stop() {
|
||||
SetActive(false);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -423,7 +423,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
||||
return new NullSemaphore(count);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
class ProfileSampler::PlatformData : public Malloced {
|
||||
public:
|
||||
@ -458,6 +457,5 @@ void ProfileSampler::Stop() {
|
||||
UNIMPLEMENTED();
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -250,15 +250,12 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static unsigned StringToLong(char* buffer) {
|
||||
return static_cast<unsigned>(strtol(buffer, NULL, 16)); // NOLINT
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void OS::LogSharedLibraryAddresses() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static const int MAP_LENGTH = 1024;
|
||||
int fd = open("/proc/self/maps", O_RDONLY);
|
||||
if (fd < 0) return;
|
||||
@ -295,7 +292,6 @@ void OS::LogSharedLibraryAddresses() {
|
||||
LOG(i::Isolate::Current(), SharedLibraryEvent(start_of_path, start, end));
|
||||
}
|
||||
close(fd);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -576,8 +572,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
static pthread_t GetThreadID() {
|
||||
pthread_t thread_id = pthread_self();
|
||||
return thread_id;
|
||||
@ -804,6 +798,5 @@ void Sampler::Stop() {
|
||||
SetActive(false);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -572,8 +572,6 @@ Semaphore* OS::CreateSemaphore(int count) {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
static pthread_t GetThreadID() {
|
||||
return pthread_self();
|
||||
}
|
||||
@ -800,6 +798,4 @@ void Sampler::Stop() {
|
||||
SetActive(false);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -1839,8 +1839,6 @@ Socket* OS::CreateSocket() {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Win32 profiler support.
|
||||
|
||||
@ -2015,6 +2013,5 @@ void Sampler::Stop() {
|
||||
SetActive(false);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -597,7 +597,6 @@ class TickSample {
|
||||
bool has_external_callback : 1;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
class Sampler {
|
||||
public:
|
||||
// Initialize sampler.
|
||||
@ -656,8 +655,6 @@ class Sampler {
|
||||
};
|
||||
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
#endif // V8_PLATFORM_H_
|
||||
|
@ -28,8 +28,6 @@
|
||||
#ifndef V8_PROFILE_GENERATOR_INL_H_
|
||||
#define V8_PROFILE_GENERATOR_INL_H_
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include "profile-generator.h"
|
||||
|
||||
namespace v8 {
|
||||
@ -123,6 +121,4 @@ uint64_t HeapEntry::id() {
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#endif // V8_PROFILE_GENERATOR_INL_H_
|
||||
|
@ -25,8 +25,6 @@
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include "v8.h"
|
||||
|
||||
#include "profile-generator-inl.h"
|
||||
@ -3259,5 +3257,3 @@ String* GetConstructorNameForHeapProfile(JSObject* object) {
|
||||
}
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
@ -28,8 +28,6 @@
|
||||
#ifndef V8_PROFILE_GENERATOR_H_
|
||||
#define V8_PROFILE_GENERATOR_H_
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include "allocation.h"
|
||||
#include "hashmap.h"
|
||||
#include "../include/v8-profiler.h"
|
||||
@ -1126,6 +1124,4 @@ String* GetConstructorNameForHeapProfile(JSObject* object);
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#endif // V8_PROFILE_GENERATOR_H_
|
||||
|
@ -61,9 +61,7 @@ static const int kSizeLimit = 1500;
|
||||
Atomic32 RuntimeProfiler::state_ = 0;
|
||||
// TODO(isolates): Create the semaphore lazily and clean it up when no
|
||||
// longer required.
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Semaphore* RuntimeProfiler::semaphore_ = OS::CreateSemaphore(0);
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
bool RuntimeProfiler::has_been_globally_setup_ = false;
|
||||
@ -245,9 +243,7 @@ void RuntimeProfiler::OptimizeNow() {
|
||||
|
||||
|
||||
void RuntimeProfiler::NotifyTick() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
isolate_->stack_guard()->RequestRuntimeProfilerTick();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -295,7 +291,6 @@ void RuntimeProfiler::UpdateSamplesAfterScavenge() {
|
||||
|
||||
|
||||
void RuntimeProfiler::HandleWakeUp(Isolate* isolate) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// The profiler thread must still be waiting.
|
||||
ASSERT(NoBarrier_Load(&state_) >= 0);
|
||||
// In IsolateEnteredJS we have already incremented the counter and
|
||||
@ -303,7 +298,6 @@ void RuntimeProfiler::HandleWakeUp(Isolate* isolate) {
|
||||
// to get the right count of active isolates.
|
||||
NoBarrier_AtomicIncrement(&state_, 1);
|
||||
semaphore_->Signal();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -313,18 +307,15 @@ bool RuntimeProfiler::IsSomeIsolateInJS() {
|
||||
|
||||
|
||||
bool RuntimeProfiler::WaitForSomeIsolateToEnterJS() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Atomic32 old_state = NoBarrier_CompareAndSwap(&state_, 0, -1);
|
||||
ASSERT(old_state >= -1);
|
||||
if (old_state != 0) return false;
|
||||
semaphore_->Wait();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(Thread* thread) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// Do a fake increment. If the profiler is waiting on the semaphore,
|
||||
// the returned state is 0, which can be left as an initial state in
|
||||
// case profiling is restarted later. If the profiler is not
|
||||
@ -343,7 +334,6 @@ void RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(Thread* thread) {
|
||||
if (new_state != 0) {
|
||||
NoBarrier_AtomicIncrement(&state_, -1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -365,11 +355,9 @@ void RuntimeProfiler::UpdateSamplesAfterCompact(ObjectVisitor* visitor) {
|
||||
|
||||
|
||||
bool RuntimeProfilerRateLimiter::SuspendIfNecessary() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (!RuntimeProfiler::IsSomeIsolateInJS()) {
|
||||
return RuntimeProfiler::WaitForSomeIsolateToEnterJS();
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -12145,7 +12145,6 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SummarizeLOL) {
|
||||
#endif // ENABLE_DEBUGGER_SUPPORT
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
RUNTIME_FUNCTION(MaybeObject*, Runtime_ProfilerResume) {
|
||||
NoHandleAllocation ha;
|
||||
v8::V8::ResumeProfiler();
|
||||
@ -12159,7 +12158,6 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ProfilerPause) {
|
||||
return isolate->heap()->undefined_value();
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
// Finds the script object from the script data. NOTE: This operation uses
|
||||
// heap traversal to find the function generated for the source position
|
||||
|
@ -349,7 +349,10 @@ namespace internal {
|
||||
F(HasExternalIntElements, 1, 1) \
|
||||
F(HasExternalUnsignedIntElements, 1, 1) \
|
||||
F(HasExternalFloatElements, 1, 1) \
|
||||
F(HasExternalDoubleElements, 1, 1)
|
||||
F(HasExternalDoubleElements, 1, 1) \
|
||||
/* profiler */ \
|
||||
F(ProfilerResume, 0, 1) \
|
||||
F(ProfilerPause, 0, 1)
|
||||
|
||||
|
||||
#ifdef ENABLE_DEBUGGER_SUPPORT
|
||||
@ -427,14 +430,6 @@ namespace internal {
|
||||
#define RUNTIME_FUNCTION_LIST_DEBUGGER_SUPPORT(F)
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
#define RUNTIME_FUNCTION_LIST_PROFILER_SUPPORT(F) \
|
||||
F(ProfilerResume, 0, 1) \
|
||||
F(ProfilerPause, 0, 1)
|
||||
#else
|
||||
#define RUNTIME_FUNCTION_LIST_PROFILER_SUPPORT(F)
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define RUNTIME_FUNCTION_LIST_DEBUG(F) \
|
||||
/* Testing */ \
|
||||
@ -452,8 +447,7 @@ namespace internal {
|
||||
RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \
|
||||
RUNTIME_FUNCTION_LIST_ALWAYS_2(F) \
|
||||
RUNTIME_FUNCTION_LIST_DEBUG(F) \
|
||||
RUNTIME_FUNCTION_LIST_DEBUGGER_SUPPORT(F) \
|
||||
RUNTIME_FUNCTION_LIST_PROFILER_SUPPORT(F)
|
||||
RUNTIME_FUNCTION_LIST_DEBUGGER_SUPPORT(F)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// INLINE_FUNCTION_LIST defines all inlined functions accessed
|
||||
|
@ -284,7 +284,6 @@ void ExternalReferenceTable::PopulateTable(Isolate* isolate) {
|
||||
const char* AddressNames[] = {
|
||||
#define C(name) "Isolate::" #name,
|
||||
ISOLATE_ADDRESS_LIST(C)
|
||||
ISOLATE_ADDRESS_LIST_PROF(C)
|
||||
NULL
|
||||
#undef C
|
||||
};
|
||||
|
@ -1172,7 +1172,6 @@ bool NewSpace::Setup(Address start, int size) {
|
||||
ASSERT(IsPowerOf2(maximum_semispace_capacity));
|
||||
|
||||
// Allocate and setup the histogram arrays if necessary.
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
allocated_histogram_ = NewArray<HistogramInfo>(LAST_TYPE + 1);
|
||||
promoted_histogram_ = NewArray<HistogramInfo>(LAST_TYPE + 1);
|
||||
|
||||
@ -1180,7 +1179,6 @@ bool NewSpace::Setup(Address start, int size) {
|
||||
promoted_histogram_[name].set_name(#name);
|
||||
INSTANCE_TYPE_LIST(SET_NAME)
|
||||
#undef SET_NAME
|
||||
#endif
|
||||
|
||||
ASSERT(size == 2 * heap()->ReservedSemiSpaceSize());
|
||||
ASSERT(IsAddressAligned(start, size, 0));
|
||||
@ -1212,7 +1210,6 @@ bool NewSpace::Setup(Address start, int size) {
|
||||
|
||||
|
||||
void NewSpace::TearDown() {
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
if (allocated_histogram_) {
|
||||
DeleteArray(allocated_histogram_);
|
||||
allocated_histogram_ = NULL;
|
||||
@ -1221,7 +1218,6 @@ void NewSpace::TearDown() {
|
||||
DeleteArray(promoted_histogram_);
|
||||
promoted_histogram_ = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
start_ = NULL;
|
||||
allocation_info_.top = NULL;
|
||||
@ -1596,7 +1592,6 @@ static void ReportHistogram(bool print_spill) {
|
||||
|
||||
|
||||
// Support for statistics gathering for --heap-stats and --log-gc.
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
void NewSpace::ClearHistograms() {
|
||||
for (int i = 0; i <= LAST_TYPE; i++) {
|
||||
allocated_histogram_[i].clear();
|
||||
@ -1606,9 +1601,7 @@ void NewSpace::ClearHistograms() {
|
||||
|
||||
// Because the copying collector does not touch garbage objects, we iterate
|
||||
// the new space before a collection to get a histogram of allocated objects.
|
||||
// This only happens (1) when compiled with DEBUG and the --heap-stats flag is
|
||||
// set, or when compiled with ENABLE_LOGGING_AND_PROFILING and the --log-gc
|
||||
// flag is set.
|
||||
// This only happens when --log-gc flag is set.
|
||||
void NewSpace::CollectStatistics() {
|
||||
ClearHistograms();
|
||||
SemiSpaceIterator it(this);
|
||||
@ -1617,7 +1610,6 @@ void NewSpace::CollectStatistics() {
|
||||
}
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static void DoReportStatistics(Isolate* isolate,
|
||||
HistogramInfo* info, const char* description) {
|
||||
LOG(isolate, HeapSampleBeginEvent("NewSpace", description));
|
||||
@ -1644,7 +1636,6 @@ static void DoReportStatistics(Isolate* isolate,
|
||||
}
|
||||
LOG(isolate, HeapSampleEndEvent("NewSpace", description));
|
||||
}
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
|
||||
void NewSpace::ReportStatistics() {
|
||||
@ -1667,13 +1658,11 @@ void NewSpace::ReportStatistics() {
|
||||
}
|
||||
#endif // DEBUG
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (FLAG_log_gc) {
|
||||
Isolate* isolate = ISOLATE;
|
||||
DoReportStatistics(isolate, allocated_histogram_, "allocated");
|
||||
DoReportStatistics(isolate, promoted_histogram_, "promoted");
|
||||
}
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
}
|
||||
|
||||
|
||||
@ -1691,7 +1680,6 @@ void NewSpace::RecordPromotion(HeapObject* obj) {
|
||||
promoted_histogram_[type].increment_number(1);
|
||||
promoted_histogram_[type].increment_bytes(obj->Size());
|
||||
}
|
||||
#endif // defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
10
src/spaces.h
10
src/spaces.h
@ -1247,7 +1247,6 @@ class PagedSpace : public Space {
|
||||
};
|
||||
|
||||
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
class NumberAndSizeInfo BASE_EMBEDDED {
|
||||
public:
|
||||
NumberAndSizeInfo() : number_(0), bytes_(0) {}
|
||||
@ -1270,9 +1269,7 @@ class NumberAndSizeInfo BASE_EMBEDDED {
|
||||
|
||||
|
||||
// HistogramInfo class for recording a single "bar" of a histogram. This
|
||||
// class is used for collecting statistics to print to stdout (when compiled
|
||||
// with DEBUG) or to the log file (when compiled with
|
||||
// ENABLE_LOGGING_AND_PROFILING).
|
||||
// class is used for collecting statistics to print to the log file.
|
||||
class HistogramInfo: public NumberAndSizeInfo {
|
||||
public:
|
||||
HistogramInfo() : NumberAndSizeInfo() {}
|
||||
@ -1283,7 +1280,6 @@ class HistogramInfo: public NumberAndSizeInfo {
|
||||
private:
|
||||
const char* name_;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@ -1606,7 +1602,6 @@ class NewSpace : public Space {
|
||||
virtual void Print() { to_space_.Print(); }
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
// Iterates the active semispace to collect statistics.
|
||||
void CollectStatistics();
|
||||
// Reports previously collected statistics of the active semispace.
|
||||
@ -1619,7 +1614,6 @@ class NewSpace : public Space {
|
||||
// to space during a scavenge GC.
|
||||
void RecordAllocation(HeapObject* obj);
|
||||
void RecordPromotion(HeapObject* obj);
|
||||
#endif
|
||||
|
||||
// Return whether the operation succeded.
|
||||
bool CommitFromSpaceIfNeeded() {
|
||||
@ -1648,10 +1642,8 @@ class NewSpace : public Space {
|
||||
AllocationInfo allocation_info_;
|
||||
AllocationInfo mc_forwarding_info_;
|
||||
|
||||
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING)
|
||||
HistogramInfo* allocated_histogram_;
|
||||
HistogramInfo* promoted_histogram_;
|
||||
#endif
|
||||
|
||||
// Implementation of AllocateRaw and MCAllocateRaw.
|
||||
MUST_USE_RESULT inline MaybeObject* AllocateRawInternal(
|
||||
|
@ -395,12 +395,11 @@ struct AccessorDescriptor {
|
||||
};
|
||||
|
||||
|
||||
// Logging and profiling.
|
||||
// A StateTag represents a possible state of the VM. When compiled with
|
||||
// ENABLE_VMSTATE_TRACKING, the logger maintains a stack of these.
|
||||
// Creating a VMState object enters a state by pushing on the stack, and
|
||||
// destroying a VMState object leaves a state by popping the current state
|
||||
// from the stack.
|
||||
// Logging and profiling. A StateTag represents a possible state of
|
||||
// the VM. The logger maintains a stack of these. Creating a VMState
|
||||
// object enters a state by pushing on the stack, and destroying a
|
||||
// VMState object leaves a state by popping the current state from the
|
||||
// stack.
|
||||
|
||||
#define STATE_TAG_LIST(V) \
|
||||
V(JS) \
|
||||
|
@ -39,7 +39,6 @@ namespace internal {
|
||||
// logger and partially threaded through the call stack. States are pushed by
|
||||
// VMState construction and popped by destruction.
|
||||
//
|
||||
#ifdef ENABLE_VMSTATE_TRACKING
|
||||
inline const char* StateToString(StateTag state) {
|
||||
switch (state) {
|
||||
case JS:
|
||||
@ -61,19 +60,16 @@ inline const char* StateToString(StateTag state) {
|
||||
|
||||
VMState::VMState(Isolate* isolate, StateTag tag)
|
||||
: isolate_(isolate), previous_tag_(isolate->current_vm_state()) {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (FLAG_log_state_changes) {
|
||||
LOG(isolate, UncheckedStringEvent("Entering", StateToString(tag)));
|
||||
LOG(isolate, UncheckedStringEvent("From", StateToString(previous_tag_)));
|
||||
}
|
||||
#endif
|
||||
|
||||
isolate_->SetCurrentVMState(tag);
|
||||
}
|
||||
|
||||
|
||||
VMState::~VMState() {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (FLAG_log_state_changes) {
|
||||
LOG(isolate_,
|
||||
UncheckedStringEvent("Leaving",
|
||||
@ -81,15 +77,10 @@ VMState::~VMState() {
|
||||
LOG(isolate_,
|
||||
UncheckedStringEvent("To", StateToString(previous_tag_)));
|
||||
}
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
isolate_->SetCurrentVMState(previous_tag_);
|
||||
}
|
||||
|
||||
#endif // ENABLE_VMSTATE_TRACKING
|
||||
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
ExternalCallbackScope::ExternalCallbackScope(Isolate* isolate, Address callback)
|
||||
: isolate_(isolate), previous_callback_(isolate->external_callback()) {
|
||||
@ -100,8 +91,6 @@ ExternalCallbackScope::~ExternalCallbackScope() {
|
||||
isolate_->set_external_callback(previous_callback_);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
||||
|
@ -35,7 +35,6 @@ namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
class VMState BASE_EMBEDDED {
|
||||
#ifdef ENABLE_VMSTATE_TRACKING
|
||||
public:
|
||||
inline VMState(Isolate* isolate, StateTag tag);
|
||||
inline ~VMState();
|
||||
@ -43,26 +42,16 @@ class VMState BASE_EMBEDDED {
|
||||
private:
|
||||
Isolate* isolate_;
|
||||
StateTag previous_tag_;
|
||||
|
||||
#else
|
||||
public:
|
||||
VMState(Isolate* isolate, StateTag state) {}
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
class ExternalCallbackScope BASE_EMBEDDED {
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
public:
|
||||
inline ExternalCallbackScope(Isolate* isolate, Address callback);
|
||||
inline ~ExternalCallbackScope();
|
||||
private:
|
||||
Isolate* isolate_;
|
||||
Address previous_callback_;
|
||||
#else
|
||||
public:
|
||||
ExternalCallbackScope(Isolate* isolate, Address callback) {}
|
||||
#endif
|
||||
};
|
||||
|
||||
} } // namespace v8::internal
|
||||
|
@ -3450,9 +3450,7 @@ void CEntryStub::Generate(MacroAssembler* masm) {
|
||||
|
||||
void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
Label invoke, exit;
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
Label not_outermost_js, not_outermost_js_2;
|
||||
#endif
|
||||
{ // NOLINT. Scope block confuses linter.
|
||||
MacroAssembler::NoRootArrayScope uninitialized_root_register(masm);
|
||||
// Setup frame.
|
||||
@ -3497,7 +3495,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ push(c_entry_fp_operand);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// If this is the outermost JS call, set js_entry_sp value.
|
||||
ExternalReference js_entry_sp(Isolate::k_js_entry_sp_address, isolate);
|
||||
__ Load(rax, js_entry_sp);
|
||||
@ -3511,7 +3508,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ bind(¬_outermost_js);
|
||||
__ Push(Smi::FromInt(StackFrame::INNER_JSENTRY_FRAME));
|
||||
__ bind(&cont);
|
||||
#endif
|
||||
|
||||
// Call a faked try-block that does the invoke.
|
||||
__ call(&invoke);
|
||||
@ -3555,7 +3551,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ PopTryHandler();
|
||||
|
||||
__ bind(&exit);
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
// Check if the current stack frame is marked as the outermost JS frame.
|
||||
__ pop(rbx);
|
||||
__ Cmp(rbx, Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME));
|
||||
@ -3563,7 +3558,6 @@ void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
|
||||
__ movq(kScratchRegister, js_entry_sp);
|
||||
__ movq(Operand(kScratchRegister, 0), Immediate(0));
|
||||
__ bind(¬_outermost_js_2);
|
||||
#endif
|
||||
|
||||
// Restore the top frame descriptor from the stack.
|
||||
{ Operand c_entry_fp_operand = masm->ExternalOperand(c_entry_fp);
|
||||
|
@ -58,9 +58,7 @@ class CodeGenerator: public AstVisitor {
|
||||
// Print the code after compiling it.
|
||||
static void PrintCode(Handle<Code> code, CompilationInfo* info);
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
static bool ShouldGenerateLog(Expression* type);
|
||||
#endif
|
||||
|
||||
static bool RecordPositions(MacroAssembler* masm,
|
||||
int pos,
|
||||
|
@ -2668,13 +2668,11 @@ void FullCodeGenerator::EmitLog(ZoneList<Expression*>* args) {
|
||||
// with '%2s' (see Logger::LogRuntime for all the formats).
|
||||
// 2 (array): Arguments to the format string.
|
||||
ASSERT_EQ(args->length(), 3);
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
if (CodeGenerator::ShouldGenerateLog(args->at(0))) {
|
||||
VisitForStackValue(args->at(1));
|
||||
VisitForStackValue(args->at(2));
|
||||
__ CallRuntime(Runtime::kLog, 2);
|
||||
}
|
||||
#endif
|
||||
// Finally, we're expected to leave a value on the top of the stack.
|
||||
__ LoadRoot(rax, Heap::kUndefinedValueRootIndex);
|
||||
context()->Plug(rax);
|
||||
|
@ -2,8 +2,6 @@
|
||||
//
|
||||
// Tests of profiles generator and utilities.
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include "v8.h"
|
||||
#include "cpu-profiler-inl.h"
|
||||
#include "cctest.h"
|
||||
@ -401,5 +399,3 @@ TEST(DeleteCpuProfileDifferentTokens) {
|
||||
CHECK_EQ(0, CpuProfiler::GetProfilesCount());
|
||||
CHECK_EQ(NULL, v8::CpuProfiler::FindProfile(uid3));
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
@ -2,8 +2,6 @@
|
||||
//
|
||||
// Tests for heap profiler
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include "v8.h"
|
||||
|
||||
#include "cctest.h"
|
||||
@ -893,5 +891,3 @@ TEST(NodesIteration) {
|
||||
}
|
||||
CHECK_EQ(1, count);
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
@ -2,8 +2,6 @@
|
||||
//
|
||||
// Tests of logging utilities from log-utils.h
|
||||
|
||||
#ifdef ENABLE_LOGGING_AND_PROFILING
|
||||
|
||||
#include "v8.h"
|
||||
|
||||
#include "log-utils.h"
|
||||
@ -136,5 +134,3 @@ TEST(DynaBufSealing) {
|
||||
// Verify that there's no data beyond the seal.
|
||||
CHECK_EQ(0, ReadData(&dynabuf, 100 + seal_size, &buf));
|
||||
}
|
||||
|
||||
#endif // ENABLE_LOGGING_AND_PROFILING
|
||||
|
@ -97,8 +97,6 @@ local function MakeClangCommandLine(plugin, plugin_args, triple, arch_define)
|
||||
.. (plugin_args or "")
|
||||
.. " -triple " .. triple
|
||||
.. " -D" .. arch_define
|
||||
.. " -DENABLE_VMSTATE_TRACKING"
|
||||
.. " -DENABLE_LOGGING_AND_PROFILING"
|
||||
.. " -DENABLE_DEBUGGER_SUPPORT"
|
||||
.. " -Isrc"
|
||||
end
|
||||
|
@ -62,9 +62,7 @@
|
||||
['use_system_v8==0', {
|
||||
'target_defaults': {
|
||||
'defines': [
|
||||
'ENABLE_LOGGING_AND_PROFILING',
|
||||
'ENABLE_DEBUGGER_SUPPORT',
|
||||
'ENABLE_VMSTATE_TRACKING',
|
||||
'V8_FAST_TLS',
|
||||
],
|
||||
'conditions': [
|
||||
|
Loading…
Reference in New Issue
Block a user