mirror of
https://github.com/facebook/zstd.git
synced 2026-01-06 11:21:19 +03:00
refactor ZSTD_check_compressionLevel_monotonicIncrease_memoryBudget()
use less macro statements the initial version was meant to work with STATIC_ASSERT but since it doesn't work and needs assert() it's possible to rewrite it using normally compiled code which is better for compiler. Downside : the error message is less precise. There is a DEBUGLOG(3,) to compensate.
This commit is contained in:
@@ -412,7 +412,7 @@ size_t ZSTD_estimateCCtxSize_advanced(ZSTD_compressionParameters cParams);
|
||||
size_t ZSTD_estimateDCtxSize(void);
|
||||
</b><p> These functions make it possible to estimate memory usage
|
||||
of a future {D,C}Ctx, before its creation.
|
||||
ZSTD_estimateCCtxSize() will provide a budget large for any compression level up to selected one.
|
||||
ZSTD_estimateCCtxSize() will provide a budget large enough for any compression level up to selected one.
|
||||
It will also consider src size to be arbitrarily "large", which is worst case.
|
||||
If srcSize is known to always be small, ZSTD_estimateCCtxSize_advanced() can provide a tighter estimation.
|
||||
ZSTD_estimateCCtxSize_advanced() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel.
|
||||
@@ -423,7 +423,7 @@ size_t ZSTD_estimateDCtxSize(void);
|
||||
size_t ZSTD_estimateCStreamSize_advanced(ZSTD_compressionParameters cParams);
|
||||
size_t ZSTD_estimateDStreamSize(size_t windowSize);
|
||||
size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize);
|
||||
</b><p> ZSTD_estimateCStreamSize() will provide a budget large for any compression level up to selected one.
|
||||
</b><p> ZSTD_estimateCStreamSize() will provide a budget large enough for any compression level up to selected one.
|
||||
It will also consider src size to be arbitrarily "large", which is worst case.
|
||||
If srcSize is known to always be small, ZSTD_estimateCStreamSize_advanced() can provide a tighter estimation.
|
||||
ZSTD_estimateCStreamSize_advanced() can be used in tandem with ZSTD_getCParams() to create cParams from compressionLevel.
|
||||
|
||||
@@ -4115,42 +4115,24 @@ static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEV
|
||||
},
|
||||
};
|
||||
|
||||
#if defined(ZSTD_DEBUG) && (ZSTD_DEBUG>=1)
|
||||
/* This function just controls
|
||||
* the monotonic memory budget increase of ZSTD_defaultCParameters[0].
|
||||
* Run only once, on first ZSTD_getCParams() usage, when ZSTD_DEBUG is enabled
|
||||
*/
|
||||
MEM_STATIC void ZSTD_check_compressionLevel_monotonicIncrease_memoryBudget(void)
|
||||
{
|
||||
# define ZSTD_TABLECOST(h,c) ((1<<(h)) + (1<<(c)))
|
||||
# define ZDCP_FIELD(l,field) (ZSTD_defaultCParameters[0][l].field)
|
||||
# define ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(l) { \
|
||||
assert(ZDCP_FIELD(l,windowLog) <= ZDCP_FIELD(l+1,windowLog) ); \
|
||||
assert(ZSTD_TABLECOST(ZDCP_FIELD(l,hashLog), ZDCP_FIELD(l,chainLog)) <= ZSTD_TABLECOST(ZDCP_FIELD(l+1,hashLog), ZDCP_FIELD(l+1,chainLog)) ); \
|
||||
int level;
|
||||
for (level=1; level<ZSTD_maxCLevel(); level++) {
|
||||
ZSTD_compressionParameters const c1 = ZSTD_defaultCParameters[0][level];
|
||||
ZSTD_compressionParameters const c2 = ZSTD_defaultCParameters[0][level+1];
|
||||
DEBUGLOG(3, "controlling compression params level %i", level);
|
||||
assert(c1.windowLog <= c2.windowLog);
|
||||
# define ZSTD_TABLECOST(h,c) ((1<<(h)) + (1<<(c)))
|
||||
assert(ZSTD_TABLECOST(c1.hashLog, c1.chainLog) <= ZSTD_TABLECOST(c2.hashLog, c2.chainLog));
|
||||
}
|
||||
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(1);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(2);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(3);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(4);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(5);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(6);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(7);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(8);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(9);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(10);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(11);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(12);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(13);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(14);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(15);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(16);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(17);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(18);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(19);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(20);
|
||||
ZSTD_CHECK_MONOTONIC_INCREASE_LEVEL(21);
|
||||
assert(ZSTD_maxCLevel()==22);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*! ZSTD_getCParams() :
|
||||
* @return ZSTD_compressionParameters structure for a selected compression level, `srcSize` and `dictSize`.
|
||||
|
||||
Reference in New Issue
Block a user