8204236: JFR unit test of thread CPU load should be enabled
authorrwestberg
Tue, 19 Jun 2018 12:20:05 +0200
changeset 50630 4cb865aa94b5
parent 50629 645a5962201d
child 50631 7e1087eb6760
8204236: JFR unit test of thread CPU load should be enabled Reviewed-by: mgronlun, egahlin
test/hotspot/gtest/jfr/test_threadCpuLoad.cpp
--- a/test/hotspot/gtest/jfr/test_threadCpuLoad.cpp	Tue Jun 19 12:11:37 2018 +0200
+++ b/test/hotspot/gtest/jfr/test_threadCpuLoad.cpp	Tue Jun 19 12:20:05 2018 +0200
@@ -32,42 +32,15 @@
 // with the ones that should pick up the mocks removed. Those should be included
 // later after the mocks have been defined.
 
-#include "jvm.h"
-#include "classfile/classLoaderStats.hpp"
-#include "classfile/javaClasses.hpp"
-#include "code/codeCache.hpp"
-#include "compiler/compileBroker.hpp"
-#include "gc/g1/g1HeapRegionEventSender.hpp"
-#include "gc/shared/gcConfiguration.hpp"
-#include "gc/shared/gcTrace.hpp"
-#include "gc/shared/objectCountEventSender.hpp"
-#include "gc/shared/vmGCOperations.hpp"
+#include "logging/log.hpp"
 #include "jfr/jfrEvents.hpp"
-#include "jfr/periodic/jfrModuleEvent.hpp"
-#include "jfr/periodic/jfrOSInterface.hpp"
-#include "jfr/periodic/jfrThreadCPULoadEvent.hpp"
-#include "jfr/periodic/jfrThreadDumpEvent.hpp"
-#include "jfr/recorder/jfrRecorder.hpp"
 #include "jfr/support/jfrThreadId.hpp"
+#include "jfr/support/jfrThreadLocal.hpp"
 #include "jfr/utilities/jfrTime.hpp"
-#include "logging/log.hpp"
-#include "memory/heapInspection.hpp"
-#include "memory/resourceArea.hpp"
-#include "oops/oop.inline.hpp"
-#include "runtime/arguments.hpp"
-#include "runtime/flags/jvmFlag.hpp"
-#include "runtime/globals.hpp"
+#include "utilities/globalDefinitions.hpp"
 #include "runtime/os.hpp"
-#include "runtime/os_perf.hpp"
 #include "runtime/thread.inline.hpp"
-#include "runtime/threadSMR.hpp"
-#include "runtime/sweeper.hpp"
-#include "runtime/vmThread.hpp"
-#include "services/classLoadingService.hpp"
-#include "services/management.hpp"
-#include "services/threadService.hpp"
-#include "utilities/exceptions.hpp"
-#include "utilities/globalDefinitions.hpp"
+#include "runtime/threadSMR.inline.hpp"
 
 #include "unittest.hpp"
 
@@ -103,6 +76,18 @@
   jlong MockOs::user_cpu_time;
   jlong MockOs::system_cpu_time;
 
+  class MockJavaThread : public ::JavaThread {
+  public:
+    MockJavaThread() : ::JavaThread() {}
+  };
+
+  class MockJavaThreadIteratorWithHandle
+  {
+  public:
+    MockJavaThread* next() { return NULL; }
+    int length() { return 0; }
+  };
+
 // Reincluding source files in the anonymous namespace unfortunately seems to
 // behave strangely with precompiled headers (only when using gcc though)
 #ifndef DONT_USE_PRECOMPILED_HEADER
@@ -111,23 +96,27 @@
 
 #define os MockOs
 #define EventThreadCPULoad MockEventThreadCPULoad
+#define JavaThread MockJavaThread
+#define JavaThreadIteratorWithHandle MockJavaThreadIteratorWithHandle
 
-#include "jfrfiles/jfrPeriodic.hpp"
-#include "jfr/periodic/jfrPeriodic.cpp"
+#include "jfr/periodic/jfrThreadCPULoadEvent.hpp"
+#include "jfr/periodic/jfrThreadCPULoadEvent.cpp"
 
 #undef os
 #undef EventThreadCPULoad
+#undef JavaThread
+#undef JavaThreadIteratorWithHandle
 
 } // anonymous namespace
 
 class JfrTestThreadCPULoadSingle : public ::testing::Test {
 protected:
-  JavaThread* thread;
+  MockJavaThread* thread;
   JfrThreadLocal* thread_data;
   MockEventThreadCPULoad event;
 
   void SetUp() {
-    thread = new JavaThread();
+    thread = new MockJavaThread();
     thread_data = thread->jfr_thread_local();
     thread_data->set_wallclock_time(0);
     thread_data->set_user_time(0);
@@ -137,9 +126,15 @@
   void TearDown() {
     delete thread;
   }
+
+  // Fix for gcc compilation warning about unused functions
+  bool TouchUnused() {
+    return (&JfrThreadCPULoadEvent::send_events &&
+            &JfrThreadCPULoadEvent::send_event_for_thread);
+  }
 };
 
-TEST_VM_F(JfrTestThreadCPULoadSingle, DISABLED_SingleCpu) {
+TEST_VM_F(JfrTestThreadCPULoadSingle, SingleCpu) {
   MockOs::user_cpu_time = 100 * NANOSECS_PER_MILLISEC;
   MockOs::system_cpu_time = 100 * NANOSECS_PER_MILLISEC;
   EXPECT_TRUE(JfrThreadCPULoadEvent::update_event(event, thread, 400 * NANOSECS_PER_MILLISEC, 1));
@@ -147,7 +142,7 @@
   EXPECT_FLOAT_EQ(0.25, event.system);
 }
 
-TEST_VM_F(JfrTestThreadCPULoadSingle, DISABLED_MultipleCpus) {
+TEST_VM_F(JfrTestThreadCPULoadSingle, MultipleCpus) {
   MockOs::user_cpu_time = 100 * NANOSECS_PER_MILLISEC;
   MockOs::system_cpu_time = 100 * NANOSECS_PER_MILLISEC;
   EXPECT_TRUE(JfrThreadCPULoadEvent::update_event(event, thread, 400 * NANOSECS_PER_MILLISEC, 2));
@@ -155,13 +150,13 @@
   EXPECT_FLOAT_EQ(0.125, event.system);
 }
 
-TEST_VM_F(JfrTestThreadCPULoadSingle, DISABLED_BelowThreshold) {
+TEST_VM_F(JfrTestThreadCPULoadSingle, BelowThreshold) {
   MockOs::user_cpu_time = 100;
   MockOs::system_cpu_time = 100;
   EXPECT_FALSE(JfrThreadCPULoadEvent::update_event(event, thread, 400 * NANOSECS_PER_MILLISEC, 2));
 }
 
-TEST_VM_F(JfrTestThreadCPULoadSingle, DISABLED_UserAboveMaximum) {
+TEST_VM_F(JfrTestThreadCPULoadSingle, UserAboveMaximum) {
 
   // First call will not report above 100%
   MockOs::user_cpu_time = 200 * NANOSECS_PER_MILLISEC;
@@ -176,7 +171,7 @@
   EXPECT_FLOAT_EQ(0, event.system);
 }
 
-TEST_VM_F(JfrTestThreadCPULoadSingle, DISABLED_SystemAboveMaximum) {
+TEST_VM_F(JfrTestThreadCPULoadSingle, SystemAboveMaximum) {
 
   // First call will not report above 100%
   MockOs::user_cpu_time = 100 * NANOSECS_PER_MILLISEC;
@@ -191,7 +186,7 @@
   EXPECT_FLOAT_EQ(0.25, event.system);
 }
 
-TEST_VM_F(JfrTestThreadCPULoadSingle, DISABLED_SystemTimeDecreasing) {
+TEST_VM_F(JfrTestThreadCPULoadSingle, SystemTimeDecreasing) {
 
   // As seen in an actual run - caused by different resolution for total and user time
   // Total time    User time    (Calculated system time)