src/hotspot/share/jfr/periodic/jfrOSInterface.cpp
changeset 50879 d90c3cbf13df
parent 50113 caf115bb98ad
child 53367 c3fa35381763
equal deleted inserted replaced
50878:fb7800b66c92 50879:d90c3cbf13df
    22  *
    22  *
    23  */
    23  */
    24 
    24 
    25 #include "precompiled.hpp"
    25 #include "precompiled.hpp"
    26 #include "jfr/jfrEvents.hpp"
    26 #include "jfr/jfrEvents.hpp"
       
    27 #include "jfr/periodic/jfrNetworkUtilization.hpp"
    27 #include "jfr/periodic/jfrOSInterface.hpp"
    28 #include "jfr/periodic/jfrOSInterface.hpp"
    28 #include "memory/allocation.inline.hpp"
    29 #include "memory/allocation.inline.hpp"
    29 #include "memory/resourceArea.hpp"
    30 #include "memory/resourceArea.hpp"
    30 #include "runtime/os.hpp"
    31 #include "runtime/os.hpp"
    31 #include "runtime/os_perf.hpp"
    32 #include "runtime/os_perf.hpp"
    52   _instance = new JfrOSInterface();
    53   _instance = new JfrOSInterface();
    53   return _instance;
    54   return _instance;
    54 }
    55 }
    55 
    56 
    56 void JfrOSInterface::destroy() {
    57 void JfrOSInterface::destroy() {
       
    58   JfrNetworkUtilization::destroy();
    57   if (_instance != NULL) {
    59   if (_instance != NULL) {
    58     delete _instance;
    60     delete _instance;
    59     _instance = NULL;
    61     _instance = NULL;
    60   }
    62   }
    61 }
    63 }
    64   friend class JfrOSInterface;
    66   friend class JfrOSInterface;
    65  private:
    67  private:
    66   CPUInformationInterface* _cpu_info_interface;
    68   CPUInformationInterface* _cpu_info_interface;
    67   CPUPerformanceInterface* _cpu_perf_interface;
    69   CPUPerformanceInterface* _cpu_perf_interface;
    68   SystemProcessInterface*  _system_process_interface;
    70   SystemProcessInterface*  _system_process_interface;
       
    71   NetworkPerformanceInterface* _network_performance_interface;
    69 
    72 
    70   // stub helper
    73   // stub helper
    71   void functionality_not_implemented(char** str) const;
    74   void functionality_not_implemented(char** str) const;
    72 
    75 
    73   JfrOSInterfaceImpl();
    76   JfrOSInterfaceImpl();
    87   // environment information
    90   // environment information
    88   void generate_environment_variables_events();
    91   void generate_environment_variables_events();
    89 
    92 
    90    // system processes information
    93    // system processes information
    91   int system_processes(SystemProcess** system_processes, int* no_of_sys_processes);
    94   int system_processes(SystemProcess** system_processes, int* no_of_sys_processes);
       
    95 
       
    96   int network_utilization(NetworkInterface** network_interfaces) const;
    92 };
    97 };
    93 
    98 
    94 JfrOSInterface::JfrOSInterfaceImpl::JfrOSInterfaceImpl() : _cpu_info_interface(NULL),
    99 JfrOSInterface::JfrOSInterfaceImpl::JfrOSInterfaceImpl() : _cpu_info_interface(NULL),
    95                                                            _cpu_perf_interface(NULL),
   100                                                            _cpu_perf_interface(NULL),
    96                                                            _system_process_interface(NULL) {}
   101                                                            _system_process_interface(NULL) {}
    97 
   102 
    98 bool JfrOSInterface::JfrOSInterfaceImpl::initialize() {
   103 bool JfrOSInterface::JfrOSInterfaceImpl::initialize() {
    99   _cpu_info_interface = new CPUInformationInterface();
   104   _cpu_info_interface = new CPUInformationInterface();
   100   bool success = _cpu_info_interface != NULL && _cpu_info_interface->initialize();
   105   if (!(_cpu_info_interface != NULL && _cpu_info_interface->initialize())) {
   101   if (!success) {
       
   102     return false;
   106     return false;
   103   }
   107   }
   104   _cpu_perf_interface = new CPUPerformanceInterface();
   108   _cpu_perf_interface = new CPUPerformanceInterface();
   105   success = _cpu_perf_interface != NULL && _cpu_perf_interface->initialize();
   109   if (!(_cpu_perf_interface != NULL && _cpu_perf_interface->initialize())) {
   106   if (!success) {
       
   107     return false;
   110     return false;
   108   }
   111   }
   109   _system_process_interface = new SystemProcessInterface();
   112   _system_process_interface = new SystemProcessInterface();
   110   success = _system_process_interface != NULL && _system_process_interface->initialize();
   113   if (!(_system_process_interface != NULL && _system_process_interface->initialize())) {
   111   return success;
   114     return false;
       
   115   }
       
   116   _network_performance_interface = new NetworkPerformanceInterface();
       
   117   return _network_performance_interface != NULL && _network_performance_interface->initialize();
   112 }
   118 }
   113 
   119 
   114 JfrOSInterface::JfrOSInterfaceImpl::~JfrOSInterfaceImpl(void) {
   120 JfrOSInterface::JfrOSInterfaceImpl::~JfrOSInterfaceImpl(void) {
   115   if (_cpu_info_interface != NULL) {
   121   if (_cpu_info_interface != NULL) {
   116     delete _cpu_info_interface;
   122     delete _cpu_info_interface;
   122   }
   128   }
   123   if (_system_process_interface != NULL) {
   129   if (_system_process_interface != NULL) {
   124     delete _system_process_interface;
   130     delete _system_process_interface;
   125     _system_process_interface = NULL;
   131     _system_process_interface = NULL;
   126   }
   132   }
       
   133   if (_network_performance_interface != NULL) {
       
   134     delete _network_performance_interface;
       
   135     _network_performance_interface = NULL;
       
   136   }
   127 }
   137 }
   128 
   138 
   129 int JfrOSInterface::JfrOSInterfaceImpl::cpu_load(int which_logical_cpu, double* cpu_load) {
   139 int JfrOSInterface::JfrOSInterfaceImpl::cpu_load(int which_logical_cpu, double* cpu_load) {
   130   return _cpu_perf_interface->cpu_load(which_logical_cpu, cpu_load);
   140   return _cpu_perf_interface->cpu_load(which_logical_cpu, cpu_load);
   131 }
   141 }
   150 
   160 
   151 int JfrOSInterface::JfrOSInterfaceImpl::system_processes(SystemProcess** system_processes, int* no_of_sys_processes) {
   161 int JfrOSInterface::JfrOSInterfaceImpl::system_processes(SystemProcess** system_processes, int* no_of_sys_processes) {
   152   assert(system_processes != NULL, "system_processes pointer is NULL!");
   162   assert(system_processes != NULL, "system_processes pointer is NULL!");
   153   assert(no_of_sys_processes != NULL, "no_of_sys_processes pointer is NULL!");
   163   assert(no_of_sys_processes != NULL, "no_of_sys_processes pointer is NULL!");
   154   return _system_process_interface->system_processes(system_processes, no_of_sys_processes);
   164   return _system_process_interface->system_processes(system_processes, no_of_sys_processes);
       
   165 }
       
   166 
       
   167 int JfrOSInterface::JfrOSInterfaceImpl::network_utilization(NetworkInterface** network_interfaces) const {
       
   168   return _network_performance_interface->network_utilization(network_interfaces);
   155 }
   169 }
   156 
   170 
   157 // assigned char* is RESOURCE_HEAP_ALLOCATED
   171 // assigned char* is RESOURCE_HEAP_ALLOCATED
   158 // caller need to ensure proper ResourceMark placement.
   172 // caller need to ensure proper ResourceMark placement.
   159 int JfrOSInterface::JfrOSInterfaceImpl::os_version(char** os_version) const {
   173 int JfrOSInterface::JfrOSInterfaceImpl::os_version(char** os_version) const {
   244 }
   258 }
   245 
   259 
   246 int JfrOSInterface::system_processes(SystemProcess** sys_processes, int* no_of_sys_processes) {
   260 int JfrOSInterface::system_processes(SystemProcess** sys_processes, int* no_of_sys_processes) {
   247   return instance()._impl->system_processes(sys_processes, no_of_sys_processes);
   261   return instance()._impl->system_processes(sys_processes, no_of_sys_processes);
   248 }
   262 }
       
   263 
       
   264 int JfrOSInterface::network_utilization(NetworkInterface** network_interfaces) {
       
   265   return instance()._impl->network_utilization(network_interfaces);
       
   266 }