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