diff --git a/lib/IMAP/Threading/ThreadBuilder.php b/lib/IMAP/Threading/ThreadBuilder.php index 15012c6ac6..ae5f906685 100644 --- a/lib/IMAP/Threading/ThreadBuilder.php +++ b/lib/IMAP/Threading/ThreadBuilder.php @@ -25,32 +25,48 @@ namespace OCA\Mail\IMAP\Threading; +use OCA\Mail\Support\PerformanceLogger; use function array_key_exists; use function count; class ThreadBuilder { + /** @var PerformanceLogger */ + private $performanceLogger; + + public function __construct(PerformanceLogger $performanceLogger) { + $this->performanceLogger = $performanceLogger; + } + /** * @param Message[] $messages * * @return Container[] */ public function build(array $messages): array { + $log = $this->performanceLogger->start('Threading ' . count($messages) . ' messages'); + // Step 1 $idTable = $this->buildIdTable($messages); + $log->step('build ID table'); // Step 2 $rootContainer = $this->buildRootContainer($idTable); + $log->step('build root container'); // Step 3 unset($idTable); + $log->step('free ID table'); // Step 4 $this->pruneContainers($rootContainer); + $log->step('prune containers'); // Step 5 $this->groupBySubject($rootContainer); + $log->step('group by subject'); + $log->end(); // Return the children with reset numeric keys return array_values($rootContainer->getChildren()); } diff --git a/tests/Unit/IMAP/Threading/ThreadBuilderTest.php b/tests/Unit/IMAP/Threading/ThreadBuilderTest.php index 649600b450..87189ed029 100644 --- a/tests/Unit/IMAP/Threading/ThreadBuilderTest.php +++ b/tests/Unit/IMAP/Threading/ThreadBuilderTest.php @@ -29,17 +29,25 @@ use OCA\Mail\IMAP\Threading\Container; use OCA\Mail\IMAP\Threading\Message; use OCA\Mail\IMAP\Threading\ThreadBuilder; -use function array_values; +use OCA\Mail\Support\PerformanceLogger; +use PHPUnit\Framework\MockObject\MockObject; class ThreadBuilderTest extends TestCase { + /** @var PerformanceLogger|MockObject */ + private $performanceLogger; + /** @var ThreadBuilder */ private $builder; protected function setUp(): void { parent::setUp(); - $this->builder = new ThreadBuilder(); + $this->performanceLogger = $this->createMock(PerformanceLogger::class); + + $this->builder = new ThreadBuilder( + $this->performanceLogger + ); } /**