$durationsByFile * @return list> */ public static function slowestEntries(array $durationsByFile, string $laneId): array { $entries = array_values(array_map( static fn (float $seconds, string $filePath): array => [ 'label' => $filePath.'::synthetic', 'subject' => $filePath.'::synthetic', 'filePath' => $filePath, 'durationSeconds' => $seconds, 'wallClockSeconds' => $seconds, 'laneId' => $laneId, ], $durationsByFile, array_keys($durationsByFile), )); usort($entries, static fn (array $left, array $right): int => $right['wallClockSeconds'] <=> $left['wallClockSeconds']); return $entries; } /** * @param array $durationsByFile * @param array|null $ciContext * @return array */ public static function buildReport( string $laneId, float $wallClockSeconds, array $durationsByFile = [], ?string $artifactDirectory = null, ?array $ciContext = null, ?string $comparisonProfile = null, ): array { return TestLaneReport::buildReport( laneId: $laneId, wallClockSeconds: $wallClockSeconds, slowestEntries: self::slowestEntries($durationsByFile, $laneId), durationsByFile: $durationsByFile, artifactDirectory: $artifactDirectory, comparisonProfile: $comparisonProfile, ciContext: $ciContext, ); } /** * @param array $artifact */ public static function writeTrendHistory(string $laneId, array $artifact, ?string $artifactDirectory = null): string { $artifactPaths = TestLaneReport::artifactPaths($laneId, $artifactDirectory); $absolutePath = TestLaneManifest::absolutePath($artifactPaths['trendHistory']); $directory = dirname($absolutePath); if (! is_dir($directory)) { mkdir($directory, 0777, true); } file_put_contents($absolutePath, json_encode($artifact, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR)); return $absolutePath; } /** * @return array */ public static function readTrendHistory(string $laneId, ?string $artifactDirectory = null): array { $artifactPaths = TestLaneReport::artifactPaths($laneId, $artifactDirectory); $absolutePath = TestLaneManifest::absolutePath($artifactPaths['trendHistory']); if (! is_file($absolutePath)) { return []; } $decoded = json_decode((string) file_get_contents($absolutePath), true); return is_array($decoded) ? $decoded : []; } }