diff --git a/src/Symfony/Component/Stopwatch/Stopwatch.php b/src/Symfony/Component/Stopwatch/Stopwatch.php index 8631cf89273b2..db23959777279 100644 --- a/src/Symfony/Component/Stopwatch/Stopwatch.php +++ b/src/Symfony/Component/Stopwatch/Stopwatch.php @@ -125,6 +125,18 @@ public function lap($name) return end($this->activeSections)->stopEvent($name)->start(); } + /** + * Returns a specific event by name + * + * @param string $name The event name + * + * @return StopwatchEvent A StopwatchEvent instance + */ + public function getEvent($name) + { + return end($this->activeSections)->getEvent($name); + } + /** * Gets all events for a given section. * @@ -293,6 +305,24 @@ public function lap($name) return $this->stopEvent($name)->start(); } + /** + * Returns a specific event by name + * + * @param string $name The event name + * + * @return StopwatchEvent The event + * + * @throws \LogicException When the event is not known + */ + public function getEvent($name) + { + if (!isset($this->events[$name])) { + throw new \LogicException(sprintf('Event "%s" is not known.', $name)); + } + + return $this->events[$name]; + } + /** * Returns the events from this section. * diff --git a/src/Symfony/Component/Stopwatch/StopwatchEvent.php b/src/Symfony/Component/Stopwatch/StopwatchEvent.php index 41d7279e35824..eec98793de6d0 100644 --- a/src/Symfony/Component/Stopwatch/StopwatchEvent.php +++ b/src/Symfony/Component/Stopwatch/StopwatchEvent.php @@ -171,8 +171,17 @@ public function getEndTime() */ public function getDuration() { + $periods = $this->periods; + $stopped = count($periods); + $left = count($this->started) - $stopped; + + for ($i = 0; $i < $left; $i++) { + $index = $stopped + $i; + $periods[] = new StopwatchPeriod($this->started[$index], $this->getNow()); + } + $total = 0; - foreach ($this->periods as $period) { + foreach ($periods as $period) { $total += $period->getDuration(); } diff --git a/src/Symfony/Component/Stopwatch/Tests/StopwatchEventTest.php b/src/Symfony/Component/Stopwatch/Tests/StopwatchEventTest.php index af63153382af5..67a381ca2d1a0 100644 --- a/src/Symfony/Component/Stopwatch/Tests/StopwatchEventTest.php +++ b/src/Symfony/Component/Stopwatch/Tests/StopwatchEventTest.php @@ -82,6 +82,22 @@ public function testDuration() $this->assertEquals(200, $event->getDuration(), null, self::DELTA); } + public function testDurationBeforeStop() + { + $event = new StopwatchEvent(microtime(true) * 1000); + $event->start(); + usleep(200000); + $this->assertEquals(200, $event->getDuration(), null, self::DELTA); + + $event = new StopwatchEvent(microtime(true) * 1000); + $event->start(); + usleep(100000); + $event->stop(); + $event->start(); + usleep(100000); + $this->assertEquals(100, $event->getDuration(), null, self::DELTA); + } + /** * @expectedException \LogicException */ diff --git a/src/Symfony/Component/Stopwatch/Tests/StopwatchTest.php b/src/Symfony/Component/Stopwatch/Tests/StopwatchTest.php index a8c11424fa917..09be9d27956a9 100644 --- a/src/Symfony/Component/Stopwatch/Tests/StopwatchTest.php +++ b/src/Symfony/Component/Stopwatch/Tests/StopwatchTest.php @@ -29,6 +29,7 @@ public function testStart() $this->assertInstanceof('Symfony\Component\Stopwatch\StopwatchEvent', $event); $this->assertEquals('cat', $event->getCategory()); + $this->assertSame($event, $stopwatch->getEvent('foo')); } public function testIsStarted() @@ -92,6 +93,15 @@ public function testLap() $this->assertEquals(200, $event->getDuration(), null, self::DELTA); } + /** + * @expectedException \LogicException + */ + public function testUnknownEvent() + { + $stopwatch = new Stopwatch(); + $stopwatch->getEvent('foo'); + } + /** * @expectedException \LogicException */ pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy