⊛ ARPerformanceScout ⊛ is a slim tool for discovering Objective-C performance bottlenecks.
- Determine if a piece of code is blocking the UI.
- Test performance when code execution jumps from one thread to another.
- Experiment with multi-threaded programming.
This tool is in the very early stages of the development, so things will break and do random crazy stuff. Still trying to get the API right and then push it in a single direction. If you have any ideas, opinions or rants I'd love to hear them!
- Download ARPerfomanceScout and try out the examples
- Read this documentation
In the source code:
/* Measures the time taken to run a piece of code on the current thread */
ARpS_measure(^{
[self writeSomethingToAFile_blocksTheUI];
});
The resulting log message:
≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌
⊛ ARPerformanceScout ⊛
✔ Measured: 2.512919s
≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌
When in doubt if a method is blocking the UI or not, calling ARpS_blockThread()
makes it obvious very quickly.
/* blocks the current thread for 3 seconds */
ARpS_blockThread(3);
When two pieces of code from very different parts of the app need to be timed, ARpS_startTimer()
and ARpS_stopTimerAndLog()
can help.
Calling the two functions:
/* FirstSourceFile.m */
- (void)firstDummyMethod {
...
ARpS_startTimer();
}
/* SecondSourceFile.m */
- (void)secondDummyMethod {
...
ARpS_stopTimerAndLog();
}
Results in a log:
≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌
⊛ ARPerformanceScout ⊛
✔ Timed: 15.291372s
≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌≌
ARpS
uses a block-based API so one should be careful about retain-cycles (the weakSelf code-snippet is a good friend to have.)ARpS_measure()
will only take into account work being done on the thread it's calledARpS_startTimer()
andARpS_stopTimerAndLog()
don't work well (YET) when called on separate threadsXCode's Time Profiler
is a more precise tool for performance bottleneck discovery.ARPerformanceScout
is intended to be used with very short iteration cycles and as a guide only
Claudiu-Vlad Ursache
Artsy
ARPerformanceScout is available under the MIT license. See the LICENSE file for more info.