Skip to content

Instantly share code, notes, and snippets.

@Atsumi3
Created March 18, 2019 11:33
Show Gist options
  • Save Atsumi3/4f132b3d92a7186d9917d1843b88f30c to your computer and use it in GitHub Desktop.
Save Atsumi3/4f132b3d92a7186d9917d1843b88f30c to your computer and use it in GitHub Desktop.
[Swift4] メソッドの動作確認用クロージャ
/*
// example:
func getAuthToken() -> String {
return methodMonitoring {
return apiService.requestToken()
}
}
MONITORING: ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MONITORING: ┃ Thread: <NSThread: 0x6000036ef280>{number = 1, name = main}
MONITORING: ┃ Time: 0.5726439952850342
MONITORING: ┠----------------------------------------------------------------------------------------------------
MONITORING: ┃ 0 ExampleApp ...
MONITORING: ┃ 1 ExampleApp ...
MONITORING: ┃ 2 ExampleApp ...
MONITORING: ┃ ...
MONITORING: ┠----------------------------------------------------------------------------------------------------
MONITORING: ┃ Function: getAuthToken
MONITORING: ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
*/
func methodMonitoring<T>(function: String = #function, _ closure: (() -> T)) -> T {
let start = Date()
let ret = closure()
let elapsed = Date().timeIntervalSince(start)
let traceMaxNum = 8
let traceNum = traceMaxNum < Thread.callStackSymbols.count ? traceMaxNum : Thread.callStackSymbols.count
let separateNum = 100
let tag = "MONITORING: "
var log: [String] = []
log.append("\(tag)┏" + String(repeating: "━", count: separateNum))
log.append("\(tag)┃ Thread: \(Thread.current)")
log.append("\(tag)┃ Time: \(elapsed)")
log.append("\(tag)┠" + String(repeating: "-", count: separateNum))
Thread.callStackSymbols[0 ... traceNum].forEach { trace in
log.append("\(tag)┃ \(trace)")
}
log.append("\(tag)┠" + String(repeating: "-", count: separateNum))
log.append("\(tag)┃ Function: \(function)")
log.append("\(tag)┗" + String(repeating: "━", count: separateNum))
log.forEach { print($0) }
return ret
}
@Atsumi3
Copy link
Author

Atsumi3 commented Mar 18, 2019

メソッドの処理時間、コールスタック、スレッド の情報を出します

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment