1*4882a593SmuzhiyunFrom 65b545d762100c4012c2f8176f5c296d5bfcbdc4 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Sat, 15 Dec 2018 12:20:01 +0800 4*4882a593SmuzhiyunSubject: [PATCH 2/5] modetest: Speed up dumping info 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 7*4882a593Smuzhiyun--- 8*4882a593Smuzhiyun tests/modetest/modetest.c | 28 +++++++++++++++++++++------- 9*4882a593Smuzhiyun 1 file changed, 21 insertions(+), 7 deletions(-) 10*4882a593Smuzhiyun 11*4882a593Smuzhiyundiff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c 12*4882a593Smuzhiyunindex 8ff6c80..5291ca0 100644 13*4882a593Smuzhiyun--- a/tests/modetest/modetest.c 14*4882a593Smuzhiyun+++ b/tests/modetest/modetest.c 15*4882a593Smuzhiyun@@ -50,6 +50,7 @@ 16*4882a593Smuzhiyun #include <strings.h> 17*4882a593Smuzhiyun #include <errno.h> 18*4882a593Smuzhiyun #include <poll.h> 19*4882a593Smuzhiyun+#include <fcntl.h> 20*4882a593Smuzhiyun #include <sys/time.h> 21*4882a593Smuzhiyun #if HAVE_SYS_SELECT_H 22*4882a593Smuzhiyun #include <sys/select.h> 23*4882a593Smuzhiyun@@ -71,6 +72,10 @@ 24*4882a593Smuzhiyun static enum util_fill_pattern primary_fill = UTIL_PATTERN_SMPTE; 25*4882a593Smuzhiyun static enum util_fill_pattern secondary_fill = UTIL_PATTERN_TILES; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun+int encoders = 0, connectors = 0, crtcs = 0, planes = 0, fbs = 0; 28*4882a593Smuzhiyun+int dump_only; 29*4882a593Smuzhiyun+#define need_resource(type) (!dump_only || type##s) 30*4882a593Smuzhiyun+ 31*4882a593Smuzhiyun struct crtc { 32*4882a593Smuzhiyun drmModeCrtc *crtc; 33*4882a593Smuzhiyun drmModeObjectProperties *props; 34*4882a593Smuzhiyun@@ -485,7 +490,7 @@ static void dump_crtcs(struct device *dev) 35*4882a593Smuzhiyun printf("\n"); 36*4882a593Smuzhiyun } 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun-static void dump_framebuffers(struct device *dev) 39*4882a593Smuzhiyun+static void dump_fbs(struct device *dev) 40*4882a593Smuzhiyun { 41*4882a593Smuzhiyun drmModeFB *fb; 42*4882a593Smuzhiyun int i; 43*4882a593Smuzhiyun@@ -554,6 +559,7 @@ static void free_resources(struct resources *res) 44*4882a593Smuzhiyun return; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define free_resource(_res, type, Type) \ 47*4882a593Smuzhiyun+ if (need_resource(type)) \ 48*4882a593Smuzhiyun do { \ 49*4882a593Smuzhiyun if (!(_res)->type##s) \ 50*4882a593Smuzhiyun break; \ 51*4882a593Smuzhiyun@@ -566,6 +572,7 @@ static void free_resources(struct resources *res) 52*4882a593Smuzhiyun } while (0) 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #define free_properties(_res, type) \ 55*4882a593Smuzhiyun+ if (need_resource(type)) \ 56*4882a593Smuzhiyun do { \ 57*4882a593Smuzhiyun for (i = 0; i < (int)(_res)->count_##type##s; ++i) { \ 58*4882a593Smuzhiyun unsigned int j; \ 59*4882a593Smuzhiyun@@ -578,10 +585,10 @@ static void free_resources(struct resources *res) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun free_properties(res, plane); 62*4882a593Smuzhiyun free_resource(res, plane, Plane); 63*4882a593Smuzhiyun- 64*4882a593Smuzhiyun free_properties(res, connector); 65*4882a593Smuzhiyun free_properties(res, crtc); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun+ if (need_resource(connector)) 68*4882a593Smuzhiyun for (i = 0; i < res->count_connectors; i++) 69*4882a593Smuzhiyun free(res->connectors[i].name); 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun@@ -630,6 +637,7 @@ static struct resources *get_resources(struct device *dev) 72*4882a593Smuzhiyun } 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun #define get_resource(_res, __res, type, Type) \ 75*4882a593Smuzhiyun+ if (need_resource(type)) \ 76*4882a593Smuzhiyun do { \ 77*4882a593Smuzhiyun for (i = 0; i < (int)(_res)->count_##type##s; ++i) { \ 78*4882a593Smuzhiyun uint32_t type##id = (__res)->type##s[i]; \ 79*4882a593Smuzhiyun@@ -650,6 +658,7 @@ static struct resources *get_resources(struct device *dev) 80*4882a593Smuzhiyun drmModeFreeResources(_res); 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /* Set the name of all connectors based on the type name and the per-type ID. */ 83*4882a593Smuzhiyun+ if (need_resource(connector)) 84*4882a593Smuzhiyun for (i = 0; i < res->count_connectors; i++) { 85*4882a593Smuzhiyun struct connector *connector = &res->connectors[i]; 86*4882a593Smuzhiyun drmModeConnector *conn = connector->connector; 87*4882a593Smuzhiyun@@ -663,6 +672,7 @@ static struct resources *get_resources(struct device *dev) 88*4882a593Smuzhiyun } 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #define get_properties(_res, type, Type) \ 91*4882a593Smuzhiyun+ if (need_resource(type)) \ 92*4882a593Smuzhiyun do { \ 93*4882a593Smuzhiyun for (i = 0; i < (int)(_res)->count_##type##s; ++i) { \ 94*4882a593Smuzhiyun struct type *obj = &res->type##s[i]; \ 95*4882a593Smuzhiyun@@ -690,6 +700,7 @@ static struct resources *get_resources(struct device *dev) 96*4882a593Smuzhiyun get_properties(res, crtc, CRTC); 97*4882a593Smuzhiyun get_properties(res, connector, CONNECTOR); 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun+ if (need_resource(crtc)) 100*4882a593Smuzhiyun for (i = 0; i < res->count_crtcs; ++i) 101*4882a593Smuzhiyun res->crtcs[i].mode = &res->crtcs[i].crtc->mode; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun@@ -2026,7 +2037,6 @@ int main(int argc, char **argv) 104*4882a593Smuzhiyun struct device dev; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun int c; 107*4882a593Smuzhiyun- int encoders = 0, connectors = 0, crtcs = 0, planes = 0, framebuffers = 0; 108*4882a593Smuzhiyun int drop_master = 0; 109*4882a593Smuzhiyun int test_vsync = 0; 110*4882a593Smuzhiyun int test_cursor = 0; 111*4882a593Smuzhiyun@@ -2070,7 +2080,7 @@ int main(int argc, char **argv) 112*4882a593Smuzhiyun encoders = 1; 113*4882a593Smuzhiyun break; 114*4882a593Smuzhiyun case 'f': 115*4882a593Smuzhiyun- framebuffers = 1; 116*4882a593Smuzhiyun+ fbs = 1; 117*4882a593Smuzhiyun break; 118*4882a593Smuzhiyun case 'F': 119*4882a593Smuzhiyun parse_fill_patterns(optarg); 120*4882a593Smuzhiyun@@ -2143,7 +2153,7 @@ int main(int argc, char **argv) 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun /* Dump all the details when no* arguments are provided. */ 123*4882a593Smuzhiyun if (!args) 124*4882a593Smuzhiyun- encoders = connectors = crtcs = planes = framebuffers = 1; 125*4882a593Smuzhiyun+ encoders = connectors = crtcs = planes = fbs = 1; 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun if (test_vsync && !count) { 128*4882a593Smuzhiyun fprintf(stderr, "page flipping requires at least one -s option.\n"); 129*4882a593Smuzhiyun@@ -2159,7 +2169,11 @@ int main(int argc, char **argv) 130*4882a593Smuzhiyun return -1; 131*4882a593Smuzhiyun } 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun- dev.fd = util_open(device, module); 134*4882a593Smuzhiyun+ dump_only = !count && !plane_count && !prop_count; 135*4882a593Smuzhiyun+ if (dump_only && !device && !module) 136*4882a593Smuzhiyun+ dev.fd = open("/dev/dri/card0", O_RDWR); 137*4882a593Smuzhiyun+ else 138*4882a593Smuzhiyun+ dev.fd = util_open(device, module); 139*4882a593Smuzhiyun if (dev.fd < 0) 140*4882a593Smuzhiyun return -1; 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun@@ -2186,7 +2200,7 @@ int main(int argc, char **argv) 143*4882a593Smuzhiyun dump_resource(&dev, connectors); 144*4882a593Smuzhiyun dump_resource(&dev, crtcs); 145*4882a593Smuzhiyun dump_resource(&dev, planes); 146*4882a593Smuzhiyun- dump_resource(&dev, framebuffers); 147*4882a593Smuzhiyun+ dump_resource(&dev, fbs); 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun for (i = 0; i < prop_count; ++i) 150*4882a593Smuzhiyun set_property(&dev, &prop_args[i]); 151*4882a593Smuzhiyun-- 152*4882a593Smuzhiyun2.20.1 153*4882a593Smuzhiyun 154