Visualization Library 2.0.0-b5

A lightweight C++ OpenGL middleware for 2D/3D graphics

VL     Star     Watch     Fork     Issue

[Download] [Tutorials] [All Classes] [Grouped Classes]
testzlib.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <windows.h>
4 
5 #include "zlib.h"
6 
7 
8 void MyDoMinus64(LARGE_INTEGER *R,LARGE_INTEGER A,LARGE_INTEGER B)
9 {
10  R->HighPart = A.HighPart - B.HighPart;
11  if (A.LowPart >= B.LowPart)
12  R->LowPart = A.LowPart - B.LowPart;
13  else
14  {
15  R->LowPart = A.LowPart - B.LowPart;
16  R->HighPart --;
17  }
18 }
19 
20 #ifdef _M_X64
21 // see http://msdn2.microsoft.com/library/twchhe95(en-us,vs.80).aspx for __rdtsc
22 unsigned __int64 __rdtsc(void);
23 void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
24 {
25  // printf("rdtsc = %I64x\n",__rdtsc());
26  pbeginTime64->QuadPart=__rdtsc();
27 }
28 
29 LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
30 {
31  LARGE_INTEGER LIres;
32  unsigned _int64 res=__rdtsc()-((unsigned _int64)(beginTime64.QuadPart));
33  LIres.QuadPart=res;
34  // printf("rdtsc = %I64x\n",__rdtsc());
35  return LIres;
36 }
37 #else
38 #ifdef _M_IX86
39 void myGetRDTSC32(LARGE_INTEGER * pbeginTime64)
40 {
41  DWORD dwEdx,dwEax;
42  _asm
43  {
44  rdtsc
45  mov dwEax,eax
46  mov dwEdx,edx
47  }
48  pbeginTime64->LowPart=dwEax;
49  pbeginTime64->HighPart=dwEdx;
50 }
51 
52 void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
53 {
54  myGetRDTSC32(pbeginTime64);
55 }
56 
57 LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
58 {
59  LARGE_INTEGER LIres,endTime64;
60  myGetRDTSC32(&endTime64);
61 
62  LIres.LowPart=LIres.HighPart=0;
63  MyDoMinus64(&LIres,endTime64,beginTime64);
64  return LIres;
65 }
66 #else
67 void myGetRDTSC32(LARGE_INTEGER * pbeginTime64)
68 {
69 }
70 
71 void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
72 {
73 }
74 
75 LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
76 {
77  LARGE_INTEGER lr;
78  lr.QuadPart=0;
79  return lr;
80 }
81 #endif
82 #endif
83 
84 void BeginCountPerfCounter(LARGE_INTEGER * pbeginTime64,BOOL fComputeTimeQueryPerf)
85 {
86  if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(pbeginTime64)))
87  {
88  pbeginTime64->LowPart = GetTickCount();
89  pbeginTime64->HighPart = 0;
90  }
91 }
92 
93 DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
94 {
95  LARGE_INTEGER endTime64,ticksPerSecond,ticks;
96  DWORDLONG ticksShifted,tickSecShifted;
97  DWORD dwLog=16+0;
98  DWORD dwRet;
99  if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(&endTime64)))
100  dwRet = (GetTickCount() - beginTime64.LowPart)*1;
101  else
102  {
103  MyDoMinus64(&ticks,endTime64,beginTime64);
104  QueryPerformanceFrequency(&ticksPerSecond);
105 
106 
107  {
108  ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog);
109  tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog);
110 
111  }
112 
113  dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted));
114  dwRet *=1;
115  }
116  return dwRet;
117 }
118 
119 int ReadFileMemory(const char* filename,long* plFileSize,unsigned char** pFilePtr)
120 {
121  FILE* stream;
122  unsigned char* ptr;
123  int retVal=1;
124  stream=fopen(filename, "rb");
125  if (stream==NULL)
126  return 0;
127 
128  fseek(stream,0,SEEK_END);
129 
130  *plFileSize=ftell(stream);
131  fseek(stream,0,SEEK_SET);
132  ptr=malloc((*plFileSize)+1);
133  if (ptr==NULL)
134  retVal=0;
135  else
136  {
137  if (fread(ptr, 1, *plFileSize,stream) != (*plFileSize))
138  retVal=0;
139  }
140  fclose(stream);
141  *pFilePtr=ptr;
142  return retVal;
143 }
144 
145 int main(int argc, char *argv[])
146 {
147  int BlockSizeCompress=0x8000;
148  int BlockSizeUncompress=0x8000;
149  int cprLevel=Z_DEFAULT_COMPRESSION ;
150  long lFileSize;
151  unsigned char* FilePtr;
152  long lBufferSizeCpr;
153  long lBufferSizeUncpr;
154  long lCompressedSize=0;
155  unsigned char* CprPtr;
156  unsigned char* UncprPtr;
157  long lSizeCpr,lSizeUncpr;
158  DWORD dwGetTick,dwMsecQP;
159  LARGE_INTEGER li_qp,li_rdtsc,dwResRdtsc;
160 
161  if (argc<=1)
162  {
163  printf("run TestZlib <File> [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\n");
164  return 0;
165  }
166 
167  if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0)
168  {
169  printf("error reading %s\n",argv[1]);
170  return 1;
171  }
172  else printf("file %s read, %u bytes\n",argv[1],lFileSize);
173 
174  if (argc>=3)
175  BlockSizeCompress=atol(argv[2]);
176 
177  if (argc>=4)
178  BlockSizeUncompress=atol(argv[3]);
179 
180  if (argc>=5)
181  cprLevel=(int)atol(argv[4]);
182 
183  lBufferSizeCpr = lFileSize + (lFileSize/0x10) + 0x200;
184  lBufferSizeUncpr = lBufferSizeCpr;
185 
186  CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress);
187 
188  BeginCountPerfCounter(&li_qp,TRUE);
189  dwGetTick=GetTickCount();
190  BeginCountRdtsc(&li_rdtsc);
191  {
192  z_stream zcpr;
193  int ret=Z_OK;
194  long lOrigToDo = lFileSize;
195  long lOrigDone = 0;
196  int step=0;
197  memset(&zcpr,0,sizeof(z_stream));
198  deflateInit(&zcpr,cprLevel);
199 
200  zcpr.next_in = FilePtr;
201  zcpr.next_out = CprPtr;
202 
203 
204  do
205  {
206  long all_read_before = zcpr.total_in;
207  zcpr.avail_in = min(lOrigToDo,BlockSizeCompress);
208  zcpr.avail_out = BlockSizeCompress;
209  ret=deflate(&zcpr,(zcpr.avail_in==lOrigToDo) ? Z_FINISH : Z_SYNC_FLUSH);
210  lOrigDone += (zcpr.total_in-all_read_before);
211  lOrigToDo -= (zcpr.total_in-all_read_before);
212  step++;
213  } while (ret==Z_OK);
214 
215  lSizeCpr=zcpr.total_out;
216  deflateEnd(&zcpr);
217  dwGetTick=GetTickCount()-dwGetTick;
218  dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);
219  dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);
220  printf("total compress size = %u, in %u step\n",lSizeCpr,step);
221  printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.);
222  printf("defcpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.);
223  printf("defcpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart);
224  }
225 
226  CprPtr=(unsigned char*)realloc(CprPtr,lSizeCpr);
227  UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress);
228 
229  BeginCountPerfCounter(&li_qp,TRUE);
230  dwGetTick=GetTickCount();
231  BeginCountRdtsc(&li_rdtsc);
232  {
233  z_stream zcpr;
234  int ret=Z_OK;
235  long lOrigToDo = lSizeCpr;
236  long lOrigDone = 0;
237  int step=0;
238  memset(&zcpr,0,sizeof(z_stream));
239  inflateInit(&zcpr);
240 
241  zcpr.next_in = CprPtr;
242  zcpr.next_out = UncprPtr;
243 
244 
245  do
246  {
247  long all_read_before = zcpr.total_in;
248  zcpr.avail_in = min(lOrigToDo,BlockSizeUncompress);
249  zcpr.avail_out = BlockSizeUncompress;
250  ret=inflate(&zcpr,Z_SYNC_FLUSH);
251  lOrigDone += (zcpr.total_in-all_read_before);
252  lOrigToDo -= (zcpr.total_in-all_read_before);
253  step++;
254  } while (ret==Z_OK);
255 
256  lSizeUncpr=zcpr.total_out;
257  inflateEnd(&zcpr);
258  dwGetTick=GetTickCount()-dwGetTick;
259  dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);
260  dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);
261  printf("total uncompress size = %u, in %u step\n",lSizeUncpr,step);
262  printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.);
263  printf("uncpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.);
264  printf("uncpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart);
265  }
266 
267  if (lSizeUncpr==lFileSize)
268  {
269  if (memcmp(FilePtr,UncprPtr,lFileSize)==0)
270  printf("compare ok\n");
271 
272  }
273 
274  return 0;
275 }
GLuint GLuint stream
Bytef * next_in
Definition: zlib.h:69
#define NULL
Definition: ftobjs.h:61
void MyDoMinus64(LARGE_INTEGER *R, LARGE_INTEGER A, LARGE_INTEGER B)
Definition: testzlib.c:8
png_voidp ptr
Definition: png.h:1908
uInt avail_in
Definition: zlib.h:70
T step(T edge, T a)
Definition: glsl_math.hpp:990
char * malloc()
#define Z_DEFAULT_COMPRESSION
Definition: zlib.h:148
#define SEEK_END
Definition: zconf.h:251
const char * filename
Definition: ioapi.h:135
int ZEXPORT deflateEnd(z_streamp strm)
Definition: deflate.c:979
#define BOOL
Definition: png2pnm.c:23
#define Z_FINISH
Definition: zlib.h:129
#define Z_OK
Definition: zlib.h:132
void myGetRDTSC32(LARGE_INTEGER *pbeginTime64)
Definition: testzlib.c:67
#define inflateInit(strm)
Definition: zlib.h:817
LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64, BOOL fComputeTimeQueryPerf)
Definition: testzlib.c:75
#define Z_SYNC_FLUSH
Definition: zlib.h:127
uLong total_in
Definition: zlib.h:71
#define deflateInit(strm, level)
Definition: zlib.h:815
float min(float a, float b)
Definition: Vector2.hpp:307
int ZEXPORT inflate(z_streamp strm, int flush)
Definition: dummy_inflate.c:3
void BeginCountRdtsc(LARGE_INTEGER *pbeginTime64)
Definition: testzlib.c:71
int ZEXPORT deflate(z_streamp strm, int flush)
Definition: deflate.c:665
uLong total_out
Definition: zlib.h:75
DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64, BOOL fComputeTimeQueryPerf)
Definition: testzlib.c:93
typedef int
Definition: png.h:978
GLuint res
uInt avail_out
Definition: zlib.h:74
void BeginCountPerfCounter(LARGE_INTEGER *pbeginTime64, BOOL fComputeTimeQueryPerf)
Definition: testzlib.c:84
int ReadFileMemory(const char *filename, long *plFileSize, unsigned char **pFilePtr)
Definition: testzlib.c:119
Bytef * next_out
Definition: zlib.h:73
#define TRUE
Definition: ftobjs.h:53
int ZEXPORT inflateEnd(z_streamp strm)
Definition: dummy_inflate.c:12
int main(int argc, char *argv[])
Definition: testzlib.c:145
#define SEEK_SET
Definition: zconf.h:249