#include #include #include #include #include #include "timer.h" #include "blit.h" #define TEST_LENGTH_SAMPLES (10000) #define TEST_COUNT 500000 static uint16_t testInput_u16[TEST_LENGTH_SAMPLES]; //input and output static uint16_t* in0 = NULL; static uint16_t* in1 = NULL; static uint16_t* in2 = NULL; static uint16_t* in3 = NULL; static double time0 = 0; static double time1 = 0; void test_blitV_conformance() { int i = 0; int height = 0; unsigned int sse0, sse1; /* init input memory */ in0 = (uint16_t*) malloc ( (TEST_LENGTH_SAMPLES) * sizeof (*in0)); in1 = (uint16_t*) malloc ( (TEST_LENGTH_SAMPLES) * sizeof (*in1)); for (i = 0; i < TEST_LENGTH_SAMPLES; i++) { testInput_u16[i] = (uint16_t) i; //(rand()&0xffff) ; } fprintf (stdout, "-----------------------------------------------------------\n"); fprintf (stdout, "-------------------------------------------CONF TEST\n"); fprintf (stdout, "-----------------------------------------------------------\n"); for (height = 1; height <= 128; height += 1) { printf ("height %d\n", height); memcpy (in0, testInput_u16, TEST_LENGTH_SAMPLES * sizeof (*in0)); memcpy (in1, testInput_u16, TEST_LENGTH_SAMPLES * sizeof (*in1)); for (i = 0; i < TEST_LENGTH_SAMPLES; i++) { if (in0[i]!=in1[i]) printf ("pre i %6d: %10d %10d \n", i, in0[i], in1[i]); } SkRGB16_Opaque_Blitter_blitV_c(in0, 4, height, 25); SkRGB16_Opaque_Blitter_blitV_neon(in1, 4, height, 25); for (i = 0; i < TEST_LENGTH_SAMPLES; i++) { if (in0[i]!=in1[i]) printf ("pos i %6d: %10d %10d \n", i, in0[i], in1[i]); } } free (in0); free (in1); } void test_blitV_performance() { int i = 0; int config[] = {1, 8, 18, 32, 76, 85, 120, 128, 512}; int num = 0; int height = 0; int loop = 0; unsigned int sse0, sse1; /* init input memory */ in0 = (uint16_t*) malloc ( (TEST_LENGTH_SAMPLES) * sizeof (*in0)); in1 = (uint16_t*) malloc ( (TEST_LENGTH_SAMPLES) * sizeof (*in1)); for (i = 0; i < TEST_LENGTH_SAMPLES; i++) { testInput_u16[i] = (uint16_t) i; //(rand()&0xffff) ; } fprintf (stdout, "-----------------------------------------------------------\n"); fprintf (stdout, "-------------------------------------blitV---------PERF TEST\n"); fprintf (stdout, "-----------------------------------------------------------\n"); for (num = 0; num < sizeof(config)/sizeof(*config); num++) { loop = TEST_COUNT; height = config[num]; /* C */ memcpy (in0, testInput_u16, TEST_LENGTH_SAMPLES * sizeof (*in0)); reset_timer(); for (i = 0; i < loop ; i++) SkRGB16_Opaque_Blitter_blitV_c(in0, 4, height, 25); time0 = get_time(); /* NEON */ memcpy (in1, testInput_u16, TEST_LENGTH_SAMPLES * sizeof (*in0)); reset_timer(); for (i = 0; i < loop ; i++) SkRGB16_Opaque_Blitter_blitV_neon(in1, 4, height, 25); time1 = get_time(); printf ("height %5d: %20lf %20lf\n", height, time0, time1); printf ("ratio: %lf \n", time0/time1); } free (in0); free (in1); } void test_blitH_conformance() { int i = 0; int height = 0; unsigned int sse0, sse1; /* init input memory */ in0 = (uint16_t*) malloc ( (TEST_LENGTH_SAMPLES) * sizeof (*in0)); in1 = (uint16_t*) malloc ( (TEST_LENGTH_SAMPLES) * sizeof (*in1)); for (i = 0; i < TEST_LENGTH_SAMPLES; i++) { testInput_u16[i] = (uint16_t) i; //(rand()&0xffff) ; } fprintf (stdout, "-----------------------------------------------------------\n"); fprintf (stdout, "-------------------------------------------CONF TEST\n"); fprintf (stdout, "-----------------------------------------------------------\n"); for (height = 1; height <= 128; height += 1) { printf ("height %d\n", height); memcpy (in0, testInput_u16, TEST_LENGTH_SAMPLES * sizeof (*in0)); memcpy (in1, testInput_u16, TEST_LENGTH_SAMPLES * sizeof (*in1)); for (i = 0; i < TEST_LENGTH_SAMPLES; i++) { if (in0[i]!=in1[i]) printf ("pre i %6d: %10d %10d \n", i, in0[i], in1[i]); } SkRGB16_Opaque_Blitter_blitH_c(in0, height, 25); SkRGB16_Opaque_Blitter_blitH_neon(in1, height, 25); for (i = 0; i < TEST_LENGTH_SAMPLES; i++) { if (in0[i]!=in1[i]) printf ("pos i %6d: %10d %10d \n", i, in0[i], in1[i]); } } free (in0); free (in1); } void test_blitH_performance() { int i = 0; int config[] = {1, 8, 18, 32, 76, 85, 120, 128, 512}; int num = 0; int height = 0; int loop = 0; unsigned int sse0, sse1; /* init input memory */ in0 = (uint16_t*) malloc ( (TEST_LENGTH_SAMPLES) * sizeof (*in0)); in1 = (uint16_t*) malloc ( (TEST_LENGTH_SAMPLES) * sizeof (*in1)); for (i = 0; i < TEST_LENGTH_SAMPLES; i++) { testInput_u16[i] = (uint16_t) i; //(rand()&0xffff) ; } fprintf (stdout, "-----------------------------------------------------------\n"); fprintf (stdout, "--------------------------------------blitH--------PERF TEST\n"); fprintf (stdout, "-----------------------------------------------------------\n"); for (num = 0; num < sizeof(config)/sizeof(*config); num++) { loop = TEST_COUNT; height = config[num]; /* C */ memcpy (in0, testInput_u16, TEST_LENGTH_SAMPLES * sizeof (*in0)); reset_timer(); for (i = 0; i < loop ; i++) SkRGB16_Opaque_Blitter_blitH_c(in0, height, 25); time0 = get_time(); /* NEON */ memcpy (in1, testInput_u16, TEST_LENGTH_SAMPLES * sizeof (*in0)); reset_timer(); for (i = 0; i < loop ; i++) SkRGB16_Opaque_Blitter_blitH_neon(in1, height, 25); time1 = get_time(); printf ("height %5d: %20lf %20lf\n", height, time0, time1); printf ("ratio: %lf \n", time0/time1); } free (in0); free (in1); } void main (void) { test_blitV_conformance(); // run tests test_blitV_performance(); // run tests test_blitH_conformance(); // run tests test_blitH_performance(); // run tests }