Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [i-g-t RFC] tests/i915_pm_rpm: Add suspend-resume-latency test
@ 2021-03-24  6:58 Jigar Bhatt
  2021-03-24  7:43 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Jigar Bhatt @ 2021-03-24  6:58 UTC (permalink / raw)
  To: igt-dev

Measuring the suspend-resume time using
tracefs, writing Suspend Started, Suspend Completed,
Resume Ended timestamp into tracefs file.
After writing it's reading from tracefs file and
measuring different, suspend and resume ,
individual must be less than 1 sec.

Signed-off-by: Jigar Bhatt <jigar.bhatt@intel.com>
---
 tests/i915/i915_pm_rpm.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)

diff --git a/tests/i915/i915_pm_rpm.c b/tests/i915/i915_pm_rpm.c
index 694a3ea..67d823c 100644
--- a/tests/i915/i915_pm_rpm.c
+++ b/tests/i915/i915_pm_rpm.c
@@ -1998,6 +1998,83 @@ static int opt_handler(int opt, int opt_index, void *data)
 	return IGT_OPT_HANDLER_SUCCESS;
 }
 
+static void dpms_off(struct mode_set_data *data)
+{
+        for (int i = 0; i < data->res->count_connectors; i++) {
+                drmModeConnectorPtr c = data->connectors[i];
+                kmstest_set_connector_dpms(drm_fd, c, DRM_MODE_DPMS_OFF);
+        }
+}
+static void dpms_on(struct mode_set_data *data)
+{
+        igt_display_t display;
+
+        igt_display_require(&display, drm_fd);
+        for (int i = 0; i < data->res->count_connectors; i++) {
+                drmModeConnectorPtr c = data->connectors[i];
+                kmstest_set_connector_dpms(drm_fd, c, DRM_MODE_DPMS_ON);
+        }
+
+}
+
+static uint32_t get_trace_timestamp(char *dc_data)
+{
+        char *e;
+        long ret;
+        char *s = strchr(dc_data, ':');
+
+        assert(s);
+        s++;
+        ret = strtol(s, &e, 10);
+        assert(((ret != LONG_MIN && ret != LONG_MAX) || errno != ERANGE) &&
+               e > s && *e == '\n' && ret >= 0);
+        return ret;
+}
+
+static long int get_timestamp(void)
+{
+        struct timespec start;
+
+        clock_gettime(CLOCK_MONOTONIC_RAW, &start);
+        return ( start.tv_sec * 1000000 + (start.tv_nsec / 1000));
+}
+
+static void read_trace(void)
+{
+        int fd;
+        char buf[4096];
+
+        fd=open("/sys/kernel/debug/tracing/trace",O_RDONLY);
+        igt_assert(fd>0);
+        igt_assert(read(fd, buf, sizeof(buf)));
+        igt_assert(((float)(get_trace_timestamp(strstr(buf,"Suspend_Completed")) -
+			get_trace_timestamp(strstr(buf,"Suspend_Started")))/1000000)<2);
+        igt_assert(((float)(get_trace_timestamp(strstr(buf,"Resume_Ended")) -
+			get_trace_timestamp(strstr(buf,"Suspend_Completed")))/1000000)<1);
+        close(fd);
+}
+
+static void test_suspend_resume_latency(struct mode_set_data *data)
+{
+        int fd;
+        char msg[400];
+
+        fd=open("/sys/kernel/debug/tracing/trace_marker",O_WRONLY);
+        igt_assert(fd>0);
+        snprintf(msg,100,"Suspend_Started : %ld",get_timestamp());
+        write(fd,msg,strlen(msg));
+        dpms_off(data);
+        igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_SUSPENDED));
+        snprintf(msg,100,"Suspend_Completed : %ld",get_timestamp());
+        write(fd,msg,strlen(msg));
+        dpms_on(data);
+        igt_assert(igt_wait_for_pm_status(IGT_RUNTIME_PM_STATUS_ACTIVE));
+        snprintf(msg,100,"Resume_Ended : %ld",get_timestamp());
+        write(fd,msg,strlen(msg));
+        close(fd);
+        read_trace();
+}
+
 const char *help_str =
 	"  --stress\t\tMake the stress-tests more stressful.\n"
 	"  --stay\t\tDisable all screen and try to go into runtime pm. Useful for debugging.";
@@ -2147,6 +2224,10 @@ igt_main_args("", long_options, help_str, opt_handler, NULL)
 		pm_test_caching();
 	}
 
+	igt_subtest("suspend-resume-latency") {
+                test_suspend_resume_latency(&ms_data);
+        }
+
 	igt_fixture
 		teardown_environment(false);
 
-- 
2.8.1

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-04-05 12:34 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-03-24  6:58 [igt-dev] [i-g-t RFC] tests/i915_pm_rpm: Add suspend-resume-latency test Jigar Bhatt
2021-03-24  7:43 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
2021-03-25  5:37 ` [igt-dev] [i-g-t RFC v1] " Jigar Bhatt
2021-03-25  7:23   ` Martin Peres
2021-03-26 11:00     ` Bhatt, Jigar
2021-04-05  5:42     ` Gupta, Anshuman
2021-04-05 12:33       ` Martin Peres
2021-03-25 14:16 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/i915_pm_rpm: Add suspend-resume-latency test (rev2) Patchwork
2021-03-25 17:32 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox