94 lines
2.8 KiB
C
94 lines
2.8 KiB
C
|
|
//
|
|||
|
|
// MPaaS+MonitorStartUpTime.h
|
|||
|
|
// APMPaaS
|
|||
|
|
//
|
|||
|
|
// Created by qiwei on 16/10/12.
|
|||
|
|
// Copyright © 2016年 Alipay. All rights reserved.
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
#ifndef MPaaS_MonitorStartUpTime_h
|
|||
|
|
#define MPaaS_MonitorStartUpTime_h
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
extern "C" {
|
|||
|
|
#endif // __cplusplus
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
全局变量,程序启动的开始时刻
|
|||
|
|
使用方法: 声明后使用,但不要修改
|
|||
|
|
系统时间时刻,随系统时间变化而变化
|
|||
|
|
实现原理: CFAbsoluteTimeGetCurrent()
|
|||
|
|
注:不建议使用
|
|||
|
|
*/
|
|||
|
|
extern CFTimeInterval globalMonitorStartUpTime;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
全局变量,程序启动的开始时刻
|
|||
|
|
使用方法: 声明后使用,但不要修改
|
|||
|
|
相对开机时刻,不随系统时间变化而变化
|
|||
|
|
实现原理: CACurrentMediaTime()
|
|||
|
|
注:建议使用
|
|||
|
|
*/
|
|||
|
|
extern CFTimeInterval globalRelativeStartUpTime;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
设置App启动的最早时刻。
|
|||
|
|
一般在主进程的第一个+load方法中设置。
|
|||
|
|
如果有自动链接的动态库,则建议放在第一个动态库的第一个+load方法中。
|
|||
|
|
*/
|
|||
|
|
extern void MPStartupTimeMarkAppStartPoint();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
设置启动过程中的某个时刻,例如 main,didfinishlaunch,dbinit
|
|||
|
|
内部会减去app启动的最早时刻
|
|||
|
|
*/
|
|||
|
|
extern void MPStartupTimeMarkAppPhase(const char *phaseName);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
设置启动过程中的某个时刻,例如 main,didfinishlaunch,dbinit
|
|||
|
|
内部会减去app启动的最早时刻,此方法多了开关控制
|
|||
|
|
*/
|
|||
|
|
extern void MPStartupTimeWithConfigMarkAppPhase(const char *phaseName);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
设置启动过程中的某段时间的耗时,例如dbcost
|
|||
|
|
*/
|
|||
|
|
extern void MPStartupTimeSetRangeCost(const char *rangeName,CFTimeInterval cost);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
辅助统计某段时间的耗时
|
|||
|
|
例如:
|
|||
|
|
MPStartupRangeCostStart(dbinit);
|
|||
|
|
//... db init code ...
|
|||
|
|
MPStartupRangeCostFinish(dbinit);
|
|||
|
|
*/
|
|||
|
|
#define MPStartupTimeRangeCostStart(name)\
|
|||
|
|
CFTimeInterval _mpstartuptimeRangeStart##name = CACurrentMediaTime();
|
|||
|
|
|
|||
|
|
#define MPStartupTimeRangeCostFinish(name)\
|
|||
|
|
CFTimeInterval _mpstartuptimeRangeFinish##name = CACurrentMediaTime();\
|
|||
|
|
MPStartupTimeSetRangeCost(#name,_mpstartuptimeRangeFinish##name - _mpstartuptimeRangeStart##name);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
Phase 启动的某一时刻(距离app启动的时间)
|
|||
|
|
Range 启动的某一段代码的耗时
|
|||
|
|
*/
|
|||
|
|
typedef NS_ENUM(NSUInteger,MPStartupTimeDataType){
|
|||
|
|
MPStartupTimeData_Phase,
|
|||
|
|
MPStartupTimeData_Range,
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
遍历所有过程
|
|||
|
|
只能调用一次(后续调用没有数据)
|
|||
|
|
*/
|
|||
|
|
extern void MPStartupTimeForEachData(void (^callback)(const char *name,CFTimeInterval value,MPStartupTimeDataType type));
|
|||
|
|
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
}
|
|||
|
|
#endif // __cplusplus
|
|||
|
|
|
|||
|
|
#endif /* MPaaS_MonitorStartUpTime_h */
|