Kaynağa Gözat

Added Timeline generation to default data and download responses.

Christian Noon 9 yıl önce
ebeveyn
işleme
d6ae1124ca
2 değiştirilmiş dosya ile 34 ekleme ve 27 silme
  1. 12 3
      Source/Response.swift
  2. 22 24
      Source/ResponseSerialization.swift

+ 12 - 3
Source/Response.swift

@@ -38,13 +38,17 @@ public struct DefaultDataResponse {
     /// The error encountered while executing or validating the request.
     public let error: Error?
 
+    /// The timeline of the complete lifecycle of the request.
+    public let timeline: Timeline
+
     var _metrics: AnyObject?
 
-    init(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) {
+    init(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?, timeline: Timeline = Timeline()) {
         self.request = request
         self.response = response
         self.data = data
         self.error = error
+        self.timeline = timeline
     }
 }
 
@@ -64,7 +68,7 @@ public struct DataResponse<Value> {
     /// The result of response serialization.
     public let result: Result<Value>
 
-    /// The timeline of the complete lifecycle of the `Request`.
+    /// The timeline of the complete lifecycle of the request.
     public let timeline: Timeline
 
     var _metrics: AnyObject?
@@ -139,6 +143,9 @@ public struct DefaultDownloadResponse {
     /// The error encountered while executing or validating the request.
     public let error: Error?
 
+    /// The timeline of the complete lifecycle of the request.
+    public let timeline: Timeline
+
     var _metrics: AnyObject?
 
     init(
@@ -147,7 +154,8 @@ public struct DefaultDownloadResponse {
         temporaryURL: URL?,
         destinationURL: URL?,
         resumeData: Data?,
-        error: Error?)
+        error: Error?,
+        timeline: Timeline = Timeline())
     {
         self.request = request
         self.response = response
@@ -155,6 +163,7 @@ public struct DefaultDownloadResponse {
         self.destinationURL = destinationURL
         self.resumeData = resumeData
         self.error = error
+        self.timeline = timeline
     }
 }
 

+ 22 - 24
Source/ResponseSerialization.swift

@@ -84,6 +84,22 @@ public struct DownloadResponseSerializer<Value>: DownloadResponseSerializerProto
     }
 }
 
+// MARK: - Timeline
+
+extension Request {
+    var timeline: Timeline {
+        let requestCompletedTime = self.endTime ?? CFAbsoluteTimeGetCurrent()
+        let initialResponseTime = self.delegate.initialResponseTime ?? requestCompletedTime
+
+        return Timeline(
+            requestStartTime: self.startTime ?? CFAbsoluteTimeGetCurrent(),
+            initialResponseTime: initialResponseTime,
+            requestCompletedTime: requestCompletedTime,
+            serializationCompletedTime: CFAbsoluteTimeGetCurrent()
+        )
+    }
+}
+
 // MARK: - Default
 
 extension DataRequest {
@@ -101,7 +117,8 @@ extension DataRequest {
                     request: self.request,
                     response: self.response,
                     data: self.delegate.data,
-                    error: self.delegate.error
+                    error: self.delegate.error,
+                    timeline: self.timeline
                 )
 
                 dataResponse.add(self.delegate.metrics)
@@ -136,22 +153,12 @@ extension DataRequest {
                 self.delegate.error
             )
 
-            let requestCompletedTime = self.endTime ?? CFAbsoluteTimeGetCurrent()
-            let initialResponseTime = self.delegate.initialResponseTime ?? requestCompletedTime
-
-            let timeline = Timeline(
-                requestStartTime: self.startTime ?? CFAbsoluteTimeGetCurrent(),
-                initialResponseTime: initialResponseTime,
-                requestCompletedTime: requestCompletedTime,
-                serializationCompletedTime: CFAbsoluteTimeGetCurrent()
-            )
-
             var dataResponse = DataResponse<T.SerializedObject>(
                 request: self.request,
                 response: self.response,
                 data: self.delegate.data,
                 result: result,
-                timeline: timeline
+                timeline: self.timeline
             )
 
             dataResponse.add(self.delegate.metrics)
@@ -184,7 +191,8 @@ extension DownloadRequest {
                     temporaryURL: self.downloadDelegate.temporaryURL,
                     destinationURL: self.downloadDelegate.destinationURL,
                     resumeData: self.downloadDelegate.resumeData,
-                    error: self.downloadDelegate.error
+                    error: self.downloadDelegate.error,
+                    timeline: self.timeline
                 )
 
                 downloadResponse.add(self.delegate.metrics)
@@ -219,16 +227,6 @@ extension DownloadRequest {
                 self.downloadDelegate.error
             )
 
-            let requestCompletedTime = self.endTime ?? CFAbsoluteTimeGetCurrent()
-            let initialResponseTime = self.delegate.initialResponseTime ?? requestCompletedTime
-
-            let timeline = Timeline(
-                requestStartTime: self.startTime ?? CFAbsoluteTimeGetCurrent(),
-                initialResponseTime: initialResponseTime,
-                requestCompletedTime: requestCompletedTime,
-                serializationCompletedTime: CFAbsoluteTimeGetCurrent()
-            )
-
             var downloadResponse = DownloadResponse<T.SerializedObject>(
                 request: self.request,
                 response: self.response,
@@ -236,7 +234,7 @@ extension DownloadRequest {
                 destinationURL: self.downloadDelegate.destinationURL,
                 resumeData: self.downloadDelegate.resumeData,
                 result: result,
-                timeline: timeline
+                timeline: self.timeline
             )
 
             downloadResponse.add(self.delegate.metrics)