677 *delimiter = '='; |
677 *delimiter = '='; |
678 } |
678 } |
679 return false; |
679 return false; |
680 } |
680 } |
681 |
681 |
682 static GrowableArray<const char*>* startup_recording_options_array = NULL; |
682 static GrowableArray<const char*>* start_flight_recording_options_array = NULL; |
683 |
683 |
684 bool JfrOptionSet::parse_start_flight_recording_option(const JavaVMOption** option, char* delimiter) { |
684 bool JfrOptionSet::parse_start_flight_recording_option(const JavaVMOption** option, char* delimiter) { |
685 assert(option != NULL, "invariant"); |
685 assert(option != NULL, "invariant"); |
686 assert(delimiter != NULL, "invariant"); |
686 assert(delimiter != NULL, "invariant"); |
687 assert((*option)->optionString != NULL, "invariant"); |
687 assert((*option)->optionString != NULL, "invariant"); |
700 value = delimiter + 1; |
700 value = delimiter + 1; |
701 } |
701 } |
702 assert(value != NULL, "invariant"); |
702 assert(value != NULL, "invariant"); |
703 const size_t value_length = strlen(value); |
703 const size_t value_length = strlen(value); |
704 |
704 |
705 if (startup_recording_options_array == NULL) { |
705 if (start_flight_recording_options_array == NULL) { |
706 startup_recording_options_array = new (ResourceObj::C_HEAP, mtTracing) GrowableArray<const char*>(8, true, mtTracing); |
706 start_flight_recording_options_array = new (ResourceObj::C_HEAP, mtTracing) GrowableArray<const char*>(8, true, mtTracing); |
707 } |
707 } |
708 assert(startup_recording_options_array != NULL, "invariant"); |
708 assert(start_flight_recording_options_array != NULL, "invariant"); |
709 char* const startup_value = NEW_C_HEAP_ARRAY(char, value_length + 1, mtTracing); |
709 char* const startup_value = NEW_C_HEAP_ARRAY(char, value_length + 1, mtTracing); |
710 strncpy(startup_value, value, value_length + 1); |
710 strncpy(startup_value, value, value_length + 1); |
711 assert(strncmp(startup_value, value, value_length) == 0, "invariant"); |
711 assert(strncmp(startup_value, value, value_length) == 0, "invariant"); |
712 startup_recording_options_array->append(startup_value); |
712 start_flight_recording_options_array->append(startup_value); |
713 return false; |
713 return false; |
714 } |
714 } |
715 |
715 |
716 const GrowableArray<const char*>* JfrOptionSet::startup_recording_options() { |
716 const GrowableArray<const char*>* JfrOptionSet::start_flight_recording_options() { |
717 return startup_recording_options_array; |
717 return start_flight_recording_options_array; |
718 } |
718 } |
719 |
719 |
720 void JfrOptionSet::release_startup_recording_options() { |
720 void JfrOptionSet::release_start_flight_recording_options() { |
721 if (startup_recording_options_array != NULL) { |
721 if (start_flight_recording_options_array != NULL) { |
722 const int length = startup_recording_options_array->length(); |
722 const int length = start_flight_recording_options_array->length(); |
723 for (int i = 0; i < length; ++i) { |
723 for (int i = 0; i < length; ++i) { |
724 FREE_C_HEAP_ARRAY(char, startup_recording_options_array->at(i), mtTracing); |
724 FREE_C_HEAP_ARRAY(char, start_flight_recording_options_array->at(i), mtTracing); |
725 } |
725 } |
726 delete startup_recording_options_array; |
726 delete start_flight_recording_options_array; |
727 startup_recording_options_array = NULL; |
727 start_flight_recording_options_array = NULL; |
728 } |
728 } |
729 } |
729 } |