From 9adb1e34457799c1ceae768241e3eb8615e4e09d Mon Sep 17 00:00:00 2001 From: Matthias Kramm Date: Thu, 3 Jun 2010 08:37:33 -0700 Subject: [PATCH] added polygon processing speed test --- lib/gfxpoly/Makefile | 10 +++- lib/gfxpoly/poly.h | 3 - lib/gfxpoly/speedtest.c | 150 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 lib/gfxpoly/speedtest.c diff --git a/lib/gfxpoly/Makefile b/lib/gfxpoly/Makefile index 4e182f7..65eca03 100644 --- a/lib/gfxpoly/Makefile +++ b/lib/gfxpoly/Makefile @@ -1,8 +1,8 @@ -all: test stroke +all: test speedtest stroke include ../../Makefile.common -CC = gcc -O2 -g -pg -#CC = gcc -O3 +CC = gcc -DDEBUG -DCHECKS -O2 -g -pg +CCO = gcc -O2 -fno-inline -g -pg ../libbase.a: ../q.c ../q.h ../mem.c ../mem.h cd ..; make libbase.a @@ -13,6 +13,7 @@ CC = gcc -O2 -g -pg testheap: ../libbase.a testheap.c $(CC) testheap.c ../libbase.a -o testheap -lm -lz -ljpeg +SRC = active.c convert.c poly.c wind.c renderpoly.c xrow.c stroke.c OBJS = active.o convert.o poly.o wind.o renderpoly.o xrow.o stroke.o active.o: active.c active.h poly.h @@ -44,5 +45,8 @@ SWF = ../librfxswf.a ../libgfxpdf.a -lstdc++ test: ../libbase.a test.c $(OBJS) poly.h convert.h $(GFX) $(CC) test.c $(OBJS) $(SWF) $(GFX) ../libbase.a -o test $(LIBS) +speedtest: ../libbase.a speedtest.c $(SRC) poly.h convert.h $(GFX) + $(CCO) speedtest.c $(SRC) $(GFX) ../libbase.a -o speedtest $(LIBS) + clean: rm -f *.o test stroke diff --git a/lib/gfxpoly/poly.h b/lib/gfxpoly/poly.h index ccbf65e..0017f8e 100644 --- a/lib/gfxpoly/poly.h +++ b/lib/gfxpoly/poly.h @@ -6,9 +6,6 @@ #include "../types.h" #include "wind.h" -//#define DEBUG -#define CHECKS - /* features */ #define SPLAY #define DONT_REMEMBER_CROSSINGS diff --git a/lib/gfxpoly/speedtest.c b/lib/gfxpoly/speedtest.c new file mode 100644 index 0000000..8f35a45 --- /dev/null +++ b/lib/gfxpoly/speedtest.c @@ -0,0 +1,150 @@ +#include +#include +#include +#include +#include +#include "../gfxtools.h" +#include "poly.h" +#include "convert.h" +#include "renderpoly.h" +#include "stroke.h" + +#ifdef CHECKS +#error "speedtest must be compiled without CHECKS" +#endif + +#ifdef DEBUG +#error "speedtest must be compiled without DEBUG" +#endif + +gfxline_t* mkchessboard() +{ + gfxline_t*b = 0; + int x,y; + unsigned int r = 0; + int spacing = 20; + + int num_caros = 40; + int l = 5; + char do_centerpiece=1; + + //int num_caros = 4; + //int l=1; + //char do_centerpiece=0; + + for(x=-l;x<=l;x++) + for(y=-l;y<=l;y++) { + /* pseudo random */ + r = crc32_add_byte(r, x);r = crc32_add_byte(r, y); + if(r&1) { + gfxline_t*box; + if(r&2) { + box = gfxline_makerectangle(x*spacing,y*spacing,(x+1)*spacing,(y+1)*spacing); + } else { + box = gfxline_makerectangle((x+1)*spacing,y*spacing,x*spacing,(y+1)*spacing); + } + b = gfxline_append(b, box); + } + } + + int t; + for(t=0;t>4)%10-5)*spacing; + int sizex = ((r>>8)%4)*spacing; + int sizey = sizex; + if(r&65536) + sizex = -sizex; + gfxline_t*l = malloc(sizeof(gfxline_t)*5); + l[0].type = gfx_moveTo;l[0].next = &l[1]; + l[1].type = gfx_lineTo;l[1].next = &l[2]; + l[2].type = gfx_lineTo;l[2].next = &l[3]; + l[3].type = gfx_lineTo;l[3].next = &l[4]; + l[4].type = gfx_lineTo;l[4].next = 0; + l[0].x = x; + l[0].y = y-sizey; + l[1].x = x+sizex; + l[1].y = y; + l[2].x = x; + l[2].y = y+sizey; + l[3].x = x-sizex; + l[3].y = y; + l[4].x = x; + l[4].y = y-sizey; + gfxline_append(b, l); + } + if(do_centerpiece) { + for(t=0;t<5;t++) { + gfxline_t*l = gfxline_makerectangle(-9*spacing,-10,9*spacing,10); + gfxmatrix_t matrix; + memset(&matrix, 0, sizeof(gfxmatrix_t)); + double ua=t*0.43; + matrix.m00=cos(ua);matrix.m10=sin(ua); + matrix.m01=-sin(ua);matrix.m11=cos(ua); + gfxline_transform(l, &matrix); + gfxline_append(b, l); + } + gfxline_append(b, gfxline_makecircle(100,100,100,100)); + } + return b; +} + +gfxline_t* make_circles(gfxline_t*b, int n) +{ + unsigned int c = 0; + int t; + for(t=0;t