8032250: Add trace event for VM flag changes

Thu, 23 Jan 2014 08:12:12 +0100

author
sla
date
Thu, 23 Jan 2014 08:12:12 +0100
changeset 6333
d6c97434b745
parent 6328
d69952503db0
child 6334
caff540c5f75

8032250: Add trace event for VM flag changes
Reviewed-by: coleenp, ehelin, egahlin, mgronlun

src/share/vm/runtime/globals.cpp file | annotate | diff | comparison | revisions
src/share/vm/trace/trace.xml file | annotate | diff | comparison | revisions
src/share/vm/trace/tracetypes.xml file | annotate | diff | comparison | revisions
     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);
     2.1 --- a/src/share/vm/trace/trace.xml	Wed Jan 08 13:20:33 2014 +0100
     2.2 +++ b/src/share/vm/trace/trace.xml	Thu Jan 23 08:12:12 2014 +0100
     2.3 @@ -122,6 +122,46 @@
     2.4        <value type="CLASS" field="definingClassLoader" label="Defining Class Loader"/>
     2.5      </event>
     2.6  
     2.7 +    <event id="LongFlagChanged" path="vm/flag/long_changed" label="Long Flag Changed"
     2.8 +          is_instant="true">
     2.9 +      <value type="UTF8" field="name" label="Name" />
    2.10 +      <value type="LONG" field="old_value" label="Old Value" />
    2.11 +      <value type="LONG" field="new_value" label="New Value" />
    2.12 +      <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
    2.13 +    </event>
    2.14 +
    2.15 +    <event id="UnsignedLongFlagChanged" path="vm/flag/ulong_changed" label="Unsigned Long Flag Changed"
    2.16 +          is_instant="true">
    2.17 +      <value type="UTF8" field="name" label="Name" />
    2.18 +      <value type="ULONG" field="old_value" label="Old Value" />
    2.19 +      <value type="ULONG" field="new_value" label="New Value" />
    2.20 +      <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
    2.21 +    </event>
    2.22 +
    2.23 +    <event id="DoubleFlagChanged" path="vm/flag/double_changed" label="Double Flag Changed"
    2.24 +         is_instant="true">
    2.25 +      <value type="UTF8" field="name" label="Name" />
    2.26 +      <value type="DOUBLE" field="old_value" label="Old Value" />
    2.27 +      <value type="DOUBLE" field="new_value" label="New Value" />
    2.28 +      <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
    2.29 +    </event>
    2.30 +
    2.31 +    <event id="BooleanFlagChanged" path="vm/flag/boolean_changed" label="Boolean Flag Changed"
    2.32 +         is_instant="true">
    2.33 +      <value type="UTF8" field="name" label="Name" />
    2.34 +      <value type="BOOLEAN" field="old_value" label="Old Value" />
    2.35 +      <value type="BOOLEAN" field="new_value" label="New Value" />
    2.36 +      <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
    2.37 +    </event>
    2.38 +
    2.39 +    <event id="StringFlagChanged" path="vm/flag/string_changed" label="String Flag Changed"
    2.40 +         is_instant="true">
    2.41 +      <value type="UTF8" field="name" label="Name" />
    2.42 +      <value type="UTF8" field="old_value" label="Old Value" />
    2.43 +      <value type="UTF8" field="new_value" label="New Value" />
    2.44 +      <value type="FLAGVALUEORIGIN" field="origin" label="Origin" />
    2.45 +    </event>
    2.46 +
    2.47      <struct id="VirtualSpace">
    2.48        <value type="ADDRESS" field="start" label="Start Address" description="Start address of the virtual space" />
    2.49        <value type="ADDRESS" field="committedEnd" label="Committed End Address" description="End address of the committed memory for the virtual space" />
     3.1 --- a/src/share/vm/trace/tracetypes.xml	Wed Jan 08 13:20:33 2014 +0100
     3.2 +++ b/src/share/vm/trace/tracetypes.xml	Thu Jan 23 08:12:12 2014 +0100
     3.3 @@ -150,6 +150,11 @@
     3.4        <value type="UTF8" field="phase" label="phase" />
     3.5      </content_type>
     3.6  
     3.7 +    <content_type id="FlagValueOrigin" hr_name="Flag Value Origin"
     3.8 +                  type="U1" jvm_type="FLAGVALUEORIGIN">
     3.9 +      <value type="UTF8" field="origin" label="origin" />
    3.10 +    </content_type>
    3.11 +
    3.12    </content_types>
    3.13  
    3.14  
    3.15 @@ -334,6 +339,10 @@
    3.16      <!-- VMOPERATIONTYPE -->
    3.17      <primary_type symbol="VMOPERATIONTYPE" datatype="U2" contenttype="VMOPERATIONTYPE"
    3.18                    type="u2" sizeop="sizeof(u2)" />
    3.19 +                  
    3.20 +    <!-- FLAGVALUEORIGIN -->
    3.21 +    <primary_type symbol="FLAGVALUEORIGIN" datatype="U1"
    3.22 +                  contenttype="FLAGVALUEORIGIN" type="u1" sizeop="sizeof(u1)" />
    3.23  
    3.24    </primary_types>
    3.25  </types>

mercurial