More video checks.

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2013-05-04 14:00:14 +02:00
parent 92323d1fb0
commit b7c036bce3
8 changed files with 510 additions and 128 deletions

View file

@ -59,6 +59,25 @@ struct grub_video_mode_info grub_test_video_modes[30] = {
.bytes_per_pixel = 1,
.number_of_colors = GRUB_VIDEO_FBSTD_NUMCOLORS
},
{
.width = 640,
.height = 480,
.pitch = 640 * 4,
GRUB_VIDEO_MI_RGBA8888()
},
{
.width = 800,
.height = 600,
.pitch = 800 * 4,
GRUB_VIDEO_MI_RGBA8888()
},
{
.width = 1024,
.height = 768,
.pitch = 1024 * 4,
GRUB_VIDEO_MI_RGBA8888()
},
{
.width = 640,
.height = 480,
@ -86,6 +105,10 @@ struct grub_video_mode_info grub_test_video_modes[30] = {
.bytes_per_pixel = 1,
.number_of_colors = GRUB_VIDEO_FBSTD_EXT_NUMCOLORS
},
{
.width = 640,
.height = 480,
@ -140,25 +163,6 @@ struct grub_video_mode_info grub_test_video_modes[30] = {
.pitch = 1024 * 3,
GRUB_VIDEO_MI_RGB888 ()
},
{
.width = 640,
.height = 480,
.pitch = 640 * 4,
GRUB_VIDEO_MI_RGBA8888()
},
{
.width = 800,
.height = 600,
.pitch = 800 * 4,
GRUB_VIDEO_MI_RGBA8888()
},
{
.width = 1024,
.height = 768,
.pitch = 1024 * 4,
GRUB_VIDEO_MI_RGBA8888()
},
{
.width = 640,
.height = 480,
@ -440,8 +444,8 @@ grub_video_capture_write_bmp (const char *fname,
#endif
static const char *
get_modename (void)
const char *
grub_video_checksum_get_modename (void)
{
static char buf[40];
if (capt_mode_info.mode_type & GRUB_VIDEO_MODE_TYPE_INDEX_COLOR)
@ -465,11 +469,39 @@ get_modename (void)
}
//#define GENERATE_MODE 1
//#define SAVE_ALL_IMAGES
//#define COLLECT_TIME_STATISTICS 1
#if defined (GENERATE_MODE) && defined (GRUB_MACHINE_EMU)
int genfd = -1;
#endif
#include <grub/time.h>
static void
write_time (void)
{
#if defined (GRUB_MACHINE_EMU) && defined (COLLECT_TIME_STATISTICS)
char buf[60];
static grub_uint64_t prev;
grub_uint64_t cur;
static int tmrfd = -1;
if (tmrfd < 0)
tmrfd = open ("time.txt", O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
cur = grub_get_time_ms ();
grub_snprintf (buf, sizeof (buf), "%s_%dx%dx%s:%d: %" PRIuGRUB_UINT64_T " ms\n",
basename,
capt_mode_info.width,
capt_mode_info.height,
grub_video_checksum_get_modename (), ctr,
cur - prev);
prev = cur;
if (tmrfd >= 0)
write (tmrfd, buf, grub_strlen (buf));
#endif
}
static void
checksum (void)
{
@ -478,6 +510,8 @@ checksum (void)
ptr = grub_video_capture_get_framebuffer ();
write_time ();
#ifdef GRUB_CPU_WORDS_BIGENDIAN
switch (capt_mode_info.bytes_per_pixel)
{
@ -549,35 +583,6 @@ checksum (void)
#else
crc = grub_getcrc32c (0, ptr, capt_mode_info.pitch * capt_mode_info.height);
#endif
if (!checksums || ctr >= nchk)
{
grub_test_assert (0, "Unexpected checksum %s_%dx%dx%s:%d: 0x%x",
basename,
capt_mode_info.width,
capt_mode_info.height, get_modename (), ctr, crc);
}
else if (crc != checksums[ctr])
{
grub_test_assert (0, "Checksum %s_%dx%dx%s:%d failed: 0x%x vs 0x%x",
basename,
capt_mode_info.width,
capt_mode_info.height, get_modename (),
ctr, crc, checksums[ctr]);
}
else
{
#if !(defined (GENERATE_MODE) && defined (GRUB_MACHINE_EMU))
ctr++;
return;
#endif
}
#ifdef GRUB_MACHINE_EMU
char *name = grub_xasprintf ("%s_%dx%dx%s_%d.bmp", basename,
capt_mode_info.width,
capt_mode_info.height, get_modename (),
ctr);
grub_video_capture_write_bmp (name, ptr, &capt_mode_info);
#endif
#if defined (GENERATE_MODE) && defined (GRUB_MACHINE_EMU)
if (genfd >= 0)
@ -588,6 +593,43 @@ checksum (void)
}
#endif
if (!checksums || ctr >= nchk)
{
grub_test_assert (0, "Unexpected checksum %s_%dx%dx%s:%d: 0x%x",
basename,
capt_mode_info.width,
capt_mode_info.height,
grub_video_checksum_get_modename (), ctr, crc);
}
else if (crc != checksums[ctr])
{
grub_test_assert (0, "Checksum %s_%dx%dx%s:%d failed: 0x%x vs 0x%x",
basename,
capt_mode_info.width,
capt_mode_info.height,
grub_video_checksum_get_modename (),
ctr, crc, checksums[ctr]);
}
#if !(defined (SAVE_ALL_IMAGES) && defined (GRUB_MACHINE_EMU))
else
{
write_time ();
ctr++;
return;
}
#endif
#ifdef GRUB_MACHINE_EMU
char *name = grub_xasprintf ("%s_%dx%dx%s_%d.bmp", basename,
capt_mode_info.width,
capt_mode_info.height,
grub_video_checksum_get_modename (),
ctr);
grub_video_capture_write_bmp (name, ptr, &capt_mode_info);
grub_free (name);
#endif
write_time ();
ctr++;
}
@ -691,14 +733,15 @@ grub_video_checksum_end (void)
if (genfd >= 0)
{
char buf[40];
grub_snprintf (buf, sizeof (buf), "}, %x },\n", ctr);
grub_snprintf (buf, sizeof (buf), "}, %d },\n", ctr);
write (genfd, buf, grub_strlen (buf));
}
#endif
grub_test_assert (ctr == nchk, "Not enough checksums %s_%dx%dx%s: %d vs %d",
basename,
capt_mode_info.width,
capt_mode_info.height, get_modename (),
capt_mode_info.height,
grub_video_checksum_get_modename (),
ctr, nchk);
grub_free (basename);
basename = 0;