Lines Matching defs:perf

43 #include "perf/intel_perf.h"
44 #include "perf/intel_perf_regs.h"
45 #include "perf/intel_perf_mdapi.h"
46 #include "perf/intel_perf_metrics.h"
47 #include "perf/intel_perf_private.h"
71 get_sysfs_dev_dir(struct intel_perf_config *perf, int fd)
79 perf->sysfs_dev_dir[0] = '\0';
97 len = snprintf(perf->sysfs_dev_dir,
98 sizeof(perf->sysfs_dev_dir),
100 if (len < 0 || len >= sizeof(perf->sysfs_dev_dir)) {
105 drmdir = opendir(perf->sysfs_dev_dir);
107 DBG("Failed to open %s: %m\n", perf->sysfs_dev_dir);
112 if (is_dir_or_link(drm_entry, perf->sysfs_dev_dir) &&
115 len = snprintf(perf->sysfs_dev_dir,
116 sizeof(perf->sysfs_dev_dir),
120 if (len < 0 || len >= sizeof(perf->sysfs_dev_dir))
157 read_sysfs_drm_device_file_uint64(struct intel_perf_config *perf,
164 len = snprintf(buf, sizeof(buf), "%s/%s", perf->sysfs_dev_dir, file);
174 register_oa_config(struct intel_perf_config *perf,
180 intel_perf_append_query_info(perf, 0);
191 enumerate_sysfs_metrics(struct intel_perf_config *perf,
199 len = snprintf(buf, sizeof(buf), "%s/metrics", perf->sysfs_dev_dir);
218 entry = _mesa_hash_table_search(perf->oa_metrics_table,
222 if (!intel_perf_load_metric_id(perf, metric_entry->d_name, &id)) {
227 register_oa_config(perf, devinfo,
237 add_all_metrics(struct intel_perf_config *perf,
240 hash_table_foreach(perf->oa_metrics_table, entry) {
242 register_oa_config(perf, devinfo, query, 0);
247 kernel_has_dynamic_config_support(struct intel_perf_config *perf, int fd)
256 i915_query_perf_config_supported(struct intel_perf_config *perf, int fd)
265 i915_query_perf_config_data(struct intel_perf_config *perf,
302 i915_add_config(struct intel_perf_config *perf, int fd,
324 init_oa_configs(struct intel_perf_config *perf, int fd,
327 hash_table_foreach(perf->oa_metrics_table, entry) {
331 if (intel_perf_load_metric_id(perf, query->guid, &config_id)) {
333 register_oa_config(perf, devinfo, query, config_id);
337 int ret = i915_add_config(perf, fd, &query->config, query->guid);
344 register_oa_config(perf, devinfo, query, ret);
350 compute_topology_builtins(struct intel_perf_config *perf,
353 perf->sys_vars.slice_mask = devinfo->slice_masks;
354 perf->sys_vars.n_eu_slices = devinfo->num_slices;
357 perf->sys_vars.n_eu_sub_slices +=
362 perf->sys_vars.n_eus += util_bitcount(devinfo->eu_masks[i]);
364 perf->sys_vars.eu_threads_count = devinfo->num_thread_per_eu;
373 perf->sys_vars.subslice_mask = 0;
380 perf->sys_vars.subslice_mask |= 1ULL << (s * bits_per_subslice + ss);
386 init_oa_sys_vars(struct intel_perf_config *perf,
393 if (!read_sysfs_drm_device_file_uint64(perf, "gt_min_freq_mhz", &min_freq_mhz))
396 if (!read_sysfs_drm_device_file_uint64(perf, "gt_max_freq_mhz", &max_freq_mhz))
403 memset(&perf->sys_vars, 0, sizeof(perf->sys_vars));
404 perf->sys_vars.gt_min_freq = min_freq_mhz * 1000000;
405 perf->sys_vars.gt_max_freq = max_freq_mhz * 1000000;
406 perf->sys_vars.timestamp_frequency = devinfo->timestamp_frequency;
407 perf->sys_vars.revision = devinfo->revision;
408 perf->sys_vars.query_mode = use_register_snapshots;
409 compute_topology_builtins(perf, devinfo);
631 build_unique_counter_list(struct intel_perf_config *perf)
633 assert(perf->n_queries < 64);
637 for (int q = 0; q < perf->n_queries; q++)
638 max_counters += perf->queries[q].n_counters;
646 ralloc_array_size(perf, sizeof(counter_infos[0]), max_counters);
648 perf->n_counters = 0;
651 _mesa_hash_table_create(perf,
655 for (int q = 0; q < perf->n_queries ; q++) {
656 struct intel_perf_query_info *query = &perf->queries[q];
670 assert(perf->n_counters < max_counters);
672 counter_info = &counter_infos[perf->n_counters++];
686 perf->counter_infos = reralloc_array_size(perf, counter_infos,
687 sizeof(counter_infos[0]), perf->n_counters);
689 qsort(perf->counter_infos, perf->n_counters, sizeof(perf->counter_infos[0]),
694 oa_metrics_available(struct intel_perf_config *perf, int fd,
702 perf->i915_query_supported = i915_query_perf_config_supported(perf, fd);
703 perf->i915_perf_version = i915_perf_version(fd);
706 i915_get_sseu(fd, &perf->sseu);
709 * the i915 perf interface.
727 perf->platform_supported = oa_register != NULL;
732 get_sysfs_dev_dir(perf, fd) &&
733 init_oa_sys_vars(perf, devinfo, use_register_snapshots);
737 load_oa_metrics(struct intel_perf_config *perf, int fd,
740 int existing_queries = perf->n_queries;
744 perf->oa_metrics_table =
745 _mesa_hash_table_create(perf, _mesa_hash_string,
751 oa_register(perf);
754 if (kernel_has_dynamic_config_support(perf, fd))
755 init_oa_configs(perf, fd, devinfo);
757 enumerate_sysfs_metrics(perf, devinfo);
759 add_all_metrics(perf, devinfo);
763 for (int i = existing_queries; i < perf->n_queries; ++i)
764 sort_query(&perf->queries[i]);
769 for (int i = existing_queries; i < perf->n_queries; i++) {
770 if (perf->queries[i].symbol_name &&
771 strcmp(perf->queries[i].symbol_name, "TestOa") == 0) {
772 perf->fallback_raw_oa_metric = perf->queries[i].oa_metrics_set_id;
776 if (perf->fallback_raw_oa_metric == 0 && perf->n_queries > 0)
777 perf->fallback_raw_oa_metric = perf->queries[perf->n_queries - 1].oa_metrics_set_id;
862 get_passes_mask(struct intel_perf_config *perf,
868 assert(perf->n_queries < 64);
876 for (uint32_t q = 0; q < perf->n_queries; q++) {
878 assert(counter_indices[i] < perf->n_counters);
881 if (util_bitcount64(perf->counter_infos[idx].query_mask) != (q + 1))
884 if (queries_mask & perf->counter_infos[idx].query_mask)
887 queries_mask |= BITFIELD64_BIT(ffsll(perf->counter_infos[idx].query_mask) - 1);
895 intel_perf_get_n_passes(struct intel_perf_config *perf,
900 uint64_t queries_mask = get_passes_mask(perf, counter_indices, counter_indices_count);
904 for (uint32_t q = 0; q < perf->n_queries; q++) {
906 pass_queries[pass++] = &perf->queries[q];
914 intel_perf_get_counters_passes(struct intel_perf_config *perf,
919 uint64_t queries_mask = get_passes_mask(perf, counter_indices, counter_indices_count);
923 assert(counter_indices[i] < perf->n_counters);
926 counter_pass[i].counter = perf->counter_infos[idx].counter;
928 uint32_t query_idx = ffsll(perf->counter_infos[idx].query_mask & queries_mask) - 1;
929 counter_pass[i].query = &perf->queries[query_idx];
1165 struct intel_perf_query_field_layout *layout = &query->perf->query_layout;
1174 /* no_oa_accumulate=true is used when doing GL perf queries, we
1223 const struct intel_perf_query_field_layout *layout = &query->perf->query_layout;