Skip to content

Commit 6ef0777

Browse files
Add JIT cache statistics (#20)
1 parent 522e2f2 commit 6ef0777

6 files changed

Lines changed: 118 additions & 11 deletions

File tree

config/services.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<service id="PabloK\CacheStatsBundle\Application\StatsProvider\RealPathProvider" public="false" />
99
<service id="PabloK\CacheStatsBundle\Application\StatsProvider\OpcacheProvider" public="false" />
1010
<service id="PabloK\CacheStatsBundle\Application\StatsProvider\ApcuProvider" public="false" />
11+
<service id="PabloK\CacheStatsBundle\Application\StatsProvider\JitProvider" public="false" />
1112

1213
<service
1314
id="PabloK\CacheStatsBundle\DataCollector\CacheStatsDataCollector"
@@ -28,6 +29,11 @@
2829
key="$apcuProvider"
2930
type="service"
3031
/>
32+
<argument
33+
id="PabloK\CacheStatsBundle\Application\StatsProvider\JitProvider"
34+
key="$jitProvider"
35+
type="service"
36+
/>
3137

3238
<tag
3339
name="data_collector"
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PabloK\CacheStatsBundle\Application\StatsProvider;
6+
7+
use PabloK\CacheStatsBundle\Application\Size;
8+
9+
final class JitProvider
10+
{
11+
public function provide(): JitStats
12+
{
13+
$opcacheEnabled = \filter_var(\ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN);
14+
$jitEnabled = false;
15+
$jitOn = false;
16+
$bufferSize = Size::nullSize();
17+
$bufferFree = Size::nullSize();
18+
19+
if ($opcacheEnabled) {
20+
$jitStatus = \opcache_get_status(false)['jit'] ?? [];
21+
$jitEnabled = \filter_var($jitStatus['enabled'] ?? false, \FILTER_VALIDATE_BOOLEAN);
22+
$jitOn = \filter_var($jitStatus['on'] ?? false, \FILTER_VALIDATE_BOOLEAN);
23+
24+
if ($jitEnabled && $jitOn) {
25+
$bufferSize = Size::fromBytes($jitStatus['buffer_size'] ?? 0);
26+
$bufferFree = Size::fromBytes($jitStatus['buffer_free'] ?? 0);
27+
}
28+
}
29+
30+
return new JitStats(
31+
$jitEnabled && $jitOn,
32+
$bufferSize,
33+
$bufferFree,
34+
);
35+
}
36+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PabloK\CacheStatsBundle\Application\StatsProvider;
6+
7+
use PabloK\CacheStatsBundle\Application\Size;
8+
9+
final class JitStats
10+
{
11+
private bool $enabled;
12+
private Size $bufferSize;
13+
private Size $bufferUsage;
14+
15+
public function __construct(
16+
bool $enabled,
17+
Size $bufferSize,
18+
Size $bufferFree
19+
) {
20+
$this->enabled = $enabled;
21+
$this->bufferSize = $bufferSize;
22+
$this->bufferUsage = $bufferSize->subtract($bufferFree);
23+
}
24+
25+
public function enabled(): bool
26+
{
27+
return $this->enabled;
28+
}
29+
30+
public function bufferSize(): Size
31+
{
32+
return $this->bufferSize;
33+
}
34+
35+
public function bufferUsage(): Size
36+
{
37+
return $this->bufferUsage;
38+
}
39+
}

src/DataCollector/CacheStatsDataCollector.php

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
use PabloK\CacheStatsBundle\Application\StatsProvider\ApcuProvider;
88
use PabloK\CacheStatsBundle\Application\StatsProvider\ApcuStats;
9+
use PabloK\CacheStatsBundle\Application\StatsProvider\JitProvider;
10+
use PabloK\CacheStatsBundle\Application\StatsProvider\JitStats;
911
use PabloK\CacheStatsBundle\Application\StatsProvider\OpcacheProvider;
1012
use PabloK\CacheStatsBundle\Application\StatsProvider\OpcacheStats;
1113
use PabloK\CacheStatsBundle\Application\StatsProvider\RealPathProvider;
@@ -19,45 +21,49 @@ final class CacheStatsDataCollector extends DataCollector
1921
private const REAL_PATH_KEY = 'realpath';
2022
private const OPCACHE_KEY = 'opcache';
2123
private const APCU_KEY = 'apcu';
24+
private const JIT_KEY = 'jit';
2225

23-
/** @var RealPathProvider */
24-
private $realPathProvider;
25-
/** @var OpcacheProvider */
26-
private $opcacheProvider;
27-
/** @var ApcuProvider */
28-
private $apcuProvider;
26+
private RealPathProvider $realPathProvider;
27+
private OpcacheProvider $opcacheProvider;
28+
private ApcuProvider $apcuProvider;
29+
private JitProvider $jitProvider;
2930

3031
public function __construct(
3132
RealPathProvider $realPathProvider,
3233
OpcacheProvider $opcacheProvider,
33-
ApcuProvider $apcuProvider
34+
ApcuProvider $apcuProvider,
35+
JitProvider $jitProvider
3436
) {
3537
$this->realPathProvider = $realPathProvider;
3638
$this->opcacheProvider = $opcacheProvider;
3739
$this->apcuProvider = $apcuProvider;
40+
$this->jitProvider = $jitProvider;
3841
}
3942

4043
/**
4144
* @inheritDoc
4245
* @param null|\Throwable $exception
4346
*/
44-
public function collect(Request $request, Response $response, $exception = null)
47+
public function collect(Request $request, Response $response, $exception = null): void
4548
{
4649
$this->data[self::REAL_PATH_KEY] = $this->realPathProvider
4750
->provide();
4851
$this->data[self::OPCACHE_KEY] = $this->opcacheProvider
4952
->provide();
5053
$this->data[self::APCU_KEY] = $this->apcuProvider
5154
->provide();
55+
$this->data[self::JIT_KEY] = $this->jitProvider
56+
->provide()
57+
;
5258
}
5359

5460
/** @inheritDoc */
55-
public function getName()
61+
public function getName(): string
5662
{
5763
return 'pablok.cache_stats_bundle.cache_stats_collector';
5864
}
5965

60-
public function reset()
66+
public function reset(): void
6167
{
6268
$this->data = [];
6369
}
@@ -76,4 +82,9 @@ public function apcuStats(): ApcuStats
7682
{
7783
return $this->data[self::APCU_KEY];
7884
}
85+
86+
public function jitStats(): JitStats
87+
{
88+
return $this->data[self::JIT_KEY];
89+
}
7990
}

src/DependencyInjection/PabloKCacheStatsExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
final class PabloKCacheStatsExtension extends Extension
1313
{
14-
public function load(array $configs, ContainerBuilder $container)
14+
public function load(array $configs, ContainerBuilder $container): void
1515
{
1616
$directory = \dirname(__DIR__, 2);
1717
$fileLocator = new FileLocator("{$directory}/config");

src/Resources/views/cache_stats.html.twig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,21 @@
4747
{% endif %}
4848
</div>
4949

50+
{% set jitEnabled = collector.jitStats.enabled %}
51+
<div class="sf-toolbar-info-group">
52+
{{ macros.toolbar_Header('JIT cache', jitEnabled) }}
53+
54+
{% if jitEnabled %}
55+
{{
56+
macros.megabytes_row(
57+
'Cache usage',
58+
collector.jitStats.bufferUsage.asMegabytes,
59+
collector.jitStats.bufferSize.asMegabytes
60+
)
61+
}}
62+
{% endif %}
63+
</div>
64+
5065
{% set realPathEnabled = collector.realPathStats.enabled %}
5166
<div class="sf-toolbar-info-group">
5267
{{ macros.toolbar_Header('Realpath', realPathEnabled) }}

0 commit comments

Comments
 (0)