You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by kf...@apache.org on 2017/07/24 09:37:14 UTC

[07/24] incubator-weex git commit: + [ios] add tracing logic

+ [ios] add tracing logic


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/11b19496
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/11b19496
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/11b19496

Branch: refs/heads/0.15-dev
Commit: 11b19496abe91afcbcf99abb49519c8ad4c4121b
Parents: e340991
Author: 齐山 <su...@163.com>
Authored: Wed Jul 12 16:02:26 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Wed Jul 12 16:02:26 2017 +0800

----------------------------------------------------------------------
 ios/playground/WeexDemo/WXDemoViewController.m  |   1 -
 .../WeexSDK/Sources/Model/WXJSExceptionInfo.h   |   1 +
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m   |   8 +-
 ios/sdk/WeexSDK/Sources/Utility/WXLog.m         |   1 +
 .../WeexSDK/Sources/Utility/WXTracingManager.h  |  18 ++-
 .../WeexSDK/Sources/Utility/WXTracingManager.m  | 115 +++++++++++++++++--
 6 files changed, 130 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/11b19496/ios/playground/WeexDemo/WXDemoViewController.m
----------------------------------------------------------------------
diff --git a/ios/playground/WeexDemo/WXDemoViewController.m b/ios/playground/WeexDemo/WXDemoViewController.m
index bec41f9..2284ea7 100644
--- a/ios/playground/WeexDemo/WXDemoViewController.m
+++ b/ios/playground/WeexDemo/WXDemoViewController.m
@@ -148,7 +148,6 @@
          WXLogDebug(@"%@", @"Render Finish...");
         dispatch_async(dispatch_get_main_queue(), ^{
             [WXTracingManager startTracing:weakSelf.instance.instanceId ref:nil parentRef:nil className:nil name:nil ph:WXTracingInstant fName:WXTRenderFinish parentId:nil];
-            [WXTracingManager getTracingData:weakSelf.instance.instanceId];
         });
         [weakSelf updateInstanceState:WeexInstanceAppear];
     };

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/11b19496/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h b/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
index b800a87..c5b14ab 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
@@ -53,6 +53,7 @@
  */
 @property(nonatomic,strong, readonly) NSString * jsfmVersion;
 
+
 /**
  * @abstract Initializes a WXJSException instance
  * @param instanceId the id of instance

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/11b19496/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index 5c5d6b1..4e2b8a7 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -147,7 +147,7 @@ typedef enum : NSUInteger {
     
     WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeMainBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy];
     [self _renderWithRequest:request options:options data:data];
-    [WXTracingManager startTracing:self.instanceId ref:nil parentRef:nil className:nil name:WXTDataHanding ph:WXTracingBegin fName:@"renderWithURL" parentId:nil];
+    [WXTracingManager startTracing:self.instanceId ref:nil parentRef:nil className:nil name:WXTNetworkHanding ph:WXTracingBegin fName:@"renderWithURL" parentId:nil];
 }
 
 - (void)renderView:(NSString *)source options:(NSDictionary *)options data:(id)data
@@ -158,7 +158,8 @@ typedef enum : NSUInteger {
     _jsData = data;
     
     [self _renderWithMainBundleString:source];
-    [WXTracingManager startTracing:self.instanceId ref:nil parentRef:nil className:nil name:WXTDataHanding ph:WXTracingBegin fName:@"renderView" parentId:nil];
+    
+    [WXTracingManager setBundleJSType:source instanceId:self.instanceId];
 }
 
 - (void)_renderWithMainBundleString:(NSString *)mainBundleString
@@ -201,6 +202,8 @@ typedef enum : NSUInteger {
     
     [[WXSDKManager bridgeMgr] createInstance:self.instanceId template:mainBundleString options:dictionary data:_jsData];
     
+    [WXTracingManager startTracing:self.instanceId ref:nil parentRef:nil className:nil name:WXTDataHanding ph:WXTracingBegin fName:@"renderWithMainBundleString" parentId:nil];
+    
     WX_MONITOR_PERF_SET(WXPTBundleSize, [mainBundleString lengthOfBytesUsingEncoding:NSUTF8StringEncoding], self);
 }
 
@@ -291,6 +294,7 @@ typedef enum : NSUInteger {
         WX_MONITOR_INSTANCE_PERF_END(WXPTJSDownload, strongSelf);
         
         [strongSelf _renderWithMainBundleString:jsBundleString];
+        [WXTracingManager setBundleJSType:jsBundleString instanceId:weakSelf.instanceId];
     };
     
     _mainBundleLoader.onFailed = ^(NSError *loadError) {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/11b19496/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXLog.m b/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
index d086455..dd6794d 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
@@ -85,6 +85,7 @@ static id<WXLogProtocol> _externalLog;
         
         [[WXSDKManager bridgeMgr] resetEnvironment];
     }
+    
 }
 
 + (WXLogLevel)logLevel

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/11b19496/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.h
index 2cb88ac..3d18c39 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.h
@@ -20,6 +20,7 @@
 #import <Foundation/Foundation.h>
 #import "WXSDKInstance.h"
 
+#define WXTNetworkHanding          @"WXTNetworkHanding"
 #define WXTDataHanding          @"WXTDataHanding"
 #define WXTJSCall          @"jsCall"
 #define WXTRender          @"WXTRender"
@@ -32,10 +33,20 @@
 
 typedef enum : NSUInteger {
     // global
-    WXTracingDataHanding = 0,
+    WXTracingNetworkHanding = 0,
+    WXTracingDataHanding,
     WXTracingRender
 } WXTracingTag;
 
+
+@interface WXTracingApi:NSObject
+
+@property (nonatomic, copy) NSString *name; //
+@property (nonatomic, copy) NSString *className; //
+@property (nonatomic, copy) NSString *method; //
+
+@end
+
 @interface WXTracing:NSObject
 
 @property (nonatomic, copy) NSString *ref; // compnonet id
@@ -56,8 +67,9 @@ typedef enum : NSUInteger {
 
 @property (nonatomic, copy) NSString *iid;
 @property (nonatomic) long long counter;
-@property (nonatomic)  WXTracingTag tag;
+@property (nonatomic, copy)  NSString *tag;
 @property (nonatomic, strong) NSMutableArray *tracings;
+@property (nonatomic, copy) NSString *bundleJSType; //
 
 @end
 
@@ -67,6 +79,8 @@ typedef enum : NSUInteger {
 +(void)startTracing:(WXTracing*)tracing;
 +(void)startTracing:(NSString *)iid ref:(NSString*)ref parentRef:(NSString*)parentRef className:(NSString *)className name:(NSString *)name ph:(NSString *)ph fName:(NSString *)fName parentId:(NSString *)parentId;
 +(WXTracingTask*)getTracingData;
++(void)setBundleJSType:(NSString *)jsBundleString instanceId:(NSString *)iid;
 +(void)getTracingData:(NSString *)instanceId;
++(NSDictionary *)getTacingApi;
 
 @end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/11b19496/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.m
index d1569d3..2d7a29a 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXTracingManager.m
@@ -21,6 +21,10 @@
 #import "WXComponentFactory.h"
 #import "WXModuleFactory.h"
 #import "WXSDKManager.h"
+#import <WeexSDK/WXComponentFactory.h>
+#import <WeexSDK/WXModuleFactory.h>
+#import <WeexSDK/WXHandlerFactory.h>
+
 
 @implementation WXTracing
 
@@ -97,8 +101,8 @@
         if(![WXTracingEnd isEqualToString:tracing.ph]){ // end is should not update
             tracing.traceId = ++task.counter;
         }
-        if([WXTDataHanding isEqualToString:tracing.name] && [WXTracingBegin isEqualToString:tracing.ph]){
-            task.tag = WXTDataHanding;
+        if([WXTNetworkHanding isEqualToString:tracing.name] && [WXTracingBegin isEqualToString:tracing.ph]){
+            task.tag = WXTNetworkHanding;
         }
         NSTimeInterval ts = [[NSDate date] timeIntervalSince1970]*1000;
         tracing.ts = ts ;
@@ -108,6 +112,24 @@
     }
 }
 
++(void)setBundleJSType:(NSString *)jsBundleString instanceId:(NSString *)iid
+{
+    if([self isTracing] && iid.length >0){
+        WXTracingTask *task = [[WXTracingManager sharedInstance].tracingTasks objectForKey:iid];
+        if(jsBundleString.length >0){
+            NSRange range = [jsBundleString rangeOfString:@"}"];
+            if (range.location != NSNotFound) {
+                NSString *searchStr =  [jsBundleString substringToIndex:range.location+range.length];
+                if ([searchStr rangeOfString:@"Vue"].location != NSNotFound){
+                    task.bundleJSType = @"Vue";
+                }else if([searchStr rangeOfString:@"Rax"].location != NSNotFound){
+                    task.bundleJSType = @"Rax";
+                }
+            }
+        }
+    }
+}
+
 +(void)startTracing:(NSString *)iid ref:(NSString*)ref parentRef:(NSString*)parentRef className:(NSString *)className name:(NSString *)name ph:(NSString *)ph fName:(NSString *)fName parentId:(NSString *)parentId
 {
     if([self isTracing]){
@@ -196,25 +218,47 @@
     if(![WXTJSCall isEqualToString:tracing.name]){
         tracing.className = [self getclassName:tracing];
     }
-    if(task.tag == WXTDataHanding){
+    if([WXTNetworkHanding isEqualToString:task.tag]){
+        if([WXTDataHanding isEqualToString:tracing.name]){
+            NSMutableArray *tracings = task.tracings;
+            [tracings enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(WXTracing *bTracing, NSUInteger idx, BOOL *stop) {
+                if(([WXTNetworkHanding isEqualToString:bTracing.name] || [bTracing.ref isEqualToString:tracing.ref])&&[WXTracingBegin isEqualToString:bTracing.ph]){
+                    WXTracing *newTracing = [self copyTracing:bTracing];
+                    newTracing.iid = tracing.iid;
+                    newTracing.ph = WXTracingEnd;
+                    newTracing.ts = tracing.ts ;
+                    newTracing.duration = newTracing.ts - bTracing.ts ;
+                    bTracing.duration = newTracing.duration;
+                    [task.tracings addObject:newTracing];
+                    NSLog(@"jerry0 %f,%f",bTracing.ts,bTracing.duration);
+                    *stop = YES;
+                }
+            }];
+            task.tag = WXTDataHanding;
+        }
+    }
+    
+    if([WXTDataHanding isEqualToString:task.tag]){
         if([WXTJSCall isEqualToString:tracing.name]){
-            NSMutableArray *tracings = [task.tracings copy];
+            NSMutableArray *tracings = task.tracings;
             [tracings enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(WXTracing *bTracing, NSUInteger idx, BOOL *stop) {
                 if(([WXTDataHanding isEqualToString:bTracing.name] || [bTracing.ref isEqualToString:tracing.ref])&&[WXTracingBegin isEqualToString:bTracing.ph]){
                     WXTracing *newTracing = [self copyTracing:bTracing];
-                    newTracing.iid = newTracing.iid;
+                    newTracing.iid = tracing.iid;
                     newTracing.ph = WXTracingEnd;
-                    newTracing.ts = [[NSDate date] timeIntervalSince1970]*1000 ;
+                    newTracing.ts = tracing.ts ;
                     newTracing.duration = newTracing.ts - bTracing.ts ;
+                    bTracing.duration = newTracing.duration;
                     [task.tracings addObject:newTracing];
+                    NSLog(@"jerry1 %f,%f",bTracing.ts,bTracing.duration);
                     *stop = YES;
                 }
             }];
-            task.tag = WXTracingRender;
+            task.tag = WXTRender;
         }
     }
     if([WXTracingEnd isEqualToString:tracing.ph]){  // deal end
-        NSMutableArray *tracings = [task.tracings copy];
+        NSMutableArray *tracings = task.tracings;
         [tracings enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(WXTracing *bTracing, NSUInteger idx, BOOL *stop) {
             if(tracing.ref.length > 0 && bTracing.ref.length>0){
                 if(![tracing.ref isEqualToString:bTracing.ref]){
@@ -229,6 +273,8 @@
                 }
                 tracing.duration = tracing.ts - bTracing.ts ;
                 tracing.traceId = bTracing.traceId;
+                bTracing.duration = tracing.duration;
+                NSLog(@"jerry2 %f,%f",bTracing.ts,bTracing.duration);
                 *stop = YES;
             }
         }];
@@ -248,9 +294,60 @@
     NSArray *tracings = [task.tracings copy];
     for (WXTracing *tracing in tracings) {
         if(![WXTracingBegin isEqualToString:tracing.ph]){
-            NSLog(@"%lld %@  %@  %@  %f %f %@  %@",tracing.traceId,tracing.fName,tracing.name,tracing.className,tracing.ts,tracing.duration,tracing.ref,tracing.parentRef);
+//            NSLog(@"%lld %@  %@  %@  %f %f %@  %@",tracing.traceId,tracing.fName,tracing.name,tracing.className,tracing.ts,tracing.duration,tracing.ref,tracing.parentRef);
+        }
+    }
+}
+
++(NSDictionary *)getTacingApi
+{
+    NSMutableDictionary *dict = [NSMutableDictionary new];
+    NSMutableArray *componetArray = [NSMutableArray new];
+    NSMutableArray *moduleArray = [NSMutableArray new];
+    NSMutableArray *handleArray = [NSMutableArray new];
+    NSDictionary *componentConfigs = [WXComponentFactory componentConfigs];
+    void (^componentBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
+        NSMutableDictionary *componentConfig = [mObj mutableCopy];
+        NSDictionary *cDict = [WXComponentFactory componentMethodMapsWithName:componentConfig[@"name"]];
+        if(cDict && [cDict count]>0 && [cDict[@"methods"] count]>0){
+            [componentConfig setObject:cDict[@"methods"] forKey:@"methods"];
+        }
+        [componetArray addObject:componentConfig];
+    };
+    [componentConfigs enumerateKeysAndObjectsUsingBlock:componentBlock];
+    if(componetArray && [componetArray count]>0){
+        [dict setObject:componetArray forKey:@"componet"];
+    }
+    NSDictionary *moduleConfigs = [WXModuleFactory moduleConfigs];
+    void (^moduleBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
+        NSDictionary *mDict = [WXModuleFactory moduleMethodMapsWithName:mKey];
+        NSMutableDictionary *subDict = [NSMutableDictionary new];
+        [subDict setObject:mKey forKey:@"name"];
+        [subDict setObject:mObj forKey:@"class"];
+        if([mDict objectForKey:mKey]){
+            [subDict setObject:[mDict objectForKey:mKey] forKey:@"methods"];
         }
+        [moduleArray addObject:subDict];
+    };
+    [moduleConfigs enumerateKeysAndObjectsUsingBlock:moduleBlock];
+    if(moduleArray && [moduleArray count]>0){
+        [dict setObject:moduleArray forKey:@"module"];
     }
+    
+    
+    NSDictionary *handleConfigs = [[WXHandlerFactory handlerConfigs] mutableCopy];
+    void (^handleBlock)(id, id, BOOL *) = ^(id mKey, id mObj, BOOL * mStop) {
+        NSMutableDictionary *subDict = [NSMutableDictionary new];
+        [subDict setObject:mKey forKey:@"class"];
+        [subDict setObject:NSStringFromClass([mObj class]) forKey:@"name"];
+        [handleArray addObject:subDict];
+    };
+    [handleConfigs enumerateKeysAndObjectsUsingBlock:handleBlock];
+    if(handleArray && [handleArray count]>0){
+        [dict setObject:handleArray forKey:@"handle"];
+    }
+    
+    return dict;
 }
 
 @end