diff --git a/ios/TNSWidgets/TNSProcess.h b/ios/TNSWidgets/TNSProcess.h new file mode 100644 index 000000000..926beba96 --- /dev/null +++ b/ios/TNSWidgets/TNSProcess.h @@ -0,0 +1,17 @@ +// +// TNSProcess.h +// TNSWidgets +// +// Created by Panayot Cankov on 15/05/2017. +// Copyright © 2017 Telerik A D. All rights reserved. +// + +#ifndef TNSProcess_h +#define TNSProcess_h + +/** + * Get the milliseconds since the process started. + */ +double __tns_uptime(); + +#endif /* TNSProcess_h */ diff --git a/ios/TNSWidgets/TNSProcess.m b/ios/TNSWidgets/TNSProcess.m new file mode 100644 index 000000000..bfc5d3ce6 --- /dev/null +++ b/ios/TNSWidgets/TNSProcess.m @@ -0,0 +1,28 @@ +// +// TNSProcess.c +// TNSWidgets +// +// Created by Panayot Cankov on 15/05/2017. +// Copyright © 2017 Telerik A D. All rights reserved. +// + +#include "TNSProcess.h" + +#import + +#include +#include +#include + +double __tns_uptime() { + pid_t pid = [[NSProcessInfo processInfo] processIdentifier]; + int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid }; + struct kinfo_proc proc; + size_t size = sizeof(proc); + sysctl(mib, 4, &proc, &size, NULL, 0); + + struct timeval current; + gettimeofday(¤t, NULL); + + return (double)(current.tv_sec - proc.kp_proc.p_starttime.tv_sec) * 1000.0 + (double)(current.tv_usec - proc.kp_proc.p_starttime.tv_usec) / 1000.0; +} diff --git a/ios/TNSWidgets/TNSWidgets.xcodeproj/project.pbxproj b/ios/TNSWidgets/TNSWidgets.xcodeproj/project.pbxproj index 964ae339b..f6ccadaae 100644 --- a/ios/TNSWidgets/TNSWidgets.xcodeproj/project.pbxproj +++ b/ios/TNSWidgets/TNSWidgets.xcodeproj/project.pbxproj @@ -9,6 +9,8 @@ /* Begin PBXBuildFile section */ 8B7321CF1D097ECD00884AC6 /* TNSLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B7321CD1D097ECD00884AC6 /* TNSLabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B7321D01D097ECD00884AC6 /* TNSLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7321CE1D097ECD00884AC6 /* TNSLabel.m */; }; + F915D3551EC9EF5E00071914 /* TNSProcess.m in Sources */ = {isa = PBXBuildFile; fileRef = F915D3531EC9EF5E00071914 /* TNSProcess.m */; }; + F915D3561EC9EF5E00071914 /* TNSProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F915D3541EC9EF5E00071914 /* TNSProcess.h */; settings = {ATTRIBUTES = (Public, ); }; }; F98F5CB31CD0EFEA00978308 /* TNSWidgets.h in Headers */ = {isa = PBXBuildFile; fileRef = F98F5CB21CD0EFEA00978308 /* TNSWidgets.h */; settings = {ATTRIBUTES = (Public, ); }; }; F98F5CBA1CD0EFEA00978308 /* TNSWidgets.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F98F5CAF1CD0EFEA00978308 /* TNSWidgets.framework */; }; F98F5CBF1CD0EFEA00978308 /* TNSWidgetsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F98F5CBE1CD0EFEA00978308 /* TNSWidgetsTests.m */; }; @@ -29,6 +31,8 @@ /* Begin PBXFileReference section */ 8B7321CD1D097ECD00884AC6 /* TNSLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TNSLabel.h; sourceTree = ""; }; 8B7321CE1D097ECD00884AC6 /* TNSLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TNSLabel.m; sourceTree = ""; }; + F915D3531EC9EF5E00071914 /* TNSProcess.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TNSProcess.m; path = ../TNSProcess.m; sourceTree = ""; }; + F915D3541EC9EF5E00071914 /* TNSProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TNSProcess.h; path = ../TNSProcess.h; sourceTree = ""; }; F98F5CAF1CD0EFEA00978308 /* TNSWidgets.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TNSWidgets.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F98F5CB21CD0EFEA00978308 /* TNSWidgets.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TNSWidgets.h; sourceTree = ""; }; F98F5CB41CD0EFEA00978308 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -79,6 +83,8 @@ F98F5CB11CD0EFEA00978308 /* TNSWidgets */ = { isa = PBXGroup; children = ( + F915D3531EC9EF5E00071914 /* TNSProcess.m */, + F915D3541EC9EF5E00071914 /* TNSProcess.h */, F98F5CB21CD0EFEA00978308 /* TNSWidgets.h */, 8B7321CD1D097ECD00884AC6 /* TNSLabel.h */, 8B7321CE1D097ECD00884AC6 /* TNSLabel.m */, @@ -105,6 +111,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + F915D3561EC9EF5E00071914 /* TNSProcess.h in Headers */, F98F5CB31CD0EFEA00978308 /* TNSWidgets.h in Headers */, F98F5CCB1CD0F09E00978308 /* UIImage+TNSBlocks.h in Headers */, 8B7321CF1D097ECD00884AC6 /* TNSLabel.h in Headers */, @@ -208,6 +215,7 @@ buildActionMask = 2147483647; files = ( 8B7321D01D097ECD00884AC6 /* TNSLabel.m in Sources */, + F915D3551EC9EF5E00071914 /* TNSProcess.m in Sources */, F98F5CCC1CD0F09E00978308 /* UIImage+TNSBlocks.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/ios/TNSWidgets/TNSWidgets.xcodeproj/project.xcworkspace/xcuserdata/cankov.xcuserdatad/UserInterfaceState.xcuserstate b/ios/TNSWidgets/TNSWidgets.xcodeproj/project.xcworkspace/xcuserdata/cankov.xcuserdatad/UserInterfaceState.xcuserstate index 593d92eeb..8f89dbaf8 100644 Binary files a/ios/TNSWidgets/TNSWidgets.xcodeproj/project.xcworkspace/xcuserdata/cankov.xcuserdatad/UserInterfaceState.xcuserstate and b/ios/TNSWidgets/TNSWidgets.xcodeproj/project.xcworkspace/xcuserdata/cankov.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/ios/TNSWidgets/TNSWidgets/TNSWidgets.h b/ios/TNSWidgets/TNSWidgets/TNSWidgets.h index 4ae01b174..28bae77c1 100644 --- a/ios/TNSWidgets/TNSWidgets/TNSWidgets.h +++ b/ios/TNSWidgets/TNSWidgets/TNSWidgets.h @@ -18,3 +18,4 @@ FOUNDATION_EXPORT const unsigned char TNSWidgetsVersionString[]; #import "UIImage+TNSBlocks.h" #import "TNSLabel.h" +#import "TNSProcess.h"