diff options
author | Thomas Hilber <sparkie@lowbyte.de> | 2009-05-30 06:34:42 +0200 |
---|---|---|
committer | Paul Menzel <paulepanter@users.sourceforge.net> | 2009-06-06 11:27:19 +0200 |
commit | 9ed612b65e5590f5d82b6822f19b6881edff0e97 (patch) | |
tree | 4c8faf9ae4bef063624c4789c3dd3bd18c217824 | |
parent | c6322b3e8d28cb5a6987e119f27eae70a73ca72f (diff) | |
download | xf86-video-intel-frc-9ed612b65e5590f5d82b6822f19b6881edff0e97.tar.gz xf86-video-intel-frc-9ed612b65e5590f5d82b6822f19b6881edff0e97.tar.bz2 |
Improved field timing debug support.
Signed-off-by: Thomas Hilber <sparkie@lowbyte.de>
Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
-rw-r--r-- | src/i810_driver.c | 2 | ||||
-rw-r--r-- | src/i830.h | 2 | ||||
-rw-r--r-- | src/i830_driver.c | 20 | ||||
-rw-r--r-- | src/i830_video.c | 27 |
4 files changed, 33 insertions, 18 deletions
diff --git a/src/i810_driver.c b/src/i810_driver.c index eb4c547e..76582992 100644 --- a/src/i810_driver.c +++ b/src/i810_driver.c @@ -275,7 +275,7 @@ static const OptionInfoRec I810Options[] = { {OPTION_YRGB_VPHASE, "SF_YRGB_VPhase",OPTV_INTEGER, {0}, FALSE}, {OPTION_UV_VPHASE, "SF_UV_VPhase", OPTV_INTEGER, {0}, FALSE}, {OPTION_SCHED_PRIO, "SF_SchedPrio", OPTV_INTEGER, {0}, FALSE}, - {OPTION_SYF_DEBUG, "SF_Debug", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_SYF_DEBUG, "SF_Debug", OPTV_INTEGER, {0}, FALSE}, {-1, NULL, OPTV_NONE, {0}, FALSE} }; /* *INDENT-ON* */ @@ -528,7 +528,7 @@ typedef struct _I830Rec { int YRGB_vphase; int UV_vphase; int SchedPrio; - Bool SYF_debug; + int SYF_debug; /* EXA render state */ float scale_units[2][2]; diff --git a/src/i830_driver.c b/src/i830_driver.c index 7de87691..98723aa7 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -352,7 +352,7 @@ static OptionInfoRec I830Options[] = { {OPTION_YRGB_VPHASE, "SF_YRGB_VPhase",OPTV_INTEGER, {0}, FALSE}, {OPTION_UV_VPHASE, "SF_UV_VPhase", OPTV_INTEGER, {0}, FALSE}, {OPTION_SCHED_PRIO, "SF_SchedPrio", OPTV_INTEGER, {0}, FALSE}, - {OPTION_SYF_DEBUG, "SF_Debug", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_SYF_DEBUG, "SF_Debug", OPTV_INTEGER, {0}, FALSE}, {-1, NULL, OPTV_NONE, {0}, FALSE} }; /* *INDENT-ON* */ @@ -1721,11 +1721,11 @@ I830PreInit(ScrnInfoPtr pScrn, int flags) &(pI830->SYF_debug))) { from = X_CONFIG; } else { - pI830->SYF_debug = FALSE; + pI830->SYF_debug = 0; from = X_DEFAULT; } - xf86DrvMsg(pScrn->scrnIndex, from, "sync fields debug %sactivated\n", - pI830->SYF_debug ? "" : "de"); + xf86DrvMsg(pScrn->scrnIndex, from, "sync fields debug %sactivated: %d\n", + pI830->SYF_debug ? "" : "de", pI830->SYF_debug); } /* --- SYNC FIELDS setup --- */ @@ -1831,9 +1831,12 @@ I830PreInit(ScrnInfoPtr pScrn, int flags) xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Cannot support sync fields with current timing, disabled\n"); pI830->sync_fields = 0; } + +#define MAX_SCHEDPRIO_1CORE -20 + if (pI830->sync_fields) { if (pI830->SchedPrio != ~0) { - if (pI830->SchedPrio < -20) { + if (pI830->SchedPrio < MAX_SCHEDPRIO_1CORE) { struct sched_param sched; sched.sched_priority = -pI830->SchedPrio; @@ -1865,15 +1868,14 @@ I830PreInit(ScrnInfoPtr pScrn, int flags) if (f = fopen("/proc/cpuinfo", "r")) { char buf[256]; while (fgets(buf, 255, f)) { +#if 0 /* do not change the default priority at the moment */ sscanf(buf, "processor : %d", &cores); +#endif } fclose(f); } - -#define DFLT_SCHEDPRIO_1CORE -20 - if (!cores) { - if (setpriority(PRIO_PROCESS, 0, DFLT_SCHEDPRIO_1CORE)) { + if (setpriority(PRIO_PROCESS, 0, MAX_SCHEDPRIO_1CORE)) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "failed to set scheduling priority (single core system): %s\n", strerror(errno)); } else { diff --git a/src/i830_video.c b/src/i830_video.c index 5d14c5d7..deb16169 100644 --- a/src/i830_video.c +++ b/src/i830_video.c @@ -3117,6 +3117,7 @@ struct _I830_s { #endif +#include <time.h> #include <unistd.h> #define OC_FIELD (1 << 19) @@ -3124,6 +3125,7 @@ struct _I830_s { typedef struct _syf { int cnt; int trim; + int warn; int drift; int spoint; } syf_t; @@ -3233,10 +3235,10 @@ vga_sync_fields(pI830) } if (pI830->SYF_debug) { if (abs(vbl_usec - vbl_usec_prev) > SYF_WARN_RANGE) { - log_graph(vbl_usec - vbl_usec_prev, '%'); + log_graph(vbl_usec - vbl_usec_prev, '%'); ++syf.warn; } if (abs(vbl_usec - SYF_SYNC_POINT) > SYF_WARN_RANGE) { - log_graph(vbl_usec - SYF_SYNC_POINT, ':'); + log_graph(vbl_usec - SYF_SYNC_POINT, ':'); ++syf.warn; } } @@ -3269,14 +3271,25 @@ vga_sync_fields(pI830) syf.trim = max(syf.trim, -SYF_MAX_TRIM_REL); syf.trim = min(syf.trim, SYF_MAX_TRIM_REL); if (pI830->SYF_debug) { - log_graph(0, '+'); - log_graph(syf.spoint, '|'); - log_graph(syf.drift, '*'); - log_graph(0, 1); - ErrorF("%7d %7d [%3d%+4d]\n", syf.drift, syf.spoint, (char)(trim & 0xff), syf.trim); + if (pI830->SYF_debug < 5 && syf.warn) { + time_t t; + struct tm *tm; + + time(&t); + tm = localtime(&t); + ErrorF("%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); + } + if (pI830->SYF_debug < 5 && syf.warn || pI830->SYF_debug >= 5) { + log_graph(0, '+'); + log_graph(syf.spoint, '|'); + log_graph(syf.drift, '*'); + log_graph(0, 1); + ErrorF("%7d %7d [%3d%+4d]\n", syf.drift, syf.spoint, (char)(trim & 0xff), syf.trim); + } } syf.spoint = 0; syf.drift = 0; + syf.warn = 0; } if (B(1) && syf.trim) { int t = (char)(trim & 0xff); |