Mesa (staging/19.3): intel/perf: report query split for mdapi

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 21 20:16:12 UTC 2020


Module: Mesa
Branch: staging/19.3
Commit: c82b88c521e68491a6d57e1a814573773ce424f7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c82b88c521e68491a6d57e1a814573773ce424f7

Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date:   Mon Dec 16 15:42:55 2019 +0200

intel/perf: report query split for mdapi

Also forgotten in the initial implementation.

v2: Report begin timestamp scaled by the timestamp frequency (Windows
    behavior)

v3: Rename split to disjoint to match GL terminology (Tapani)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Cc: <mesa-stable at lists.freedesktop.org>
Acked-by: Tapani Pälli <tapani.palli at intel.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3112>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3112>
(cherry picked from commit 44ffeb4fee8a38f9e526749eee163cbff89dea25)

---

 .pick_status.json               | 2 +-
 src/intel/perf/gen_perf.c       | 6 ++++++
 src/intel/perf/gen_perf.h       | 5 +++++
 src/intel/perf/gen_perf_mdapi.c | 9 +++++++--
 4 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index fe9f559232a..ef0e6888fde 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -1219,7 +1219,7 @@
         "description": "intel/perf: report query split for mdapi",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
diff --git a/src/intel/perf/gen_perf.c b/src/intel/perf/gen_perf.c
index a7436530f9b..cc8c4d5a368 100644
--- a/src/intel/perf/gen_perf.c
+++ b/src/intel/perf/gen_perf.c
@@ -2361,6 +2361,12 @@ accumulate_oa_reports(struct gen_perf_context *perf_ctx,
                gen_perf_query_result_accumulate(&query->oa.result,
                                                 query->queryinfo,
                                                 last, report);
+            } else {
+               /* We're not adding the delta because we've identified it's not
+                * for the context we filter for. We can consider that the
+                * query was split.
+                */
+               query->oa.result.query_disjoint = true;
             }
 
             last = report;
diff --git a/src/intel/perf/gen_perf.h b/src/intel/perf/gen_perf.h
index 25f234b5bde..bd775536595 100644
--- a/src/intel/perf/gen_perf.h
+++ b/src/intel/perf/gen_perf.h
@@ -118,6 +118,11 @@ struct gen_perf_query_result {
     * Timestamp of the query.
     */
    uint64_t begin_timestamp;
+
+   /**
+    * Whether the query was interrupted by another workload (aka preemption).
+    */
+   bool query_disjoint;
 };
 
 struct gen_perf_query_counter {
diff --git a/src/intel/perf/gen_perf_mdapi.c b/src/intel/perf/gen_perf_mdapi.c
index 0f35671930f..4c70d1f0207 100644
--- a/src/intel/perf/gen_perf_mdapi.c
+++ b/src/intel/perf/gen_perf_mdapi.c
@@ -54,6 +54,7 @@ gen_perf_query_result_write_mdapi(void *data, uint32_t data_size,
          gen_device_info_timebase_scale(devinfo, result->accumulator[0]);
       mdapi_data->CoreFrequency = freq_end;
       mdapi_data->CoreFrequencyChanged = freq_end != freq_start;
+      mdapi_data->SplitOccured = result->query_disjoint;
       return sizeof(*mdapi_data);
    }
    case 8: {
@@ -73,7 +74,8 @@ gen_perf_query_result_write_mdapi(void *data, uint32_t data_size,
       mdapi_data->ReportsCount = result->reports_accumulated;
       mdapi_data->TotalTime =
          gen_device_info_timebase_scale(devinfo, result->accumulator[0]);
-      mdapi_data->BeginTimestamp = result->begin_timestamp;
+      mdapi_data->BeginTimestamp =
+         gen_device_info_timebase_scale(devinfo, result->begin_timestamp);
       mdapi_data->GPUTicks = result->accumulator[1];
       mdapi_data->CoreFrequency = freq_end;
       mdapi_data->CoreFrequencyChanged = freq_end != freq_start;
@@ -81,6 +83,7 @@ gen_perf_query_result_write_mdapi(void *data, uint32_t data_size,
          (result->slice_frequency[0] + result->slice_frequency[1]) / 2ULL;
       mdapi_data->UnsliceFrequency =
          (result->unslice_frequency[0] + result->unslice_frequency[1]) / 2ULL;
+      mdapi_data->SplitOccured = result->query_disjoint;
       return sizeof(*mdapi_data);
    }
    case 9:
@@ -102,7 +105,8 @@ gen_perf_query_result_write_mdapi(void *data, uint32_t data_size,
       mdapi_data->ReportsCount = result->reports_accumulated;
       mdapi_data->TotalTime =
          gen_device_info_timebase_scale(devinfo, result->accumulator[0]);
-      mdapi_data->BeginTimestamp = result->begin_timestamp;
+      mdapi_data->BeginTimestamp =
+         gen_device_info_timebase_scale(devinfo, result->begin_timestamp);
       mdapi_data->GPUTicks = result->accumulator[1];
       mdapi_data->CoreFrequency = freq_end;
       mdapi_data->CoreFrequencyChanged = freq_end != freq_start;
@@ -110,6 +114,7 @@ gen_perf_query_result_write_mdapi(void *data, uint32_t data_size,
          (result->slice_frequency[0] + result->slice_frequency[1]) / 2ULL;
       mdapi_data->UnsliceFrequency =
          (result->unslice_frequency[0] + result->unslice_frequency[1]) / 2ULL;
+      mdapi_data->SplitOccured = result->query_disjoint;
       return sizeof(*mdapi_data);
    }
    default:



More information about the mesa-commit mailing list