startTime = microtime(true); $this->startMemory = memory_get_usage(); } public function end(): void { if ($this->endTime === null) { $this->endTime = microtime(true); $this->endMemory = memory_get_usage(); } } public function isCompleted(): bool { return $this->endTime !== null; } public function getLabel(): string { return $this->label; } public function getCategory(): PerformanceCategory { return $this->category; } public function getDurationMs(): float { if ($this->endTime === null) { return 0.0; } return ($this->endTime - $this->startTime) * 1000; } public function getMemoryUsageMb(): float { if ($this->endMemory === null) { return 0.0; } return ($this->endMemory - $this->startMemory) / 1024 / 1024; } public function getStartTime(): float { return $this->startTime; } public function getEndTime(): ?float { return $this->endTime; } public function getStartMemory(): int { return $this->startMemory; } public function getEndMemory(): ?int { return $this->endMemory; } }