#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>

typedef struct pixel {
    unsigned char r, g, b, x;
} pixel;

int main(void)
{
    int width = 1920, height = 1080;
    int length = width * height;
    pixel *pixels = (pixel*)malloc(length * sizeof(pixel));
    for (int i = 0; i < length; i++) {
        int rnd = rand();
        pixels[i].r = rnd & 0xFF;
        pixels[i].g = rnd >> 8 & 0xFF;
        pixels[i].b = rnd >> 16 & 0xFF;
        pixels[i].x = 0;
    }

    struct timeval tv0, tv1, tv2, tv3, tv4;

    gettimeofday(&tv0, NULL);

    for (int y = 0; y < height; ++y)
        for (int x = 0; x < width; ++x) {
            pixel *p = &pixels[x + y * width];
            p->r ^= 0xff;
            p->g ^= 0xff;
            p->b ^= 0xff;
        }

    gettimeofday(&tv1, NULL);

    for (int x = 0; x < width; x++)
        for (int y = 0; y < height; ++y) {
            pixel *p = &pixels[x + y * width];
            p->r ^= 0xff;
            p->g ^= 0xff;
            p->b ^= 0xff;
        }

    gettimeofday(&tv2, NULL);

    printf("Y-X pass: %d usec\n", 1000000 * (tv1.tv_sec - tv0.tv_sec) + tv1.tv_usec - tv0.tv_usec);
    printf("X-Y pass: %d usec\n", 1000000 * (tv2.tv_sec - tv1.tv_sec) + tv2.tv_usec - tv1.tv_usec);

    return 0;
}
