From 659cc005ad74f760ceee1c529363bea94bca98a4 Mon Sep 17 00:00:00 2001 From: Tadeu Zagallo Date: Mon, 23 Nov 2015 09:48:43 -0800 Subject: [PATCH] Restore VSYNC markers on RCTProfile Summary: public The VSYNC markers got lost at some point when refactoring RCTBatchedBridge, restore it, but keep it in RCTProfile. Reviewed By: jspahrsummers Differential Revision: D2685805 fb-gh-sync-id: 1acad330de7baf004a83b41f90ba4b6532605de6 --- React/Profiler/RCTProfile.m | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/React/Profiler/RCTProfile.m b/React/Profiler/RCTProfile.m index db23fb8c2..681a464b7 100644 --- a/React/Profiler/RCTProfile.m +++ b/React/Profiler/RCTProfile.m @@ -46,6 +46,7 @@ static NSDictionary *RCTProfileInfo; static NSMutableDictionary *RCTProfileOngoingEvents; static NSTimeInterval RCTProfileStartTime; static NSUInteger RCTProfileEventID = 0; +static CADisplayLink *RCTProfileDisplayLink; #pragma mark - Macros @@ -266,6 +267,19 @@ void RCTProfileUnhookModules(RCTBridge *bridge) dispatch_group_leave(RCTProfileGetUnhookGroup()); } +#pragma mark - Private ObjC class only used for the vSYNC CADisplayLink target + +@interface RCTProfile : NSObject +@end + +@implementation RCTProfile + ++ (void)vsync:(__unused CADisplayLink *)displayLink +{ + RCTProfileImmediateEvent(0, @"VSYNC", 'g'); +} + +@end #pragma mark - Public Functions @@ -312,6 +326,11 @@ void RCTProfileInit(RCTBridge *bridge) RCTProfileHookModules(bridge); + RCTProfileDisplayLink = [CADisplayLink displayLinkWithTarget:[RCTProfile class] + selector:@selector(vsync:)]; + [RCTProfileDisplayLink addToRunLoop:[NSRunLoop mainRunLoop] + forMode:NSRunLoopCommonModes]; + [[NSNotificationCenter defaultCenter] postNotificationName:RCTProfileDidStartProfiling object:nil]; } @@ -329,6 +348,9 @@ void RCTProfileEnd(RCTBridge *bridge, void (^callback)(NSString *)) [[NSNotificationCenter defaultCenter] postNotificationName:RCTProfileDidEndProfiling object:nil]; + [RCTProfileDisplayLink invalidate]; + RCTProfileDisplayLink = nil; + RCTProfileUnhookModules(bridge); if (callbacks != NULL) {