From 81eb494fc24003c15db62f6b8234c672b669231f Mon Sep 17 00:00:00 2001 From: Ellie Schaffer Date: Wed, 12 Nov 2025 21:59:09 -0500 Subject: [PATCH] [Cache] Recognize commit events as writes in `CacheDataCollector` --- DataCollector/CacheDataCollector.php | 2 + .../DataCollector/CacheDataCollectorTest.php | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/DataCollector/CacheDataCollector.php b/DataCollector/CacheDataCollector.php index 22a5a03..73886cb 100644 --- a/DataCollector/CacheDataCollector.php +++ b/DataCollector/CacheDataCollector.php @@ -143,6 +143,8 @@ class CacheDataCollector extends DataCollector implements LateDataCollectorInter } } elseif ('save' === $call->name) { ++$statistics[$name]['writes']; + } elseif ('saveDeferred' === $call->name) { + ++$statistics[$name]['writes']; } elseif ('deleteItem' === $call->name) { ++$statistics[$name]['deletes']; } diff --git a/Tests/DataCollector/CacheDataCollectorTest.php b/Tests/DataCollector/CacheDataCollectorTest.php index 7a2f36a..d7e1af0 100644 --- a/Tests/DataCollector/CacheDataCollectorTest.php +++ b/Tests/DataCollector/CacheDataCollectorTest.php @@ -86,6 +86,46 @@ class CacheDataCollectorTest extends TestCase $this->assertEquals($statistics[self::INSTANCE_NAME]['writes'], 1, 'writes'); } + public function testSaveDeferredEventWithoutExplicitCommitDataCollector() + { + $traceableAdapterEvent = new \stdClass(); + $traceableAdapterEvent->name = 'saveDeferred'; + $traceableAdapterEvent->start = 0; + $traceableAdapterEvent->end = 0; + + $statistics = $this->getCacheDataCollectorStatisticsFromEvents([$traceableAdapterEvent]); + + $this->assertSame(1, $statistics[self::INSTANCE_NAME]['calls'], 'calls'); + $this->assertSame(0, $statistics[self::INSTANCE_NAME]['reads'], 'reads'); + $this->assertSame(0, $statistics[self::INSTANCE_NAME]['hits'], 'hits'); + $this->assertSame(0, $statistics[self::INSTANCE_NAME]['misses'], 'misses'); + $this->assertSame(1, $statistics[self::INSTANCE_NAME]['writes'], 'writes'); + } + + public function testSaveDeferredEventWithExplicitCommitDataCollector() + { + $traceableAdapterSaveDeferredEvent = new \stdClass(); + $traceableAdapterSaveDeferredEvent->name = 'saveDeferred'; + $traceableAdapterSaveDeferredEvent->start = 0; + $traceableAdapterSaveDeferredEvent->end = 0; + + $traceableAdapterCommitEvent = new \stdClass(); + $traceableAdapterCommitEvent->name = 'commit'; + $traceableAdapterCommitEvent->start = 0; + $traceableAdapterCommitEvent->end = 0; + + $statistics = $this->getCacheDataCollectorStatisticsFromEvents([ + $traceableAdapterSaveDeferredEvent, + $traceableAdapterCommitEvent, + ]); + + $this->assertSame(2, $statistics[self::INSTANCE_NAME]['calls'], 'calls'); + $this->assertSame(0, $statistics[self::INSTANCE_NAME]['reads'], 'reads'); + $this->assertSame(0, $statistics[self::INSTANCE_NAME]['hits'], 'hits'); + $this->assertSame(0, $statistics[self::INSTANCE_NAME]['misses'], 'misses'); + $this->assertSame(1, $statistics[self::INSTANCE_NAME]['writes'], 'writes'); + } + public function testCollectBeforeEnd() { $adapter = new TraceableAdapter(new NullAdapter());