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); |
} |