| Index: test/cctest/test-log.cc
|
| diff --git a/test/cctest/test-log.cc b/test/cctest/test-log.cc
|
| index 7168737416588efdde191ad876e5672f478c2469..710c10e996a8b235e6bed159febc683c275c4e64 100644
|
| --- a/test/cctest/test-log.cc
|
| +++ b/test/cctest/test-log.cc
|
| @@ -139,6 +139,12 @@ namespace internal {
|
| class LoggerTestHelper : public AllStatic {
|
| public:
|
| static bool IsSamplerActive() { return Logger::IsProfilerSamplerActive(); }
|
| + static void ResetSamplesTaken() {
|
| + reinterpret_cast<Sampler*>(Logger::ticker_)->ResetSamplesTaken();
|
| + }
|
| + static bool has_samples_taken() {
|
| + return reinterpret_cast<Sampler*>(Logger::ticker_)->samples_taken() > 0;
|
| + }
|
| };
|
|
|
| } // namespace v8::internal
|
| @@ -147,24 +153,6 @@ class LoggerTestHelper : public AllStatic {
|
| using v8::internal::LoggerTestHelper;
|
|
|
|
|
| -// Under Linux, we need to check if signals were delivered to avoid false
|
| -// positives. Under other platforms profiling is done via a high-priority
|
| -// thread, so this case never happen.
|
| -static bool was_sigprof_received = true;
|
| -#ifdef __linux__
|
| -
|
| -struct sigaction old_sigprof_handler;
|
| -pthread_t our_thread;
|
| -
|
| -static void SigProfSignalHandler(int signal, siginfo_t* info, void* context) {
|
| - if (signal != SIGPROF || !pthread_equal(pthread_self(), our_thread)) return;
|
| - was_sigprof_received = true;
|
| - old_sigprof_handler.sa_sigaction(signal, info, context);
|
| -}
|
| -
|
| -#endif // __linux__
|
| -
|
| -
|
| namespace {
|
|
|
| class ScopedLoggerInitializer {
|
| @@ -258,6 +246,9 @@ class LogBufferMatcher {
|
|
|
|
|
| static void CheckThatProfilerWorks(LogBufferMatcher* matcher) {
|
| + CHECK(!LoggerTestHelper::IsSamplerActive());
|
| + LoggerTestHelper::ResetSamplesTaken();
|
| +
|
| Logger::ResumeProfiler(v8::PROFILER_MODULE_CPU, 0);
|
| CHECK(LoggerTestHelper::IsSamplerActive());
|
|
|
| @@ -266,19 +257,6 @@ static void CheckThatProfilerWorks(LogBufferMatcher* matcher) {
|
| const char* code_creation = "\ncode-creation,"; // eq. to /^code-creation,/
|
| CHECK_NE(NULL, matcher->Find(code_creation));
|
|
|
| -#ifdef __linux__
|
| - // Intercept SIGPROF handler to make sure that the test process
|
| - // had received it. Under load, system can defer it causing test failure.
|
| - // It is important to execute this after 'ResumeProfiler'.
|
| - our_thread = pthread_self();
|
| - was_sigprof_received = false;
|
| - struct sigaction sa;
|
| - sa.sa_sigaction = SigProfSignalHandler;
|
| - sigemptyset(&sa.sa_mask);
|
| - sa.sa_flags = SA_SIGINFO;
|
| - CHECK_EQ(0, sigaction(SIGPROF, &sa, &old_sigprof_handler));
|
| -#endif // __linux__
|
| -
|
| // Force compiler to generate new code by parametrizing source.
|
| EmbeddedVector<char, 100> script_src;
|
| i::OS::SNPrintF(script_src,
|
| @@ -306,7 +284,7 @@ static void CheckThatProfilerWorks(LogBufferMatcher* matcher) {
|
| CHECK_NE(NULL, matcher->Find(code_creation));
|
| const char* tick = "\ntick,";
|
| const bool ticks_found = matcher->Find(tick) != NULL;
|
| - CHECK_EQ(was_sigprof_received, ticks_found);
|
| + CHECK_EQ(LoggerTestHelper::has_samples_taken(), ticks_found);
|
| }
|
|
|
|
|
|
|