1.1 --- a/src/share/vm/runtime/globals.cpp Wed Jan 08 13:20:33 2014 +0100 1.2 +++ b/src/share/vm/runtime/globals.cpp Thu Jan 23 08:12:12 2014 +0100 1.3 @@ -31,6 +31,7 @@ 1.4 #include "utilities/ostream.hpp" 1.5 #include "utilities/macros.hpp" 1.6 #include "utilities/top.hpp" 1.7 +#include "trace/tracing.hpp" 1.8 #if INCLUDE_ALL_GCS 1.9 #include "gc_implementation/g1/g1_globals.hpp" 1.10 #endif // INCLUDE_ALL_GCS 1.11 @@ -593,6 +594,17 @@ 1.12 return true; 1.13 } 1.14 1.15 +template<class E, class T> 1.16 +static void trace_flag_changed(const char* name, const T old_value, const T new_value, const Flag::Flags origin) 1.17 +{ 1.18 + E e; 1.19 + e.set_name(name); 1.20 + e.set_old_value(old_value); 1.21 + e.set_new_value(new_value); 1.22 + e.set_origin(origin); 1.23 + e.commit(); 1.24 +} 1.25 + 1.26 bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) { 1.27 Flag* result = Flag::find_flag(name, len); 1.28 if (result == NULL) return false; 1.29 @@ -606,6 +618,7 @@ 1.30 if (result == NULL) return false; 1.31 if (!result->is_bool()) return false; 1.32 bool old_value = result->get_bool(); 1.33 + trace_flag_changed<EventBooleanFlagChanged, bool>(name, old_value, *value, origin); 1.34 result->set_bool(*value); 1.35 *value = old_value; 1.36 result->set_origin(origin); 1.37 @@ -615,6 +628,7 @@ 1.38 void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin) { 1.39 Flag* faddr = address_of_flag(flag); 1.40 guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type"); 1.41 + trace_flag_changed<EventBooleanFlagChanged, bool>(faddr->_name, faddr->get_bool(), value, origin); 1.42 faddr->set_bool(value); 1.43 faddr->set_origin(origin); 1.44 } 1.45 @@ -632,6 +646,7 @@ 1.46 if (result == NULL) return false; 1.47 if (!result->is_intx()) return false; 1.48 intx old_value = result->get_intx(); 1.49 + trace_flag_changed<EventLongFlagChanged, s8>(name, old_value, *value, origin); 1.50 result->set_intx(*value); 1.51 *value = old_value; 1.52 result->set_origin(origin); 1.53 @@ -641,6 +656,7 @@ 1.54 void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin) { 1.55 Flag* faddr = address_of_flag(flag); 1.56 guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type"); 1.57 + trace_flag_changed<EventLongFlagChanged, s8>(faddr->_name, faddr->get_intx(), value, origin); 1.58 faddr->set_intx(value); 1.59 faddr->set_origin(origin); 1.60 } 1.61 @@ -658,6 +674,7 @@ 1.62 if (result == NULL) return false; 1.63 if (!result->is_uintx()) return false; 1.64 uintx old_value = result->get_uintx(); 1.65 + trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin); 1.66 result->set_uintx(*value); 1.67 *value = old_value; 1.68 result->set_origin(origin); 1.69 @@ -667,6 +684,7 @@ 1.70 void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin) { 1.71 Flag* faddr = address_of_flag(flag); 1.72 guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type"); 1.73 + trace_flag_changed<EventUnsignedLongFlagChanged, u8>(faddr->_name, faddr->get_uintx(), value, origin); 1.74 faddr->set_uintx(value); 1.75 faddr->set_origin(origin); 1.76 } 1.77 @@ -684,6 +702,7 @@ 1.78 if (result == NULL) return false; 1.79 if (!result->is_uint64_t()) return false; 1.80 uint64_t old_value = result->get_uint64_t(); 1.81 + trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin); 1.82 result->set_uint64_t(*value); 1.83 *value = old_value; 1.84 result->set_origin(origin); 1.85 @@ -693,6 +712,7 @@ 1.86 void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin) { 1.87 Flag* faddr = address_of_flag(flag); 1.88 guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type"); 1.89 + trace_flag_changed<EventUnsignedLongFlagChanged, u8>(faddr->_name, faddr->get_uint64_t(), value, origin); 1.90 faddr->set_uint64_t(value); 1.91 faddr->set_origin(origin); 1.92 } 1.93 @@ -710,6 +730,7 @@ 1.94 if (result == NULL) return false; 1.95 if (!result->is_double()) return false; 1.96 double old_value = result->get_double(); 1.97 + trace_flag_changed<EventDoubleFlagChanged, double>(name, old_value, *value, origin); 1.98 result->set_double(*value); 1.99 *value = old_value; 1.100 result->set_origin(origin); 1.101 @@ -719,6 +740,7 @@ 1.102 void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin) { 1.103 Flag* faddr = address_of_flag(flag); 1.104 guarantee(faddr != NULL && faddr->is_double(), "wrong flag type"); 1.105 + trace_flag_changed<EventDoubleFlagChanged, double>(faddr->_name, faddr->get_double(), value, origin); 1.106 faddr->set_double(value); 1.107 faddr->set_origin(origin); 1.108 } 1.109 @@ -738,6 +760,7 @@ 1.110 if (result == NULL) return false; 1.111 if (!result->is_ccstr()) return false; 1.112 ccstr old_value = result->get_ccstr(); 1.113 + trace_flag_changed<EventStringFlagChanged, const char*>(name, old_value, *value, origin); 1.114 char* new_value = NULL; 1.115 if (*value != NULL) { 1.116 new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal); 1.117 @@ -760,6 +783,7 @@ 1.118 Flag* faddr = address_of_flag(flag); 1.119 guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type"); 1.120 ccstr old_value = faddr->get_ccstr(); 1.121 + trace_flag_changed<EventStringFlagChanged, const char*>(faddr->_name, old_value, value, origin); 1.122 char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal); 1.123 strcpy(new_value, value); 1.124 faddr->set_ccstr(new_value);