comparison src/share/vm/runtime/globals.cpp @ 17691:d6c97434b745

8032250: Add trace event for VM flag changes Reviewed-by: coleenp, ehelin, egahlin, mgronlun
author sla
date Thu, 23 Jan 2014 08:12:12 +0100
parents cd7a42c7be06
children b257acb35d3e
comparison
equal deleted inserted replaced
17686:d69952503db0 17691:d6c97434b745
29 #include "runtime/globals.hpp" 29 #include "runtime/globals.hpp"
30 #include "runtime/globals_extension.hpp" 30 #include "runtime/globals_extension.hpp"
31 #include "utilities/ostream.hpp" 31 #include "utilities/ostream.hpp"
32 #include "utilities/macros.hpp" 32 #include "utilities/macros.hpp"
33 #include "utilities/top.hpp" 33 #include "utilities/top.hpp"
34 #include "trace/tracing.hpp"
34 #if INCLUDE_ALL_GCS 35 #if INCLUDE_ALL_GCS
35 #include "gc_implementation/g1/g1_globals.hpp" 36 #include "gc_implementation/g1/g1_globals.hpp"
36 #endif // INCLUDE_ALL_GCS 37 #endif // INCLUDE_ALL_GCS
37 #ifdef COMPILER1 38 #ifdef COMPILER1
38 #include "c1/c1_globals.hpp" 39 #include "c1/c1_globals.hpp"
591 if (result == NULL) return false; 592 if (result == NULL) return false;
592 *value = result->is_command_line(); 593 *value = result->is_command_line();
593 return true; 594 return true;
594 } 595 }
595 596
597 template<class E, class T>
598 static void trace_flag_changed(const char* name, const T old_value, const T new_value, const Flag::Flags origin)
599 {
600 E e;
601 e.set_name(name);
602 e.set_old_value(old_value);
603 e.set_new_value(new_value);
604 e.set_origin(origin);
605 e.commit();
606 }
607
596 bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) { 608 bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) {
597 Flag* result = Flag::find_flag(name, len); 609 Flag* result = Flag::find_flag(name, len);
598 if (result == NULL) return false; 610 if (result == NULL) return false;
599 if (!result->is_bool()) return false; 611 if (!result->is_bool()) return false;
600 *value = result->get_bool(); 612 *value = result->get_bool();
604 bool CommandLineFlags::boolAtPut(char* name, size_t len, bool* value, Flag::Flags origin) { 616 bool CommandLineFlags::boolAtPut(char* name, size_t len, bool* value, Flag::Flags origin) {
605 Flag* result = Flag::find_flag(name, len); 617 Flag* result = Flag::find_flag(name, len);
606 if (result == NULL) return false; 618 if (result == NULL) return false;
607 if (!result->is_bool()) return false; 619 if (!result->is_bool()) return false;
608 bool old_value = result->get_bool(); 620 bool old_value = result->get_bool();
621 trace_flag_changed<EventBooleanFlagChanged, bool>(name, old_value, *value, origin);
609 result->set_bool(*value); 622 result->set_bool(*value);
610 *value = old_value; 623 *value = old_value;
611 result->set_origin(origin); 624 result->set_origin(origin);
612 return true; 625 return true;
613 } 626 }
614 627
615 void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin) { 628 void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin) {
616 Flag* faddr = address_of_flag(flag); 629 Flag* faddr = address_of_flag(flag);
617 guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type"); 630 guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type");
631 trace_flag_changed<EventBooleanFlagChanged, bool>(faddr->_name, faddr->get_bool(), value, origin);
618 faddr->set_bool(value); 632 faddr->set_bool(value);
619 faddr->set_origin(origin); 633 faddr->set_origin(origin);
620 } 634 }
621 635
622 bool CommandLineFlags::intxAt(char* name, size_t len, intx* value) { 636 bool CommandLineFlags::intxAt(char* name, size_t len, intx* value) {
630 bool CommandLineFlags::intxAtPut(char* name, size_t len, intx* value, Flag::Flags origin) { 644 bool CommandLineFlags::intxAtPut(char* name, size_t len, intx* value, Flag::Flags origin) {
631 Flag* result = Flag::find_flag(name, len); 645 Flag* result = Flag::find_flag(name, len);
632 if (result == NULL) return false; 646 if (result == NULL) return false;
633 if (!result->is_intx()) return false; 647 if (!result->is_intx()) return false;
634 intx old_value = result->get_intx(); 648 intx old_value = result->get_intx();
649 trace_flag_changed<EventLongFlagChanged, s8>(name, old_value, *value, origin);
635 result->set_intx(*value); 650 result->set_intx(*value);
636 *value = old_value; 651 *value = old_value;
637 result->set_origin(origin); 652 result->set_origin(origin);
638 return true; 653 return true;
639 } 654 }
640 655
641 void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin) { 656 void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin) {
642 Flag* faddr = address_of_flag(flag); 657 Flag* faddr = address_of_flag(flag);
643 guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type"); 658 guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type");
659 trace_flag_changed<EventLongFlagChanged, s8>(faddr->_name, faddr->get_intx(), value, origin);
644 faddr->set_intx(value); 660 faddr->set_intx(value);
645 faddr->set_origin(origin); 661 faddr->set_origin(origin);
646 } 662 }
647 663
648 bool CommandLineFlags::uintxAt(char* name, size_t len, uintx* value) { 664 bool CommandLineFlags::uintxAt(char* name, size_t len, uintx* value) {
656 bool CommandLineFlags::uintxAtPut(char* name, size_t len, uintx* value, Flag::Flags origin) { 672 bool CommandLineFlags::uintxAtPut(char* name, size_t len, uintx* value, Flag::Flags origin) {
657 Flag* result = Flag::find_flag(name, len); 673 Flag* result = Flag::find_flag(name, len);
658 if (result == NULL) return false; 674 if (result == NULL) return false;
659 if (!result->is_uintx()) return false; 675 if (!result->is_uintx()) return false;
660 uintx old_value = result->get_uintx(); 676 uintx old_value = result->get_uintx();
677 trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin);
661 result->set_uintx(*value); 678 result->set_uintx(*value);
662 *value = old_value; 679 *value = old_value;
663 result->set_origin(origin); 680 result->set_origin(origin);
664 return true; 681 return true;
665 } 682 }
666 683
667 void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin) { 684 void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin) {
668 Flag* faddr = address_of_flag(flag); 685 Flag* faddr = address_of_flag(flag);
669 guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type"); 686 guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type");
687 trace_flag_changed<EventUnsignedLongFlagChanged, u8>(faddr->_name, faddr->get_uintx(), value, origin);
670 faddr->set_uintx(value); 688 faddr->set_uintx(value);
671 faddr->set_origin(origin); 689 faddr->set_origin(origin);
672 } 690 }
673 691
674 bool CommandLineFlags::uint64_tAt(char* name, size_t len, uint64_t* value) { 692 bool CommandLineFlags::uint64_tAt(char* name, size_t len, uint64_t* value) {
682 bool CommandLineFlags::uint64_tAtPut(char* name, size_t len, uint64_t* value, Flag::Flags origin) { 700 bool CommandLineFlags::uint64_tAtPut(char* name, size_t len, uint64_t* value, Flag::Flags origin) {
683 Flag* result = Flag::find_flag(name, len); 701 Flag* result = Flag::find_flag(name, len);
684 if (result == NULL) return false; 702 if (result == NULL) return false;
685 if (!result->is_uint64_t()) return false; 703 if (!result->is_uint64_t()) return false;
686 uint64_t old_value = result->get_uint64_t(); 704 uint64_t old_value = result->get_uint64_t();
705 trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin);
687 result->set_uint64_t(*value); 706 result->set_uint64_t(*value);
688 *value = old_value; 707 *value = old_value;
689 result->set_origin(origin); 708 result->set_origin(origin);
690 return true; 709 return true;
691 } 710 }
692 711
693 void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin) { 712 void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin) {
694 Flag* faddr = address_of_flag(flag); 713 Flag* faddr = address_of_flag(flag);
695 guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type"); 714 guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type");
715 trace_flag_changed<EventUnsignedLongFlagChanged, u8>(faddr->_name, faddr->get_uint64_t(), value, origin);
696 faddr->set_uint64_t(value); 716 faddr->set_uint64_t(value);
697 faddr->set_origin(origin); 717 faddr->set_origin(origin);
698 } 718 }
699 719
700 bool CommandLineFlags::doubleAt(char* name, size_t len, double* value) { 720 bool CommandLineFlags::doubleAt(char* name, size_t len, double* value) {
708 bool CommandLineFlags::doubleAtPut(char* name, size_t len, double* value, Flag::Flags origin) { 728 bool CommandLineFlags::doubleAtPut(char* name, size_t len, double* value, Flag::Flags origin) {
709 Flag* result = Flag::find_flag(name, len); 729 Flag* result = Flag::find_flag(name, len);
710 if (result == NULL) return false; 730 if (result == NULL) return false;
711 if (!result->is_double()) return false; 731 if (!result->is_double()) return false;
712 double old_value = result->get_double(); 732 double old_value = result->get_double();
733 trace_flag_changed<EventDoubleFlagChanged, double>(name, old_value, *value, origin);
713 result->set_double(*value); 734 result->set_double(*value);
714 *value = old_value; 735 *value = old_value;
715 result->set_origin(origin); 736 result->set_origin(origin);
716 return true; 737 return true;
717 } 738 }
718 739
719 void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin) { 740 void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin) {
720 Flag* faddr = address_of_flag(flag); 741 Flag* faddr = address_of_flag(flag);
721 guarantee(faddr != NULL && faddr->is_double(), "wrong flag type"); 742 guarantee(faddr != NULL && faddr->is_double(), "wrong flag type");
743 trace_flag_changed<EventDoubleFlagChanged, double>(faddr->_name, faddr->get_double(), value, origin);
722 faddr->set_double(value); 744 faddr->set_double(value);
723 faddr->set_origin(origin); 745 faddr->set_origin(origin);
724 } 746 }
725 747
726 bool CommandLineFlags::ccstrAt(char* name, size_t len, ccstr* value) { 748 bool CommandLineFlags::ccstrAt(char* name, size_t len, ccstr* value) {
736 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin) { 758 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin) {
737 Flag* result = Flag::find_flag(name, len); 759 Flag* result = Flag::find_flag(name, len);
738 if (result == NULL) return false; 760 if (result == NULL) return false;
739 if (!result->is_ccstr()) return false; 761 if (!result->is_ccstr()) return false;
740 ccstr old_value = result->get_ccstr(); 762 ccstr old_value = result->get_ccstr();
763 trace_flag_changed<EventStringFlagChanged, const char*>(name, old_value, *value, origin);
741 char* new_value = NULL; 764 char* new_value = NULL;
742 if (*value != NULL) { 765 if (*value != NULL) {
743 new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal); 766 new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal);
744 strcpy(new_value, *value); 767 strcpy(new_value, *value);
745 } 768 }
758 // Contract: Flag will make private copy of the incoming value. 781 // Contract: Flag will make private copy of the incoming value.
759 void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin) { 782 void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin) {
760 Flag* faddr = address_of_flag(flag); 783 Flag* faddr = address_of_flag(flag);
761 guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type"); 784 guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type");
762 ccstr old_value = faddr->get_ccstr(); 785 ccstr old_value = faddr->get_ccstr();
786 trace_flag_changed<EventStringFlagChanged, const char*>(faddr->_name, old_value, value, origin);
763 char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal); 787 char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal);
764 strcpy(new_value, value); 788 strcpy(new_value, value);
765 faddr->set_ccstr(new_value); 789 faddr->set_ccstr(new_value);
766 if (!faddr->is_default() && old_value != NULL) { 790 if (!faddr->is_default() && old_value != NULL) {
767 // Prior value is heap allocated so free it. 791 // Prior value is heap allocated so free it.