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/08/10 12:37:41 UTC

[3/5] incubator-weex git commit: + [ios] add tracing log for chrome devtools

+ [ios] add tracing log for chrome devtools


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

Branch: refs/heads/0.16-dev
Commit: 565bab619793192b011a2401486b6360f06e35e3
Parents: 4b80dac
Author: 齐山 <su...@163.com>
Authored: Thu Aug 10 12:12:42 2017 +0800
Committer: 齐山 <su...@163.com>
Committed: Thu Aug 10 12:12:42 2017 +0800

----------------------------------------------------------------------
 ios/sdk/WeexSDK.xcodeproj/project.pbxproj       |   4 +
 ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m |   2 +-
 ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h     |   4 +
 ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m     |  10 ++
 .../WeexSDK/Sources/Manager/WXTracingManager.h  |  17 ++-
 .../WeexSDK/Sources/Manager/WXTracingManager.m  | 107 +++++++++++++++----
 ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m     |   2 +
 .../Sources/Protocol/WXTracingProtocol.h        |  29 +++++
 8 files changed, 149 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/565bab61/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
index 5785c45..0557764 100644
--- a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
+++ b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
@@ -236,6 +236,7 @@
 		C401945E1E344E8300D19C31 /* WXFloatCompareTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C401945D1E344E8300D19C31 /* WXFloatCompareTests.m */; };
 		C41E1A971DC1FD15009C7F90 /* WXDatePickerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C41E1A951DC1FD15009C7F90 /* WXDatePickerManager.h */; };
 		C41E1A981DC1FD15009C7F90 /* WXDatePickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C41E1A961DC1FD15009C7F90 /* WXDatePickerManager.m */; };
+		C42E8F9B1F39DF07001EBE9D /* WXTracingProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C42E8F991F39DF07001EBE9D /* WXTracingProtocol.h */; };
 		C43C03E81EC8ACA40044C7FF /* WXPrerenderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C43C03E41EC8ACA40044C7FF /* WXPrerenderManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		C43C03E91EC8ACA40044C7FF /* WXPrerenderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C43C03E51EC8ACA40044C7FF /* WXPrerenderManager.m */; };
 		C4B3D6D41E6954300013F38D /* WXEditComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B3D6D21E6954300013F38D /* WXEditComponent.h */; };
@@ -800,6 +801,7 @@
 		C401945D1E344E8300D19C31 /* WXFloatCompareTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXFloatCompareTests.m; sourceTree = "<group>"; };
 		C41E1A951DC1FD15009C7F90 /* WXDatePickerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXDatePickerManager.h; sourceTree = "<group>"; };
 		C41E1A961DC1FD15009C7F90 /* WXDatePickerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXDatePickerManager.m; sourceTree = "<group>"; };
+		C42E8F991F39DF07001EBE9D /* WXTracingProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXTracingProtocol.h; sourceTree = "<group>"; };
 		C43C03E41EC8ACA40044C7FF /* WXPrerenderManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXPrerenderManager.h; sourceTree = "<group>"; };
 		C43C03E51EC8ACA40044C7FF /* WXPrerenderManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXPrerenderManager.m; sourceTree = "<group>"; };
 		C4B3D6D21E6954300013F38D /* WXEditComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXEditComponent.h; sourceTree = "<group>"; };
@@ -1266,6 +1268,7 @@
 				74EF31A91DE58AE600667A07 /* WXURLRewriteProtocol.h */,
 				042013AC1E66CD6A001FC79C /* WXValidateProtocol.h */,
 				DC6836E51EBB12B200AD2D84 /* WXConfigCenterProtocol.h */,
+				C42E8F991F39DF07001EBE9D /* WXTracingProtocol.h */,
 			);
 			path = Protocol;
 			sourceTree = "<group>";
@@ -1525,6 +1528,7 @@
 				DCA0EF641D6EED6F00CB18B9 /* WXGlobalEventModule.h in Headers */,
 				2A837AB21CD9DE9200AEDF03 /* WXLoadingComponent.h in Headers */,
 				DCA446271EFA5DAF00D0CFA8 /* WeexSDK.h in Headers */,
+				C42E8F9B1F39DF07001EBE9D /* WXTracingProtocol.h in Headers */,
 				7423899F1C32733800D748CA /* WXType.h in Headers */,
 				59A582FC1CF5B17B0081FD3E /* WXBridgeContext.h in Headers */,
 				77D161621C02ED790010B15B /* WXLog.h in Headers */,

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/565bab61/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
index 09dc9d8..e56bf2c 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
@@ -207,7 +207,7 @@
         NSDictionary *componentData = [element toDictionary];
         NSString *parentRef = [ref toString];
         NSInteger insertIndex = [[index toNumber] integerValue];
-        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:componentData[@"ref"] className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"addElement" options:@{@"threadName":WXTJSBridgeThread}];
+        [WXTracingManager startTracingWithInstanceId:instanceIdString ref:componentData[@"ref"] className:nil name:WXTJSCall phase:WXTracingBegin functionName:@"addElement" options:@{@"threadName":WXTJSBridgeThread,@"componentData":componentData}];
          WXLogDebug(@"callAddElement...%@, %@, %@, %ld", instanceIdString, parentRef, componentData, (long)insertIndex);
         
         return [JSValue valueWithInt32:(int32_t)callAddElement(instanceIdString, parentRef, componentData, insertIndex) inContext:[JSContext currentContext]];

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/565bab61/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h b/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
index 2277242..f2e0430 100644
--- a/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
+++ b/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
@@ -48,4 +48,8 @@
 
 + (NSDictionary *) jsServiceCache;
 
++ (BOOL)isRemoteTracing;
+
++ (void)setRemoteTracing:(BOOL)isRemoteTracing;
+
 @end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/565bab61/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m b/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
index b599e59..5ea2a24 100644
--- a/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
+++ b/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
@@ -30,6 +30,7 @@
 
 static BOOL WXIsDebug;
 static BOOL WXIsDevToolDebug;
+static BOOL WXIsRemoteTracing;
 static NSString* WXDebugrepBundleJS;
 static NSString* WXDebugrepJSFramework;
 
@@ -81,6 +82,15 @@ static NSString* WXDebugrepJSFramework;
     WXIsDevToolDebug = isDevToolDebug;
 }
 
++ (BOOL)isRemoteTracing
+{
+    return WXIsRemoteTracing;
+}
+
++ (void)setRemoteTracing:(BOOL)isRemoteTracing {
+    WXIsRemoteTracing = isRemoteTracing;
+}
+
 + (BOOL)isDevToolDebug {
     return WXIsDevToolDebug;
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/565bab61/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
index 9c3634e..48c1eba 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.h
@@ -20,8 +20,8 @@
 #import <Foundation/Foundation.h>
 #import "WXSDKInstance.h"
 
-#define WXTNetworkHanding          @"downloadBundleJS"
-#define WXTExecJS                  @"executeBundleJS"
+#define WXTNetworkHanding          @"loadJS"
+#define WXTExecJS                  @"execJS"
 #define WXTJSCall                  @"jsCall"
 #define WXTDomCall                 @"domCall"
 #define WXTRender                  @"render"
@@ -70,6 +70,7 @@ typedef enum : NSUInteger {
 @property (nonatomic) long long parentId;// parent event id
 @property (nonatomic, copy) NSString *bundleUrl;
 @property (nonatomic, copy) NSString *threadName;
+@property (nonatomic, strong) NSMutableArray *childrenRefs; // children ids
 -(NSDictionary *)dictionary;
 @end
 
@@ -135,4 +136,16 @@ typedef enum : NSUInteger {
  */
 +(NSDictionary *)getTacingApi;
 
+/**
+ *  @discusstion commit tracing info
+ *  @param instanceId the instance  id.
+ */
++(void )commitTracing:(NSString *)instanceId;
+
+/**
+ *  @discusstion commit summary info
+ *  @param instanceId the instance  id.
+ */
++ (void)commitTracingSummaryInfo:(NSDictionary *)info withInstanceId:(NSString *)instanceId;
+
 @end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/565bab61/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
index b4b19d5..6da8dd4 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXTracingManager.m
@@ -26,6 +26,8 @@
 #import <WeexSDK/WXHandlerFactory.h>
 #import "WXUtility.h"
 #import "WXComponentManager.h"
+#import "WXTracingProtocol.h"
+#import "WXSDKEngine.h"
 
 
 @implementation WXTracing
@@ -198,10 +200,34 @@
         if(options && options[@"threadName"]){
             tracing.threadName = options[@"threadName"];
         }
+        if(options && options[@"componentData"]){
+            tracing.childrenRefs = [self getChildrenRefs:options[@"componentData"]];
+        }
         [self startTracing:tracing];
     }
 }
 
++ (NSMutableArray *)getChildrenRefs:(NSDictionary *)componentData
+{
+    NSMutableArray *mArray = [NSMutableArray new];
+    [self recursively:mArray componentData:componentData];
+    return mArray;
+}
+
++(void)recursively:(NSMutableArray *)mArray componentData:(NSDictionary *)componentData
+{
+    if([componentData valueForKey:@"children"]){
+        NSArray *children = [componentData valueForKey:@"children"];
+        for(NSDictionary *subcomponentData in children){
+            NSString *ref = [subcomponentData objectForKey:@"ref"];
+            if(ref){
+                [mArray addObject:ref];
+            }
+            [self recursively:mArray componentData:subcomponentData];
+        }
+    }
+}
+
 +(WXTracing *)copyTracing:(WXTracing *)tracing
 {
     WXTracing *newTracing = [WXTracing new];
@@ -265,7 +291,8 @@
     if(tracings && [tracings count]>0){
         for (NSInteger i = [tracings count] - 1; i >= 0; i--) {
             WXTracing *t = tracings[i];
-            if([t.threadName isEqualToString:WXTJSBridgeThread]&& [t.ref isEqualToString:tracing.ref] && ([t.name isEqualToString:tracing.name] || [t.name isEqualToString:WXTJSCall])){
+//            if([t.threadName isEqualToString:WXTJSBridgeThread]&& [self compareRef:tracing.ref withTracing:t] && ([t.name isEqualToString:tracing.name] || [t.name isEqualToString:WXTJSCall])){
+            if([t.threadName isEqualToString:WXTJSBridgeThread]&& [self compareRef:tracing.ref withTracing:t]){
                 if([t.fName isEqualToString:tracing.fName]){
                     return t.traceId;
                 }
@@ -275,6 +302,21 @@
     return -1;
 }
 
++(BOOL)compareRef:(NSString *)ref withTracing:(WXTracing *)tracing
+{
+    if([tracing.ref isEqualToString:ref]){
+        return YES;
+    }
+    if(tracing.childrenRefs && [tracing.childrenRefs count] > 0){
+        for (NSString *childRef in tracing.childrenRefs) {
+            if([childRef isEqualToString:ref]){
+                return YES;
+            }
+        }
+    }
+    return NO;
+}
+
 +(void)updateTracings:(WXTracingTask *)task tracing:(WXTracing *)tracing
 {
     if([WXTNetworkHanding isEqualToString:task.tag]){
@@ -296,25 +338,6 @@
         }
     }
     
-//    if([WXTExecJS isEqualToString:task.tag]){
-//        if([WXTJSCall isEqualToString:tracing.name]){
-//            NSMutableArray *tracings = task.tracings;
-//            [tracings enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(WXTracing *bTracing, NSUInteger idx, BOOL *stop) {
-//                if(([WXTExecJS 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];
-//                    *stop = YES;
-//                }
-//            }];
-//            task.tag = WXTRender;
-//        }
-//    }
-    
     if([WXTracingBegin isEqualToString:tracing.ph]){
         if(tracing.ref.length>0){
             WXPerformBlockOnComponentThread(^{
@@ -327,13 +350,13 @@
                     tracing.parentRef = com.supercomponent.ref;
                 }
                 tracing.name = com.type;
-                if(tracing.parentId == -1){
-                    tracing.parentId = [self getParentId:task tracing:tracing];
-                }
                 if(tracing.className.length == 0){
                     tracing.className = [self getclassName:tracing];
                 }
             });
+            if(tracing.parentId == -1){
+                tracing.parentId = [self getParentId:task tracing:tracing];
+            }
         } else {
             if(tracing.parentId == -1){
                 tracing.parentId = [self getParentId:task tracing:tracing];
@@ -368,7 +391,11 @@
             }
         }];
     }
+    
     [task.tracings addObject:tracing];
+    if([@"renderFinish" isEqualToString:tracing.fName] && [WXTracingInstant isEqualToString:tracing.ph] && [WXTUIThread isEqualToString:tracing.threadName]) {
+        [WXTracingManager commitTracing:task.iid];
+    }
 }
 
 +(NSMutableDictionary *)getTracingData
@@ -433,4 +460,38 @@
     return dict;
 }
 
++ (void)commitTracing:(NSString *)instanceId
+{
+    if(![self isTracing]){
+        return ;
+    }
+    id tracingHandle = [WXSDKEngine handlerForProtocol:@protocol(WXTracingProtocol)];
+    if ([tracingHandle respondsToSelector:@selector(commitTracingInfo:)]){
+        WXTracingTask *task = [[WXTracingManager sharedInstance].tracingTasks objectForKey:instanceId];
+        if(task) {
+            [tracingHandle commitTracingInfo:task];
+        }
+        
+    }
+}
+
++ (void)commitTracingSummaryInfo:(NSDictionary *)info withInstanceId:(NSString *)instanceId
+{
+    if(![self isTracing]){
+        return ;
+    }
+    id tracingHandle = [WXSDKEngine handlerForProtocol:@protocol(WXTracingProtocol)];
+    if ([tracingHandle respondsToSelector:@selector(commitTracingSummaryInfo:)]){
+        if(info) {
+            NSMutableDictionary *newInfo = [info mutableCopy];
+            if(instanceId.length > 0){
+                [newInfo setObject:instanceId forKey:@"instanceId"];
+                [newInfo setObject:[[WXUtility getEnvironment] objectForKey:@"platform"] forKey:@"platform"];
+            }
+            [tracingHandle commitTracingSummaryInfo:newInfo];
+        }
+        
+    }
+}
+
 @end

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/565bab61/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m b/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
index a2a4d6d..6759cf4 100644
--- a/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
+++ b/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
@@ -27,6 +27,7 @@
 #import "WXComponentManager.h"
 #import "WXThreadSafeMutableDictionary.h"
 #import "WXAppConfiguration.h"
+#import "WXTracingManager.h"
 
 NSString *const kStartKey = @"start";
 NSString *const kEndKey = @"end";
@@ -162,6 +163,7 @@ static WXThreadSafeMutableDictionary *globalPerformanceDict;
     }
     
     [self printPerformance:commitDict];
+    [WXTracingManager commitTracingSummaryInfo:commitDict withInstanceId:instance.instanceId];
 }
 
 + (NSMutableDictionary *)performanceDictForInstance:(WXSDKInstance *)instance

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/565bab61/ios/sdk/WeexSDK/Sources/Protocol/WXTracingProtocol.h
----------------------------------------------------------------------
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXTracingProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXTracingProtocol.h
new file mode 100644
index 0000000..4b7f140
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXTracingProtocol.h
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXTracingProtocol.h"
+#import "WXTracingManager.h"
+
+@protocol WXTracingProtocol <NSObject>
+
+- (void)commitTracingInfo:(WXTracingTask *)task;
+
+- (void)commitTracingSummaryInfo:(NSDictionary *)info;
+
+@end