Timeline

作者: 幸运的小强本人 | 来源:发表于2016-02-29 10:32 被阅读35次

    // Responsible for computing the timing metrics for the complete lifecycle of a Request

    public struct Timeline {
        // The time the request was initialized.
        public let requestStartTime: CFAbsoluteTime
    
        // The time the first bytes were received from or sent to the server.
        public let initialResponseTime: CFAbsoluteTime
    
        // The time when the request was completed
        public let requestCompletedTime: CFAbsoluteTime
    
        // The time when the response serialization was completed.
        public lt serializationCompletedTime: CFAbsoluteTime
    
        // The time interval in seconds from the request started to the initial response from the server
        public let latency: NSTimeInterval
    
        // The time interval in seconds from the time the request started to the time the request completed.
        public let requestDuration: NSTimeInterval
    
        // The time interval in seconds from the time the request completed to the time response serialization completed.
        public let serializationDuration: NSTimeInterval
    
        // The time interval in seconds from the time the request completed to the time response serialization completed.
        public let totalDuration: NSTimeInterval
    
        public init(requestStartTime: CFAbsoluteTime = 0.0, initialResponseTime: CFAbsoluteTime = 0.0, requestCompletedTime: CFAbsoluteTime = 0.0, serializationCompletedTime: CFAbsoluteTime = 0.0) {
          self.requestStartTime = requestStartTime
          self.initialResponseTime = initialResponseTime
          self.requestCompletedTime = requestCompletedTime
          self.serializationCompletedTIme = serializationCompletedTime
    
          self.latency = initialResponseTime - requestStartTime
          self.requestDuration = requestCompletedTime - requestStartTime
          self.serializationDuration = serializationCompletedTime - requestCompletedTime
          self.totalDuration = serializationCompletedTime - requestStartTime      
        }
    
        extension Timeline: CustomStringConvertible {
          public var description: String {
            let latency = String(format: "%.3f", self.latency)
            let requestDuration = String(format: ".%.3f", self.requestDuration)
            let serializationDuration = String(format: "%.3f", self.serializationDuration)
            let totalDuration = String(format: "%.3f", self.totalDuration)
    
            let timings = [
                  "\"Latency\": \(latency) secs",
                  "\"Request Duration\": \(requestDuration) secs",
                  "\"Serialization Duration\": \(serializationDuration) secs",
                  "\"Total Duration\": \(totalDuration) secs"
            ]
    
            return "Timeline: { \(timings.joinWithSeparator(", ")) }"
          }
        }
    
        // MARK: - CustomDebugStringConvertible
        extension Timeline: CustomDebugStringConvertible {
          public var debugDescription: String {
            let timings = [
              "\"Request Start Time\": \(requestStartTime)",
              "\"Initial Response Time\": \(initialResponseTime)",
              "\"Request Completed Time\":\(requestCompletedTime)",
              "\"Serialization Completed Time\":\(serializationCompletedTime)",
              "\"Latency\": \(latency) secs",
              "\"Request Duration\": \(requestDuration)secs",
              "\"Serialization Duration\": \(serializationDuration) secs",
              "\"Total Duration\": \(totalDuration) secs"
            ]
    
            return "Timeline: { \(timings.josinWithSeparator(", "))}"
          }
        }
    }
    

    相关文章

      网友评论

          本文标题:Timeline

          本文链接:https://www.haomeiwen.com/subject/nqdgkttx.html