&adv);
}
-static BMK_benchOutcome_t BMK_benchCLevel(
+/* @return: 0 on success, !0 if error */
+static int BMK_benchCLevels(
const void* srcBuffer,
size_t benchedSize,
const size_t* fileSizes,
unsigned nbFiles,
- int cLevel,
+ int startCLevel, int endCLevel,
const ZSTD_compressionParameters* comprParams,
const void* dictBuffer,
size_t dictBufferSize,
const char* displayName,
BMK_advancedParams_t const* const adv)
{
+ int level;
const char* pch = strrchr(displayName, '\\'); /* Windows */
if (!pch)
pch = strrchr(displayName, '/'); /* Linux */
if (pch)
displayName = pch + 1;
+ if (endCLevel > ZSTD_maxCLevel()) {
+ DISPLAYLEVEL(1, "Invalid Compression Level \n");
+ return 15;
+ }
+ if (endCLevel < startCLevel) {
+ DISPLAYLEVEL(1, "Invalid Compression Level Range \n");
+ return 15;
+ }
+
if (adv->realTime) {
DISPLAYLEVEL(2, "Note : switching to real-time priority \n");
SET_REALTIME_PRIORITY;
adv->nbSeconds,
(unsigned)(adv->blockSize >> 10));
- return BMK_benchMemAdvanced(
+ for (level = startCLevel; level <= endCLevel; level++) {
+ BMK_benchOutcome_t res = BMK_benchMemAdvanced(
srcBuffer,
benchedSize,
NULL,
0,
fileSizes,
nbFiles,
- cLevel,
+ level,
comprParams,
dictBuffer,
dictBufferSize,
displayLevel,
displayName,
adv);
+ if (!BMK_isSuccessful_benchOutcome(res)) return 1;
+ }
+ return 0;
}
int BMK_syntheticTest(
- int cLevel,
double compressibility,
+ int startingCLevel, int endCLevel,
const ZSTD_compressionParameters* compressionParams,
int displayLevel,
const BMK_advancedParams_t* adv)
char nameBuff[20] = { 0 };
const char* name = nameBuff;
size_t const benchedSize = adv->blockSize ? adv->blockSize : 10000000;
- void* srcBuffer;
- BMK_benchOutcome_t res;
-
- if (cLevel > ZSTD_maxCLevel()) {
- DISPLAYLEVEL(1, "Invalid Compression Level");
- return 15;
- }
/* Memory allocation */
- srcBuffer = malloc(benchedSize);
+ void* const srcBuffer = malloc(benchedSize);
if (!srcBuffer) {
- DISPLAYLEVEL(1, "allocation error : not enough memory");
+ DISPLAYLEVEL(1, "allocation error : not enough memory \n");
return 16;
}
}
/* Bench */
- res = BMK_benchCLevel(
- srcBuffer,
- benchedSize,
- &benchedSize /* ? */,
- 1 /* ? */,
- cLevel,
- compressionParams,
- NULL,
- 0, /* dictionary */
- displayLevel,
- name,
- adv);
-
- /* clean up */
- free(srcBuffer);
-
- return !BMK_isSuccessful_benchOutcome(res);
+ { int res = BMK_benchCLevels(
+ srcBuffer,
+ benchedSize,
+ &benchedSize,
+ 1,
+ startingCLevel, endCLevel,
+ compressionParams,
+ NULL,
+ 0, /* dictionary */
+ displayLevel,
+ name,
+ adv);
+ free(srcBuffer);
+ return res;
+ }
}
static size_t BMK_findMaxMem(U64 requiredMem)
const char* const* fileNamesTable,
unsigned nbFiles,
const char* dictFileName,
- int cLevel,
+ int startCLevel, int endCLevel,
const ZSTD_compressionParameters* compressionParams,
int displayLevel,
const BMK_advancedParams_t* adv)
void* dictBuffer = NULL;
size_t dictBufferSize = 0;
size_t* fileSizes = NULL;
- BMK_benchOutcome_t res;
+ int res = 1;
U64 const totalSizeToLoad = UTIL_getTotalFileSize(fileNamesTable, nbFiles);
if (!nbFiles) {
return 13;
}
- if (cLevel > ZSTD_maxCLevel()) {
+ if (endCLevel > ZSTD_maxCLevel()) {
DISPLAYLEVEL(1, "Invalid Compression Level");
return 14;
}
1 /*?*/,
displayLevel);
if (errorCode) {
- res = BMK_benchOutcome_error();
goto _cleanUp;
}
}
nbFiles,
displayLevel);
if (errorCode) {
- res = BMK_benchOutcome_error();
goto _cleanUp;
}
}
{
char mfName[20] = { 0 };
formatString_u(mfName, sizeof(mfName), " %u files", nbFiles);
- {
- const char* const displayName =
+ { const char* const displayName =
(nbFiles > 1) ? mfName : fileNamesTable[0];
- res = BMK_benchCLevel(
+ res = BMK_benchCLevels(
srcBuffer,
benchedSize,
fileSizes,
nbFiles,
- cLevel,
+ startCLevel, endCLevel,
compressionParams,
dictBuffer,
dictBufferSize,
free(srcBuffer);
free(dictBuffer);
free(fileSizes);
- return !BMK_isSuccessful_benchOutcome(res);
+ return res;
}
int BMK_benchFiles(
fileNamesTable,
nbFiles,
dictFileName,
- cLevel,
+ cLevel, cLevel,
compressionParams,
displayLevel,
&adv);
int BMK_benchFilesAdvanced(
const char* const * fileNamesTable, unsigned nbFiles,
const char* dictFileName,
- int cLevel, const ZSTD_compressionParameters* compressionParams,
+ int startCLevel, int endCLevel,
+ const ZSTD_compressionParameters* compressionParams,
int displayLevel, const BMK_advancedParams_t* adv);
/*! BMK_syntheticTest() -- called from zstdcli */
-/* Generates a sample with datagen, using compressibility argument */
-/* @cLevel - compression level to benchmark, errors if invalid
+/* Generates a sample with datagen, using @compressibility argument
+ * @cLevel - compression level to benchmark, errors if invalid
* @compressibility - determines compressibility of sample, range [0.0 - 1.0]
* if @compressibility < 0.0, uses the lorem ipsum generator
* @compressionParams - basic compression Parameters
* @adv - see advanced_Params_t
* @return: 0 on success, !0 on error
*/
-int BMK_syntheticTest(int cLevel, double compressibility,
+int BMK_syntheticTest(double compressibility,
+ int startingCLevel, int endCLevel,
const ZSTD_compressionParameters* compressionParams,
int displayLevel, const BMK_advancedParams_t* adv);
if(separateFiles) {
unsigned i;
for(i = 0; i < filenames->tableSize; i++) {
- int c;
DISPLAYLEVEL(3, "Benchmarking %s \n", filenames->fileNames[i]);
- for(c = cLevel; c <= cLevelLast; c++) {
- operationResult = BMK_benchFilesAdvanced(&filenames->fileNames[i], 1, dictFileName, c, &compressionParams, g_displayLevel, &benchParams);
- } }
+ operationResult = BMK_benchFilesAdvanced(&filenames->fileNames[i], 1, dictFileName, cLevel, cLevelLast, &compressionParams, g_displayLevel, &benchParams);
+ }
} else {
- for(; cLevel <= cLevelLast; cLevel++) {
- operationResult = BMK_benchFilesAdvanced(filenames->fileNames, (unsigned)filenames->tableSize, dictFileName, cLevel, &compressionParams, g_displayLevel, &benchParams);
- } }
+ operationResult = BMK_benchFilesAdvanced(filenames->fileNames, (unsigned)filenames->tableSize, dictFileName, cLevel, cLevelLast, &compressionParams, g_displayLevel, &benchParams);
+ }
} else {
- for(; cLevel <= cLevelLast; cLevel++) {
- operationResult = BMK_syntheticTest(cLevel, compressibility, &compressionParams, g_displayLevel, &benchParams);
- } }
+ operationResult = BMK_syntheticTest(compressibility, cLevel, cLevelLast, &compressionParams, g_displayLevel, &benchParams);
+ }
#else
(void)bench_nbSeconds; (void)blockSize; (void)setRealTimePrio; (void)separateFiles; (void)compressibility;