Skip to content

Commit 677ba80

Browse files
committed
configurable compression level for apcu
1 parent 3718566 commit 677ba80

3 files changed

Lines changed: 43 additions & 1 deletion

File tree

brotli.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,12 @@ PHP_INI_BEGIN()
784784
STD_PHP_INI_ENTRY("brotli.output_compression_dict", "",
785785
PHP_INI_ALL, OnUpdateString, output_compression_dict,
786786
zend_brotli_globals, brotli_globals)
787+
#if defined(HAVE_APCU_SUPPORT)
788+
STD_PHP_INI_ENTRY("brotli.apcu_compression_level",
789+
TOSTRING(BROTLI_DEFAULT_QUALITY),
790+
PHP_INI_ALL, OnUpdateLong, apcu_compression_level,
791+
zend_brotli_globals, brotli_globals)
792+
#endif
787793
PHP_INI_END()
788794

789795
static void php_brotli_init_globals(zend_brotli_globals *brotli_globals)
@@ -1452,6 +1458,7 @@ ZEND_MINFO_FUNCTION(brotli)
14521458
php_info_print_table_row(2, "APCu serializer ABI", APC_SERIALIZER_ABI);
14531459
#endif
14541460
php_info_print_table_end();
1461+
DISPLAY_INI_ENTRIES();
14551462
}
14561463

14571464
#if defined(HAVE_APCU_SUPPORT)
@@ -1837,11 +1844,16 @@ static ZEND_FUNCTION(brotli_uncompress_add)
18371844
static int APC_SERIALIZER_NAME(brotli)(APC_SERIALIZER_ARGS)
18381845
{
18391846
int result;
1840-
int lgwin = BROTLI_DEFAULT_WINDOW, level = BROTLI_DEFAULT_QUALITY;
1847+
int lgwin = BROTLI_DEFAULT_WINDOW;
1848+
long level = BROTLI_G(apcu_compression_level);
18411849
php_serialize_data_t var_hash;
18421850
smart_str var = {0};
18431851
BrotliEncoderMode mode = BROTLI_MODE_GENERIC;
18441852

1853+
if (level < BROTLI_MIN_QUALITY || level > BROTLI_MAX_QUALITY) {
1854+
level = BROTLI_DEFAULT_QUALITY;
1855+
}
1856+
18451857
PHP_VAR_SERIALIZE_INIT(var_hash);
18461858
php_var_serialize(&var, (zval*) value, &var_hash);
18471859
PHP_VAR_SERIALIZE_DESTROY(var_hash);

php_brotli.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ extern zend_module_entry brotli_module_entry;
3030
typedef struct _php_brotli_context php_brotli_context;
3131

3232
ZEND_BEGIN_MODULE_GLOBALS(brotli)
33+
#if defined(HAVE_APCU_SUPPORT)
34+
zend_long apcu_compression_level;
35+
#endif
3336
zend_long output_compression;
3437
zend_long output_compression_default;
3538
zend_long output_compression_level;

tests/apcu_serializer.phpt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,32 @@ var_dump($unserialized);
6565
if ($unserialized[0] === $unserialized[1]) {
6666
echo "SAME\n";
6767
}
68+
69+
function getEntrySize(string $key) {
70+
$info = apcu_cache_info();
71+
if (!is_array($info) || !isset($info['cache_list']) || !is_array($info['cache_list'])) {
72+
return null;
73+
}
74+
foreach($info['cache_list'] as $entry) {
75+
if (($entry['info'] ?? null) === $key) {
76+
return $entry['mem_size'];
77+
}
78+
}
79+
return null;
80+
}
81+
include(dirname(__FILE__) . '/data.inc');
82+
83+
ini_set('brotli.apcu_compression_level', BROTLI_COMPRESS_LEVEL_MIN);
84+
apcu_store('size_test', [$data]);
85+
$a = getEntrySize('size_test');
86+
87+
ini_set('brotli.apcu_compression_level', BROTLI_COMPRESS_LEVEL_MAX);
88+
apcu_store('size_test', [$data]);
89+
$b = getEntrySize('size_test');
90+
91+
if ($a !== null && $b !== null && $b < $a) {
92+
echo "SMALLER\n";
93+
}
6894
?>
6995
--EXPECTF--
7096
brotli
@@ -104,3 +130,4 @@ array(2) {
104130
}
105131
}
106132
SAME
133+
SMALLER

0 commit comments

Comments
 (0)