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 */
|