]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
new variant, sampling by 11
authorYann Collet <cyan@fb.com>
Wed, 23 Oct 2024 18:57:23 +0000 (11:57 -0700)
committerYann Collet <cyan@fb.com>
Thu, 24 Oct 2024 20:17:56 +0000 (13:17 -0700)
lib/compress/zstd_compress.c
lib/compress/zstd_preSplit.c
lib/compress/zstd_preSplit.h

index 437bd1fbecb3fd42fba849607d0f934340cd20aa..f917ca12cf257fec34dc34d56d0da760d7c48c21 100644 (file)
@@ -4507,8 +4507,10 @@ static size_t ZSTD_optimalBlockSize(ZSTD_CCtx* cctx, const void* src, size_t src
     /* dynamic splitting has a cpu cost for analysis,
      * due to that cost it's only used for higher levels */
     if (strat >= ZSTD_btopt)
-        return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl2, cctx->tmpWorkspace, cctx->tmpWkspSize);
+        return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl3, cctx->tmpWorkspace, cctx->tmpWkspSize);
     if (strat >= ZSTD_lazy2)
+        return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl2, cctx->tmpWorkspace, cctx->tmpWkspSize);
+    if (strat >= ZSTD_greedy)
         return ZSTD_splitBlock(src, srcSize, blockSizeMax, split_lvl1, cctx->tmpWorkspace, cctx->tmpWkspSize);
     /* blind split strategy
      * heuristic value, tested as being "generally better".
index c658f6fe571fcc5864c16e3a361d4a693aa2b801..504664d67a72212f51ba07b24b773ee64c599b86 100644 (file)
@@ -68,6 +68,7 @@ FORCE_INLINE_TEMPLATE void addEvents_generic(Fingerprint* fp, const void* src, s
 
 ZSTD_GEN_ADDEVENTS_SAMPLE(1)
 ZSTD_GEN_ADDEVENTS_SAMPLE(5)
+ZSTD_GEN_ADDEVENTS_SAMPLE(11)
 
 
 typedef void (*addEvents_f)(Fingerprint* fp, const void* src, size_t srcSize);
@@ -173,9 +174,12 @@ size_t ZSTD_splitBlock(const void* src, size_t srcSize,
                     size_t blockSizeMax, ZSTD_SplitBlock_strategy_e splitStrat,
                     void* workspace, size_t wkspSize)
 {
-    if (splitStrat == split_lvl2)
+    if (splitStrat == split_lvl3)
         return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(1), workspace, wkspSize);
 
+    if (splitStrat == split_lvl2)
+        return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(5), workspace, wkspSize);
+
     assert(splitStrat == split_lvl1);
-    return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(5), workspace, wkspSize);
+    return ZSTD_splitBlock_byChunks(src, srcSize, blockSizeMax, ADDEVENTS_RATE(11), workspace, wkspSize);
 }
index 2c87d34a698ed4910ac0108681a109ecb1b944f4..19ad337b0ae5e67352083c804b9609eaa79b1b95 100644 (file)
@@ -17,7 +17,7 @@
 extern "C" {
 #endif
 
-typedef enum { split_lvl1, split_lvl2 } ZSTD_SplitBlock_strategy_e;
+typedef enum { split_lvl1, split_lvl2, split_lvl3 } ZSTD_SplitBlock_strategy_e;
 
 #define ZSTD_SLIPBLOCK_WORKSPACESIZE 8208