|
@@ -2799,3 +2799,55 @@ void annotation_config__init(void)
|
|
|
annotation__default_options.show_total_period = symbol_conf.show_total_period;
|
|
|
annotation__default_options.show_nr_samples = symbol_conf.show_nr_samples;
|
|
|
}
|
|
|
+
|
|
|
+static unsigned int parse_percent_type(char *str1, char *str2)
|
|
|
+{
|
|
|
+ unsigned int type = (unsigned int) -1;
|
|
|
+
|
|
|
+ if (!strcmp("period", str1)) {
|
|
|
+ if (!strcmp("local", str2))
|
|
|
+ type = PERCENT_PERIOD_LOCAL;
|
|
|
+ else if (!strcmp("global", str2))
|
|
|
+ type = PERCENT_PERIOD_GLOBAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!strcmp("hits", str1)) {
|
|
|
+ if (!strcmp("local", str2))
|
|
|
+ type = PERCENT_HITS_LOCAL;
|
|
|
+ else if (!strcmp("global", str2))
|
|
|
+ type = PERCENT_HITS_GLOBAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ return type;
|
|
|
+}
|
|
|
+
|
|
|
+int annotate_parse_percent_type(const struct option *opt, const char *_str,
|
|
|
+ int unset __maybe_unused)
|
|
|
+{
|
|
|
+ struct annotation_options *opts = opt->value;
|
|
|
+ unsigned int type;
|
|
|
+ char *str1, *str2;
|
|
|
+ int err = -1;
|
|
|
+
|
|
|
+ str1 = strdup(_str);
|
|
|
+ if (!str1)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ str2 = strchr(str1, '-');
|
|
|
+ if (!str2)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ *str2++ = 0;
|
|
|
+
|
|
|
+ type = parse_percent_type(str1, str2);
|
|
|
+ if (type == (unsigned int) -1)
|
|
|
+ type = parse_percent_type(str2, str1);
|
|
|
+ if (type != (unsigned int) -1) {
|
|
|
+ opts->percent_type = type;
|
|
|
+ err = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+out:
|
|
|
+ free(str1);
|
|
|
+ return err;
|
|
|
+}
|