#include "mem.h"
#include "zstd_static.h"
+#include "zstd_internal.h" /* ZSTD_setAdditionalParam */
#include "xxhash.h"
#include "datagen.h" /* RDG_genBuffer */
#define MAX(a,b) ((a)>(b) ? (a) : (b))
static int BMK_benchMem(const void* srcBuffer, size_t srcSize,
- const char* displayName, int cLevel,
+ const char* displayName, int cLevel, int additionalParam,
const size_t* fileSizes, U32 nbFiles,
const void* dictBuffer, size_t dictBufferSize, benchResult_t *result)
{
} } }
/* warmimg up memory */
+ ZSTD_setAdditionalParam(refCtx, additionalParam);
RDG_genBuffer(compressedBuffer, maxCompressedSize, 0.10, 0.50, 1);
/* Bench */
}
static void BMK_benchCLevel(void* srcBuffer, size_t benchedSize,
- const char* displayName, int cLevel, int cLevelLast,
+ const char* displayName, int cLevel, int cLevelLast, int additionalParam,
const size_t* fileSizes, unsigned nbFiles,
const void* dictBuffer, size_t dictBufferSize)
{
memset(&result, 0, sizeof(result));
memset(&total, 0, sizeof(total));
-
- if (g_displayLevel == 1)
+
+ if (g_displayLevel == 1)
DISPLAY("bench %s: input %u bytes, %i iterations, %u KB blocks\n", ZSTD_VERSION, (U32)benchedSize, nbIterations, (U32)(g_blockSize>>10));
if (cLevelLast < cLevel) cLevelLast = cLevel;
for (l=cLevel; l <= cLevelLast; l++) {
BMK_benchMem(srcBuffer, benchedSize,
- displayName, l,
+ displayName, l, additionalParam,
fileSizes, nbFiles,
dictBuffer, dictBufferSize, &result);
if (g_displayLevel == 1) {
}
static void BMK_benchFileTable(const char** fileNamesTable, unsigned nbFiles,
- const char* dictFileName, int cLevel, int cLevelLast)
+ const char* dictFileName, int cLevel, int cLevelLast, int additionalParam)
{
void* srcBuffer;
size_t benchedSize;
else displayName = fileNamesTable[0];
BMK_benchCLevel(srcBuffer, benchedSize,
- displayName, cLevel, cLevelLast,
+ displayName, cLevel, cLevelLast, additionalParam,
fileSizes, nbFiles,
dictBuffer, dictBufferSize);
}
-static void BMK_syntheticTest(int cLevel, int cLevelLast, double compressibility)
+static void BMK_syntheticTest(int cLevel, int cLevelLast, int additionalParam, double compressibility)
{
char name[20] = {0};
size_t benchedSize = 10000000;
/* Bench */
snprintf (name, sizeof(name), "Synthetic %2u%%", (unsigned)(compressibility*100));
- BMK_benchCLevel(srcBuffer, benchedSize, name, cLevel, cLevelLast, &benchedSize, 1, NULL, 0);
+ BMK_benchCLevel(srcBuffer, benchedSize, name, cLevel, cLevelLast, additionalParam, &benchedSize, 1, NULL, 0);
/* clean up */
free(srcBuffer);
int BMK_benchFiles(const char** fileNamesTable, unsigned nbFiles,
- const char* dictFileName, int cLevel, int cLevelLast)
+ const char* dictFileName, int cLevel, int cLevelLast, int additionalParam)
{
double compressibility = (double)g_compressibilityDefault / 100;
if (nbFiles == 0)
- BMK_syntheticTest(cLevel, cLevelLast, compressibility);
+ BMK_syntheticTest(cLevel, cLevelLast, additionalParam, compressibility);
else
- BMK_benchFileTable(fileNamesTable, nbFiles, dictFileName, cLevel, cLevelLast);
+ BMK_benchFileTable(fileNamesTable, nbFiles, dictFileName, cLevel, cLevelLast, additionalParam);
return 0;
}
nextArgumentIsMaxDict=0;
unsigned cLevel = 1;
unsigned cLevelLast = 1;
+ int additionalParam = 0;
const char** filenameTable = (const char**)malloc(argCount * sizeof(const char*)); /* argCount >= 1 */
unsigned filenameIdx = 0;
const char* programName = argv[0];
unsigned dictSelect = g_defaultSelectivityLevel;
/* init */
- (void)cLevelLast; (void)dictCLevel; /* not used when ZSTD_NOBENCH / ZSTD_NODICT set */
+ (void)additionalParam; (void)cLevelLast; (void)dictCLevel; /* not used when ZSTD_NOBENCH / ZSTD_NODICT set */
if (filenameTable==NULL) { DISPLAY("not enough memory\n"); exit(1); }
displayOut = stderr;
/* Pick out program name from path. Don't rely on stdlib because of conflicting behavior */
argument++;
while (argument[0]!=0) {
-
/* compression Level */
if ((*argument>='0') && (*argument<='9')) {
cLevel = 0;
dictSelect *= 10, dictSelect += *argument++ - '0';
break;
- /* Pause at the end (hidden option) */
- case 'p': main_pause=1; argument++; break;
-
+ /* Pause at the end (-p) or set an additional param (-p#) (hidden option) */
+ case 'p': argument++;
+ if ((*argument>='0') && (*argument<='9')) {
+ additionalParam = 0;
+ while ((*argument >= '0') && (*argument <= '9'))
+ additionalParam *= 10, additionalParam += *argument++ - '0';
+ continue;
+ }
+ main_pause=1; break;
/* unknown command */
default : return badusage(programName);
}
if (bench) {
#ifndef ZSTD_NOBENCH
BMK_setNotificationLevel(displayLevel);
- BMK_benchFiles(filenameTable, filenameIdx, dictFileName, cLevel, cLevelLast);
+ BMK_benchFiles(filenameTable, filenameIdx, dictFileName, cLevel, cLevelLast, additionalParam);
#endif
goto _end;
}