
æŠèŠUSSã€ã³ãã£ã¢ãBB-1ã1910幎ã®ãã¬ãŒãã ãã®ä»æãã¯10453ãã³ã®ææ°Žéã§è¹ã®é床ãèœãšãã¯ãã§ãã
ãªãªãžãã«ïŒ iOSã¢ããªã®ããã©ãŒãã³ã¹ïŒæ¥œåšãšãã®å
æçš¿è ïŒã€ãŽãŒã«M
ãŠãŒã¶ãŒã¯åŸ ã¡ãããªãã 圌ãã¯ãã¢ããªã±ãŒã·ã§ã³ãåæåããå¿ èŠã®ãããã®ãæ°ã«ããïŒãããã¹ãã§ã¯ãããŸããïŒãã§ããã ãæ©ãã¿ã¹ã¯ãå®äºãããã ãã§ãã ã¢ããªã±ãŒã·ã§ã³ã¯ã»ãŒç¬æã«èµ·åããã€ã³ã¿ãŒãã§ã€ã¹ã¯ã¹ã ãŒãºã«ç§»è¡ããŠçŸãããªããã°ãªããŸããã ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã¯ã競äºã®æ¿ãããœãããŠã§ã¢åžå Žã«ãããéèŠãªå©ç¹ã®1ã€ã§ãã
éçºè ãšããŠããã¢ããªã±ãŒã·ã§ã³ãèªãã«æã£ãŠããŸãã
ãã ããããã©ãŒãã³ã¹ã®æé©åã¯è€éãªåé¡ã§ãã ã»ãšãã©ã®ããã«ããã¯ã¯åžžèã«åããŠããŸãã é©åãªæž¬å®å€ããªãå Žåãã¢ããªã±ãŒã·ã§ã³ã®é床ãäœäžããåå ãç解ããããšã¯éåžžã«å°é£ã§ãã
ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããã«ã¯ãããŒã¿ããŒã¹ã«åºã¥ããææ決å®ãè¡ãå¿ èŠããããŸãã ãã®ããŒãã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåã®ããã©ãŒãã³ã¹ã枬å®ããŠããã®ããŒã¿ãååŸããæ¹æ³ã瀺ããŸãã
觊ããããŒã«ïŒ
- ã¢ããªã±ãŒã·ã§ã³ã«ããCPUãGPUãã¡ã¢ãªãé»åæ¶è²»ã®åæã
- ã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§;
- éå§æé;
- ãŠãŒã¶ãŒããåéãããããã©ãŒãã³ã¹ã¡ããªãã¯ã
ã¢ããªã±ãŒã·ã§ã³ã«ããCPUãGPUãã¡ã¢ãªãé»åæ¶è²»ã®åæ
æåã®ã¿ã¹ã¯ã¯ããããã¡ã€ã©ãŒã䜿çšããŠãCPUãGPUããŸãã¯ã¡ã¢ãªãä¹±çšããŠããéå¹ççãªã³ãŒããèŠã€ããããšã§ãã Appleã«ã¯ããããéæããããã®åªããããŒã«ããããŸãïŒâ Instruments âã
æåã«äœ¿çšããå¿ èŠããã4ã€ã®äž»èŠãªé åããããŸãã
- CPUïŒãã¿ã€ã ãããã¡ã€ã©ãŒãããŒã«ïŒ;
- GPUïŒãã³ã¢ã¢ãã¡ãŒã·ã§ã³ãããŒã«ïŒ;
- ã¡ã¢ãªäœ¿çšéïŒãå²ãåœãŠãããŒã«ïŒ;
- æ¶è²»é»åïŒããšãã«ã®ãŒèšºæãããŒã«ïŒã

WWDCãããªã¯ãInstrumentsã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ã«ãäœæããããã®æé©ãªæ å ±æºã§ãã
å§ããããã®ããã€ãã®ãªãã·ã§ã³ããããŸãã
- ãã¬ãŒãã³ã°åšå ·
- ããã©ãŒãã³ã¹iOS 1ã2ã3 ã
- Instrumentsã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãæé©åããŸã ã
- iOSã¢ããªã±ãŒã·ã§ã³åãã®é«åºŠãªã°ã©ãã£ãã¯ã¹ãšã¢ãã¡ãŒã·ã§ã³ ã
- 詳现ãªãããã¡ã€ãªã³ã° ã
- Cocoa Touchã®åè¶æ§ ã
- æ©åšã«ããIOSããã©ãŒãã³ã¹ãšãšãã«ã®ãŒæé©å ã
- ã¢ããªã±ãŒã·ã§ã³ã磚ããŸã ã
ã¢ããªã®å¿çæ§
次ã«æž¬å®ããéèŠãªããšã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®å¿çæ§ã§ãã æèŠåŠçã¯ã¡ã€ã³ã¹ããªãŒã ã§çºçããŸãã ããã«é·æéã®æäœããããšãã¢ããªã±ãŒã·ã§ã³ãé ããªããŸãã
ããã»ããµã䜿çšããªãå Žåã§ããäžéšã®æäœã«ã¯æéããããå ŽåããããŸãã ã¡ã€ã³ã¹ã¬ããã«åæåŒã³åºããããå Žåã¯ããããã®åŒã³åºãã«ããã£ãæéã枬å®ããå¿ èŠããããŸãã
枬å®ã«ã¯ãäŸã䜿çšã§ããŸãã
CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent(); // Your method NSUInteger milliseconds = (NSUInteger)((CFAbsoluteTimeGetCurrent() â startTime) * 1000); NSLog(âDone in %lu msâ, milliseconds);
å¥ã®ã¢ãããŒããViberéçºè ã«ãã£ãŠèª¬æãããŸããã ã¡ã€ã³ã¹ã¬ãããç£èŠãã400ããªç§ä»¥äžãããã¯ãããŠããªãããšã確èªããç¹å¥ãªã¹ã¬ãããäœæããŸãã


詳现ã«ã€ããŠã¯ããã¬ãŒã³ããŒã·ã§ã³ ïŒPDFã7MBïŒãã芧ãã ããã
ãã®ããŒã¿ã䜿çšããŠãæéãããããããåŒã³åºããæ€åºãïŒ400ããªç§ãé©åãªãããå€ã§ãã詳现ã«ã€ããŠã¯ãã®æ¬ãèªãããšãã§ããŸãïŒãããããæé©åããããã¡ã€ã³ã¹ã¬ãããã移åããŸãã
æã¡äžãæé
次ã«æž¬å®ããéèŠãªããšã¯ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åé床ã§ãã äžè¬çãªãŠãŒã¶ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ã«æ°åããããããŸãã ã èµ·åæéãé·ããšãã©ã¹ãã¬ãŒã·ã§ã³ãçºçããŸãã
ã¢ããªã±ãŒã·ã§ã³ãèµ·åããã«ã¯2ã€ã®ãªãã·ã§ã³ããããŸãã
- ã³ãŒã«ãã¹ã¿ãŒãïŒã¢ããªã±ãŒã·ã§ã³ã®ããã»ã¹ã¯ãŸã éå§ãããŠããŸãããæåã«OSããéå§ãããŸãã
- ãŠã©ãŒã ã¹ã¿ãŒãïŒã¢ããªã±ãŒã·ã§ã³ã¯æå°åãããŸãããã 匷å¶çµäºãããŸããã§ããã ããã¯ã°ã©ãŠã³ããã埩å ãããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã³ãŒã«ãããŒãã«ã€ããŠèª¬æããŸããããã¯ããå€ãã®ãªãœãŒã¹ãå¿ èŠãšãã倧å€ãªäœæ¥ã§ãã
iOSã¢ããªã±ãŒã·ã§ã³ããã®èµ·åã·ãŒã±ã³ã¹ããããŸãã ã¢ããªã±ãŒã·ã§ã³ã®èµ·åãã§ãŒãºïŒããã¥ã¡ã³ãããïŒ

1.éå§ã«ããã£ãåèšæéã枬å®ãã
mainïŒïŒã®éå§ããapplicationDidBecomeActiveã®çµäºãŸã§ã®æéã枬å®ããå¿ èŠããããŸã ã
main.m
int main(int argc, char * argv[]) { // Save the initial time for startup [[StartipTimeMonitor sharedMonitor] appWillStartLoading]; @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
AppDelegate.m
- (void)applicationDidBecomeActive:(UIApplication *)application { // Your code // We assume that the app is loaded then the main thread become free // after this callback is finished. dispatch_async(dispatch_get_main_queue(), ^{ [[StartipTimeMonitor sharedMonitor] appDidFinishLoading]; }); }
ã³ãŒããè¿œå ããåŸãã¢ããªã±ãŒã·ã§ã³ã«æ°ããæ©èœãè¿œå ããŠãã³ãŒããæªåããªãããšã確èªããŠãã ããã ã³ãŒã«ãã¹ã¿ãŒãæéãæ倧1ç§ã«ç¶æããŠãã ããã
2.èµ·åæã«ãã§ãŒãºæéã枬å®ããŸã
ååãšããŠãèµ·åã«ããã£ãåèšæéã ããç¥ãã ãã§ã¯ååã§ã¯ãããŸããã èµ·åã·ãŒã±ã³ã¹ã®ã©ã®æ®µéã§é床ãäœäžããããç¥ãããšãéèŠã§ãã
æãéèŠãªæé ã¯æ¬¡ã®ãšããã§ãã
- [AppDelegateã¢ããªã±ãŒã·ã§ã³ïŒdidFinishLaunchingWithOptionsïŒ]-ãã®ã¡ãœããã¯ãããŒãã€ã¡ãŒãžãŸãã¯ã¹ããŒãªãŒããŒãã衚瀺ããããšãã«åŒã³åºãããŸãã å®è¡ãã€ã³ãããã®ã¡ãœããããæ»ããšããã«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®å®éã®èªã¿èŸŒã¿ãéå§ãããŸãã
- [UIViewController loadView]-ã¢ããªã±ãŒã·ã§ã³ãç¬èªã®UIViewãäœæããå Žåãããã¯åæåãããå Žæã§ãã
- [UIViewController viewDidLoad]-UIViewãããŒããããŸããã æçµåæåã®æéã
- [AppDelegate applicationDidBecomeActiveïŒ]-ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¢ã«åæåãããŠããŸããããã®ã¡ãœããã®åŒã³åºããå®äºãããŸã§ããã¯ããããŸãŸã§ãã ãã®ã¡ãœããã¯ãã¢ããªã±ãŒã·ã§ã³ãããã¯ã°ã©ãŠã³ãããå埩ããŠãããšãã«ãåŒã³åºãããŸãã
äžéšã®ã¡ãœããã«æéãããããããå Žåã¯ãããããæé©åããå¿ èŠããããŸãã
3.ãå§åäžãã§éå§æéã枬å®ãã
çŸå®ã®äžçãšå žåçãªãã¹ãç°å¢ã®éã«ã¯ã1ã€ã®éèŠãªéãããããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯ãçŸå®ã®äžçã§ã¯å€ç«ããŠååšããŸããã ãŠãŒã¶ãŒã¯éåžžãå¥ã®ã¢ããªã±ãŒã·ã§ã³ããã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŸãã å¥ã®ã¢ããªã±ãŒã·ã§ã³ã¯éåžžã«é£ããå ŽåããããŸãã
å¥ã®éãã¢ããªã±ãŒã·ã§ã³ãåæã«ããã¯ã°ã©ãŠã³ãã«ç§»åããŠããŒã¿ãä¿åããããšããŠããéã«ãã¢ããªã±ãŒã·ã§ã³ãèµ·åããæ¡ä»¶ã§èµ·åæéã枬å®ããããšã¯éåžžã«éèŠã§ãã ãã®ãã¹ãã«ãããããã€ãã®äºæããªãçµæãæããã«ãªãå ŽåããããŸãã ãããŸã§å®å šã«ç¡å®³ã ã£ãã³ãŒãã¯ããããã®æ¡ä»¶ã§ã¢ããªã±ãŒã·ã§ã³ã®é床ãå€§å¹ ã«äœäžãããå¯èœæ§ããããŸããã
- 4.ã¢ããªã±ãŒã·ã§ã³ã¯æ¢ã«éå§ãããŠããŸããããŸã 圹ã«ç«ããªã
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãèªã¿èŸŒãŸããåŸã«ã¢ããªã±ãŒã·ã§ã³ãæ©èœããªãå Žåã¯ãå®éã«ã¯èµ·åãã§ãŒãºããŸã å®äºããŠããªããšæ³å®ããå¿ èŠããããŸãã èªã¿èŸŒãŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãå¿çããŠããŠããããŠã³ããŒãããå¿ èŠãããããŒã¿ãããå Žåã§ããããã¯ã¹ã¿ãŒãã¢ãããã§ãŒãºã®äžéšãšèŠãªãããå¿ èŠããããŸãã
ãŠãŒã¶ãŒãçµã¿ç«ãŠãããã©ãŒãã³ã¹ã¡ããªãã¯
ãã¹ãç°å¢ã§ã¯ã以åã®ãã¹ãŠã®æž¬å®ãå¯èœã§ãã ãããã¯å¿ èŠã§ãããååã§ã¯ãããŸããã ã¢ããªã±ãŒã·ã§ã³ã人æ°ãããå ŽåããŠãŒã¶ãŒããŒã¹ãäžçäžã«åæ£ããŠããå Žåãäžéšã®ãŠãŒã¶ãŒã¯äºæ³ãšã¯éåžžã«ç°ãªãç°å¢ãæã£ãŠããå¯èœæ§ããããŸãã
ãããã¯ç°ãªãå ŽåããããŸãïŒ
- ãããã¯ãŒã¯æ¡ä»¶;
- ããŒããŠã§ã¢
- ãœãããŠã§ã¢ïŒOSããŒãžã§ã³ãè±ç...ïŒ;
- ããã€ã¹ã®ç©ºã容éã
- ãªã©
圌ãã¯éåžžãšã¯ç°ãªãæ¹æ³ã§ã¢ããªã±ãŒã·ã§ã³ã䜿çšããå ŽåããããŸãã
èŠæ ã®ããã¬ãã¥ãŒããã1ã€æãã®è©äŸ¡ãåŸãããšãã§ããŸãïŒãã¢ããªã±ãŒã·ã§ã³ãé ãïŒãïŒã å®éšå®€ã§æž¬å®ãããã¹ãŠã®æž¬å®åºæºãå®å šãªé åã«ããå Žåã§ãã
ãããã©ãããŸããïŒ
äžé£ã®ããã©ãŒãã³ã¹ã€ã³ãžã±ãŒã¿ãŒïŒKPIïŒãå®çŸ©ããå®éã®ãŠãŒã¶ãŒããåéããŸãã ãããè¡ãã«ã¯ãã»ãŒãã¹ãŠã®åæããã±ãŒãžã䜿çšã§ããŸãã
ãŠãŒã¶ãŒããååŸã§ããäž»èŠæ¥çžŸè©äŸ¡ææšã®äŸã次ã«ç€ºããŸãã
- ç·ã³ãŒã«ãã¹ã¿ãŒãæé;
- ç·ãŠã©ãŒã ã¹ã¿ãŒãæé;
- 段éçãªèµ·åæé;
- ãµãŒããŒããå¿ èŠãªããŒã¿ãããŠã³ããŒãããã®ã«ããã£ãæéã
- ã¡ã€ã³ã¹ã¬ããã400ããªç§ãè¶ ããŠãããã¯ãããåæ°ã
- ã¡ã¢ãªäžè¶³ã¢ã©ãŒãã®æ°ã
- FOOMSã®æ°ã
- ã€ã³ã¿ãŒãã§ã€ã¹ãããã¯ãããŠããããŸãã¯äœ¿çšã§ããªãå Žåã®æäœã®æéã
åæããã±ãŒãžã䜿çšãããšãããã€ã¹ãåœããŸãã¯ãããã¯ãŒã¯ãªãã¬ãŒã¿ãŒã®ã¿ã€ããšãšãã«ããããã®ã€ã³ãžã±ãŒã¿ãŒãã»ã°ã¡ã³ãã«é åžã§ããŸãã ããã«ããããŠãŒã¶ãŒãã©ã®ãããªããã©ãŒãã³ã¹ã®åé¡ãæ±ããŠããããã©ã®ããã«ä¿®æ£ããããç¥ãããšãã§ããŸãã
çµè«
ã芧ã®ãšãããããã©ãŒãã³ã¹ã®æž¬å®ã¯ãInstruments.appãèµ·åããã ãã§ã¯ãããŸããã åæããä»ã®éèŠãªãã€ã³ãããããŸãã 説æãããŠããåææ¹æ³ã«ã¯ãè¿ éãã€ç°¡åã«å®è£ ã§ãããã®ãšãããå€ãã®æéãšåŽåãå¿ èŠãªãã®ããããŸãã ãã ããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç£èŠããŠåé¡ãèŠã€ããŠä¿®æ£ããã¢ããªã±ãŒã·ã§ã³ããã䜿ããããããã®ã«åœ¹ç«ã¡ãŸãã
Facebookã¢ããªã±ãŒã·ã§ã³ãäŸãšããŠäœ¿çšããŠãé«ãã¹ã¯ããŒã«ããã©ãŒãã³ã¹ãå®çŸãã
ãªãªãžãã«ïŒ é«ãã¹ã¯ããŒã«ããã©ãŒãã³ã¹ãæäŸ
æçš¿è ïŒClémentGenzmer
Facebookã§ã®ç®æšã®1ã€ã¯ãiOSã¢ããªã±ãŒã·ã§ã³ã䜿çšãããŠãŒã¶ãŒã®å©äŸ¿æ§ãæ倧åããããšã§ãã ã¿ã¹ã¯ã®1ã€ã¯ãã¥ãŒã¹ãã£ãŒããã¹ã ãŒãºã«ã¹ã¯ããŒã«ããããã«ããããšã§ãããéåžžã«å€æ§ãªã³ã³ãã³ããæã€è€éãªUIScrollViewã§ã¯ãçŸåšããã¬ãŒã ã¬ãŒããäœäžããçç±ãå€æããè¯ãæ¹æ³ã¯ãããŸããã å®éã«éåžžã«ããŸãæ©èœããé«ãã¹ã¯ããŒã«ããã©ãŒãã³ã¹ãç¶æããã®ã«åœ¹ç«ã€èå¥æŠç¥ãéçºããŸããã 次ã«ããããã©ã®ããã«æ©èœãããã詳现ã«èª¬æããŸãã
ããã€ã¹ã§ã®ã¹ã¯ããŒã«ããã©ãŒãã³ã¹ã®æž¬å®
ã»ãšãã©ã®ãžã§ãã®æåã®ã¹ãããã¯ãããã©ãŒãã³ã¹æž¬å®ããã³æž¬å®æ©åšã§ãã Appleã®ããŒã«ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®ãã¬ãŒã ã¬ãŒãã枬å®ã§ããŸãããã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžã«çºçãããã¹ãŠã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãã·ãã¥ã¬ãŒãããããšã¯äŸç¶ãšããŠå°é£ã§ãã å¥ã®ã¢ãããŒãã¯ãããã€ã¹ã§çŽæ¥ã¹ã¯ããŒã«ã®ããã©ãŒãã³ã¹ã枬å®ããããšã§ãã
Appleã®CADisplayLink APIã䜿çšããŠãããã€ã¹ã®ãã¬ãŒã ã¬ãŒãã枬å®ããŸãã ãã¬ãŒã ã®æŠèŠã説æãããã³ã«ãããã£ãæéã枬å®ããŸãã 60åã®1ç§ïŒ16.6ããªç§ïŒä»¥äžããã£ãå Žåããã¬ãŒã ã¬ãŒãã¯äœããã¹ã¯ããŒã«ã¯ãŽããŽãããŸããã
[CADisplayLink displayLinkWithTarget:self selector:@selector(_update)];
[_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
ååž°ã®æ€åºãšåºå®
ãããªã²ãŒã ãšã¯ç°ãªããFacebookã¢ããªã±ãŒã·ã§ã³ã¯GPUãããŸã䜿çšããŸããã äž»ã«ããã¹ããšç»åã衚瀺ãããããã»ãšãã©ã®ãã¬ãŒã ã¯ããã»ããµã®è² è·ã®ããã«èœã¡ãŸãã é«ãããã»ããµããã©ãŒãã³ã¹ãç¶æããããã«ããã¥ãŒã¹ãã£ãŒãã§ã®ããŒã¿ã¬ã³ããªã³ã°ãæ§æãããã¹ãŠã®æäœã16.6ããªç§æªæºã§å®äºããããã«ããå¿ èŠããããŸãã å®éã«ã¯ããã¬ãŒã ã®ã¬ã³ããªã³ã°ã¯ããã€ãã®ã¹ãããã§æ§æãããéåžžãã¢ããªã±ãŒã·ã§ã³ã¯ãã¬ãŒã ã¬ãŒããäœäžãããŸã§ã¡ã€ã³ã¹ã¬ããã«8ã10ããªç§ãããããŸããã
ã¡ã€ã³ã¹ã¬ãããCPUã®ã»ãšãã©ã®æéãè²»ããå Žæãç¥ãããšã§ãæé«ã®ã¹ã¯ããŒã«ããã©ãŒãã³ã¹ãåŸãããšãã§ããŸãã ã¿ã€ã ãããã¡ã€ã©ããŒã«ã䜿çšããŠãã¡ã€ã³ã¹ã¬ãããã»ãšãã©ã®æéãè²»ããå Žæãè©äŸ¡ã§ããŸããããã¬ãŒã ã¬ãŒããäœäžãããšãã«ããã€ã¹ã®æ£ç¢ºãªç¶æ ãåçŸããããšã¯å°é£ã§ãã
ãã1ã€ã®æ¹æ³ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡äžã«ããŒã¿ãåéããŠããã¬ãŒã ããããã®æãå¯èœæ§ã®é«ãåå ãç¹å®ããããšã§ãã ã€ãŸããã¢ããªã±ãŒã·ã§ã³ãããèªäœããããã¡ã€ã«ãããšèšãããšãã§ããŸãã ãããè¡ãã«ã¯ãä¿¡å·ã䜿çšããå¿ èŠããããŸãã ååŸããããŒã¿ã¯æ£ç¢ºã§ã¯ãªãå ŽåããããŸãããããã«ãããéé¢ãããç°å¢ã§ãããã¡ã€ãªã³ã°ããŒã¿ãååŸã§ããŸãã ããã¯ãInstrumentsãDTraceãªã©ã®æšæºããŒã«ã䜿çšããåŸæ¥ã®iOSãããã¡ã€ãªã³ã°ã§ã¯äžå¯èœã§ãã
ããã€ã¹äžã®ä¿¡å·ãšââãããã¡ã€ãªã³ã°
ã¹ã¬ãããäœãããããç解ããããã«ãã·ã°ãã«ã«ã·ã°ãã«ãéä¿¡ããŠäžæåæ¢ããŸããã·ã°ãã«ã«ã¯ã³ãŒã«ããã¯é¢æ°ãç»é²ãããŠããŸãã
static void _callstack_signal_handler(int signr, siginfo_t *info, void *secret) { callstack_size = backtrace(callstacks, 128); } struct sigaction sa; sigfillset(&sa.sa_mask); sa.sa_flags = SA_SIGINFO; sa.sa_sigaction = _callstack_signal_handler; sigaction(SIGPROF, &sa, NULL);
ä¿¡å·ãæäœãããšãã«å®å šãªæäœã¯éåžžã«éãããŠããŸãã ããšãã°ãã¡ã¢ãªã®å²ãåœãŠã¯å®å šãªæäœã§ã¯ãªããããã·ã°ãã«ãã³ãã©ã§è¡ãããšã¯ãçŸåšã®ã¹ã¿ãã¯ãã¬ãŒã¹ããã£ããã£ããããšã ãã§ãã
ä¿¡å·ããªã¬ãŒ

ä¿¡å·ãèšå®ããããä¿¡å·ãããªã¬ãŒããã¡ã«ããºã ãå¿ èŠã§ãã ãã®ã¹ããªãŒã ã远跡ããããšããŠããããããããã¡ã€ã³ã¹ã¬ããããéä¿¡ããããšã¯ã§ããŸããã GCDã¯ãå®è¡ã®æµããå¶åŸ¡ããããã®åªããæœè±¡æŠå¿µã§ãã ãã ããå®è¡ãŠãããããµããŒãããæšæºã¡ã«ããºã ã§ããéä¿¡å ã¯ã10ããªç§ããšã®äžæçãªè§£å床ã§å®è¡ãããŸãã NSThreadã¯ãããé«ãæéå解èœã§å¿ èŠãªç²åºŠãæäŸããŸãã
ã¡ã€ã³ã¹ã¬ããã®è² è·ã倧ãããªãããã®çµæããã¬ãŒã ã¬ãŒããäœäžãããšãããã»ããµã®å®è¡æéã®ã»ãšãã©ãæ¶è²»ããŸãã æ®å¿µãªãããããã¯ãã¡ã€ã³ã¹ã¬ããããã¹ãŠã®åŽåéçŽçãªæäœãå®äºãããšãã«ã¬ããŒãã¹ã¬ãããèµ·åãããããšãæå³ããŸãã ãã®åé¡ãåé¿ããããã«ãã¬ããŒãã¹ã¬ããã«ã¡ã€ã³ã¹ã¬ãããããé«ãåªå 床ãäžããŸãã ããã«ãããã¡ã€ã³ã¹ã¬ãããå¯èœãªéãããžãŒã§ããå Žåã§ãããã¬ãŒã¹ããã£ããã£ã§ããŸãã
_trackerThread = [[NSThread alloc] initWithTarget:[self class] selector:@selector(_trackerLoop) object:nil]; _trackerThread.threadPriority = 1.0; [_trackerThread start];
ããã©ãŒãã³ã¹æž¬å®ã§ã¯ããããããšã§ããã枬å®è¡çºã¯ã¢ããªã±ãŒã·ã§ã³ã«åœ±é¿ãäžããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«è¿œå ã®åœ±é¿ãäžããå¯èœæ§ããããŸãã iPhone 4Sã§ã®ãã£ããã£ã®ãã¬ãŒã¹ã«ã¯çŽ1ãã€ã¯ãç§ããããŸãã16ããªç§ãããªãå Žåã¯ãããªãæéããããããã«æãããŸãã ããã«ãã¡ã€ã³ã¹ã¬ãããäžæããïŒä¿¡å·ãéä¿¡ããïŒåäœã«ãããã¹ã¬ããéã§ã³ã³ããã¹ãã¹ã€ãããããå€ãçæãããã¢ããªã±ãŒã·ã§ã³å šäœã®é床ãäœäžããå¯èœæ§ããããŸãã
ãããã£ãŠãã©ãããŠãå¿ èŠãªå Žåã«ã®ã¿çæ³çãªæž¬å®ããªã·ãŒãéžæããããšãéèŠã§ãã ç§ãã¡ã®å Žåã枬å®ã®éã«ããã€ãã®æé©åãè¡ããŸããã ããšãã°ããŠãŒã¶ãŒãã¹ã¯ããŒã«ãããšãã«ã®ã¿ä¿¡å·ãéä¿¡ããå¿ èŠããããŸãã ç§ãã¡ãè¡ã£ãå¥ã®å€æŽã¯ãåŸæ¥å¡ã®ã¿ã䜿çšããå éšã¢ã»ã³ããªã§ã®ã¿ããã©ãŒãã³ã¹ã枬å®ããããšã§ãããã®ããã枬å®ã¯ããã°ã©ã ã®å ¬éããŒãžã§ã³ã«åœ±é¿ããŸããã
ã¬ããŒããšã·ã³ãã«å
ãã¬ãŒã¹ããã£ããã£ãããåŸãããã€ã¹ã§ãã®ããŒã¿ãåéãããããã¢ãŒãã§ãµãŒããŒã«éä¿¡ããŸãã ãã¡ããããã¬ãŒã¹ã¯èªã¿åãäžå¯èœã§ã-ã¢ãã¬ã¹ã®ã³ã¬ã¯ã·ã§ã³-ã·ã³ãã«åããå¿ èŠãããããã®ããã®ããŒã«ãããã€ããããŸãã Apple Atos APIãGoogle Breakpadãããã³atosl Facebookã¯ãã®äŸã§ãã ã·ã³ãã«ååŸãããŒã¿èŠèŠåããŒã«ã䜿çšããŠã³ãŒã«ã¹ã¿ãã¯ãéçŽããã¹ã¯ããŒã«ã®å¹çãåŒãç¶ãåäžãããªãããååž°ãé²ãããã®åãçµã¿ã«çŠç¹ãåœãŠãã·ã¹ãã ã®éšåãç¹å®ããŸãã
以äžã¯ãFacebookã¢ããªã±ãŒã·ã§ã³ã®2ã€ã®ããŒãžã§ã³ã®ããã»ããµæ¶è²»éã瀺ãäŸã§ãã

ãããè©ŠããŠ
ãã®æŠç¥ã«ããããªãªãŒã¹ããŒãžã§ã³ã«å°éããåã«éåžžã«å€ãã®ãªã°ã¬ãã·ã§ã³ãæ€åºã§ããŸããã ãã®å®è£ ã®ãµã³ãã«ãGitHubã«æçš¿ããŸããã ãããããªãã®ãããžã§ã¯ãã§åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ç¶ããèªã
- iOSéçºè åãã®27ã®ãªãŒãã³ãœãŒã¹nishtyachkov
- 8人ã®åœãæãèšèšåå
- Androidã§ã®é«éã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®éçº
EDISON Softwareã®ããŒããã©ãªãªã«ã¯ãAndroidã®éçºã«é¢é£ãã8ã€ã®ãããžã§ã¯ããšiOSã®éçºã«é¢é£ãã4ã€ã®äž»èŠãªãããžã§ã¯ããå«ãŸããŠããŸãã
- ã¹ããŒããã©ã³åãéè¡éç¥ãµãŒãã¹
- Vivaldié»åå³æžé€šã¢ããªã±ãŒã·ã§ã³
- ãã€ã©ã«ãã¥ãŒã¹ã¬ã¿ãŒ
- äŒæ¥ã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã¢ã¯ã»ã¹ããããã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³