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