Mercurial > hg > truffle
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. |