-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Feature for Timer to measure callable performance #6321
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
MGatner
merged 15 commits into
codeigniter4:4.3
from
rumpfc:feature-timer-record-callable
Aug 5, 2022
Merged
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
bf7c6bc
Add Timer method record for callables
rumpfc ba1cc5c
Code fixes
rumpfc 22194d0
Changelogs and user guide
rumpfc 3dbcc7f
CS-Fixer changes
rumpfc 838995b
Fixed CS-Fixer style issues
rumpfc a47411b
Unit test fixes for v7, added more new lines
rumpfc 9603cea
Further CS-Fixer changes
rumpfc 66d271c
Changes according to Reviews
rumpfc 70e5e64
Merge branch '4.3' into feature-timer-record-callable
rumpfc be61a5d
Improved unit tests, style and docu
rumpfc b5d5591
reduced sleep time in unit tests
rumpfc 0a032d1
Merge branch '4.3' into feature-timer-record-callable
rumpfc 5512618
Removed whitespaces in blank line
rumpfc 9a0ad26
PHP version specific test
rumpfc 4a122f3
Fixed CS
rumpfc File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<?php | ||
|
||
$benchmark->record('slow_function', static function () { slow_function('...'); }); | ||
|
||
/* | ||
* Same as: | ||
* | ||
* $benchmark->start('slow_function'); | ||
* slow_function('...'); | ||
* $benchmark->stop('slow_function'); | ||
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<?php | ||
|
||
$length = $benchmark->record('string length', static fn () => strlen('CI4')); | ||
|
||
/* | ||
* $length = 3 | ||
* | ||
* Same as: | ||
* | ||
* $benchmark->start('string length'); | ||
* $length = strlen('CI4'); | ||
* $benchmark->stop('string length'); | ||
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<?php | ||
|
||
$length = timer('string length', static fn () => strlen('CI4')); | ||
|
||
/* | ||
* $length = 3 | ||
* | ||
* Same as: | ||
* | ||
* timer('string length'); | ||
* $length = strlen('CI4'); | ||
* timer('string length'); | ||
*/ |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have a question. If by mistake I made the callable throw an exception, then how can I get the elapsed time since
$this->stop($name)
will not be called? Should the invocation of the callable be wrapped in atry-finally
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If an exception is thrown and you don't catch it, then I think you might have other problems than worrying about the time stoppage.
But you also have a point. It does not handle the case of purposely catching exceptions for error handling.
@kenjis shall we cover this case as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What if an exception is thrown after
$benchmark->start()
or in$iterator->run()
?Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For
$iterator->run()
, nothing is caught internally. It would not record anything in the report and would go out of the method, ignoring all follow up Closures.For
$benchmark->start()
, you would need to callstop()
inside thecatch
orfinally
block.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we need
try-finally
.An exception should be thrown in an exceptional case, and not recoverable.
Normally, a developer would modify the code to prevent the exception from occurring.
If a developer really wants to know the elapsed time when an exception is thrown, they can catch and measure it by themselves.