Commit acc336c1 authored by Matheus Marchini's avatar Matheus Marchini Committed by Commit Bot

[log] fix boolean logic on LogCodeObject

R=yangguo@google.com

Change-Id: Icb4825344991e5b2d15050e037064c60eeb9617e
Reviewed-on: https://chromium-review.googlesource.com/1097578Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/master@{#53777}
parent 3f3c6e69
...@@ -2023,7 +2023,7 @@ void ExistingCodeLogger::LogCodeObject(Object* object) { ...@@ -2023,7 +2023,7 @@ void ExistingCodeLogger::LogCodeObject(Object* object) {
break; break;
case AbstractCode::BUILTIN: case AbstractCode::BUILTIN:
if (Code::cast(object)->is_interpreter_trampoline_builtin() && if (Code::cast(object)->is_interpreter_trampoline_builtin() &&
Code::cast(object) == Code::cast(object) !=
*BUILTIN_CODE(isolate_, InterpreterEntryTrampoline)) { *BUILTIN_CODE(isolate_, InterpreterEntryTrampoline)) {
return; return;
} }
......
...@@ -36,6 +36,9 @@ ...@@ -36,6 +36,9 @@
#include <unordered_set> #include <unordered_set>
#include <vector> #include <vector>
// The C++ style guide recommends using <re2> instead of <regex>. However, the
// former isn't available in V8.
#include <regex> // NOLINT(build/c++11)
#include "src/api.h" #include "src/api.h"
#include "src/log-utils.h" #include "src/log-utils.h"
#include "src/log.h" #include "src/log.h"
...@@ -257,30 +260,41 @@ class TestCodeEventHandler : public v8::CodeEventHandler { ...@@ -257,30 +260,41 @@ class TestCodeEventHandler : public v8::CodeEventHandler {
explicit TestCodeEventHandler(v8::Isolate* isolate) explicit TestCodeEventHandler(v8::Isolate* isolate)
: v8::CodeEventHandler(isolate) {} : v8::CodeEventHandler(isolate) {}
const char* FindLine(const char* prefix, const char* suffix = nullptr, size_t CountLines(std::string prefix, std::string suffix = std::string()) {
const char* start = nullptr) { if (!log_.length()) return 0;
if (!log_.length()) return NULL;
const char* c_log = log_.c_str(); std::regex expression("(^|\\n)" + prefix + ".*" + suffix + "(?=\\n|$)");
if (start == nullptr) start = c_log;
const char* end = c_log + log_.length(); size_t match_count(std::distance(
return FindLogLine(start, end, prefix, suffix); std::sregex_iterator(log_.begin(), log_.end(), expression),
std::sregex_iterator()));
return match_count;
} }
void Handle(v8::CodeEvent* code_event) override { void Handle(v8::CodeEvent* code_event) override {
const char* code_type = std::string log_line = "";
v8::CodeEvent::GetCodeEventTypeName(code_event->GetCodeType()); log_line += v8::CodeEvent::GetCodeEventTypeName(code_event->GetCodeType());
char function_name[1000]; log_line += " ";
strncpy(function_name, code_type, 1000); log_line += FormatName(code_event);
function_name[strlen(code_type)] = ' '; log_line += "\n";
code_event->GetFunctionName()->WriteUtf8( log_ += log_line;
function_name + strlen(code_type) + 1, 1000);
function_name[strlen(function_name) + 1] = '\0';
function_name[strlen(function_name)] = '\n';
log_ += std::string(function_name);
} }
private: private:
std::string FormatName(v8::CodeEvent* code_event) {
std::string name = std::string(code_event->GetComment());
if (name.empty()) {
v8::Local<v8::String> functionName = code_event->GetFunctionName();
std::string buffer(functionName->Utf8Length() + 1, 0);
functionName->WriteUtf8(&buffer[0], functionName->Utf8Length() + 1);
// Sanitize name, removing unwanted \0 resulted from WriteUtf8
name = std::string(buffer.c_str());
}
return name;
}
std::string log_; std::string log_;
}; };
...@@ -854,21 +868,24 @@ TEST(ExternalCodeEventListener) { ...@@ -854,21 +868,24 @@ TEST(ExternalCodeEventListener) {
"testCodeEventListenerBeforeStart('1', 1);"; "testCodeEventListenerBeforeStart('1', 1);";
CompileRun(source_text_before_start); CompileRun(source_text_before_start);
CHECK_NULL(code_event_handler.FindLine("LazyCompile", CHECK_EQ(code_event_handler.CountLines("LazyCompile",
"testCodeEventListenerBeforeStart")); "testCodeEventListenerBeforeStart"),
0);
code_event_handler.Enable(); code_event_handler.Enable();
CHECK_NOT_NULL(code_event_handler.FindLine( CHECK_GE(code_event_handler.CountLines("LazyCompile",
"LazyCompile", "testCodeEventListenerBeforeStart")); "testCodeEventListenerBeforeStart"),
1);
const char* source_text_after_start = const char* source_text_after_start =
"function testCodeEventListenerAfterStart(a,b) { return a + b };" "function testCodeEventListenerAfterStart(a,b) { return a + b };"
"testCodeEventListenerAfterStart('1', 1);"; "testCodeEventListenerAfterStart('1', 1);";
CompileRun(source_text_after_start); CompileRun(source_text_after_start);
CHECK_NOT_NULL(code_event_handler.FindLine( CHECK_GE(code_event_handler.CountLines("LazyCompile",
"LazyCompile", "testCodeEventListenerAfterStart")); "testCodeEventListenerAfterStart"),
1);
context->Exit(); context->Exit();
} }
...@@ -897,21 +914,28 @@ TEST(ExternalCodeEventListenerWithInterpretedFramesNativeStack) { ...@@ -897,21 +914,28 @@ TEST(ExternalCodeEventListenerWithInterpretedFramesNativeStack) {
"testCodeEventListenerBeforeStart('1', 1);"; "testCodeEventListenerBeforeStart('1', 1);";
CompileRun(source_text_before_start); CompileRun(source_text_before_start);
CHECK_NULL(code_event_handler.FindLine("InterpretedFunction", CHECK_EQ(code_event_handler.CountLines("InterpretedFunction",
"testCodeEventListenerBeforeStart")); "testCodeEventListenerBeforeStart"),
0);
code_event_handler.Enable(); code_event_handler.Enable();
CHECK_NOT_NULL(code_event_handler.FindLine( CHECK_GE(code_event_handler.CountLines("InterpretedFunction",
"InterpretedFunction", "testCodeEventListenerBeforeStart")); "testCodeEventListenerBeforeStart"),
1);
const char* source_text_after_start = const char* source_text_after_start =
"function testCodeEventListenerAfterStart(a,b) { return a + b };" "function testCodeEventListenerAfterStart(a,b) { return a + b };"
"testCodeEventListenerAfterStart('1', 1);"; "testCodeEventListenerAfterStart('1', 1);";
CompileRun(source_text_after_start); CompileRun(source_text_after_start);
CHECK_NOT_NULL(code_event_handler.FindLine( CHECK_GE(code_event_handler.CountLines("InterpretedFunction",
"InterpretedFunction", "testCodeEventListenerAfterStart")); "testCodeEventListenerAfterStart"),
1);
CHECK_EQ(
code_event_handler.CountLines("Builtin", "InterpreterEntryTrampoline"),
1);
context->Exit(); context->Exit();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment