annotate src/zlib-1.2.8/contrib/testzlib/testzlib.c @ 56:af97cad61ff0

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