Skip to content

Commit e768104

Browse files
committed
RUM-8448 Add ios.benchmark.response_latency
Update URLSessionClient.swift
1 parent 333c927 commit e768104

File tree

6 files changed

+52
-4
lines changed

6 files changed

+52
-4
lines changed

Datadog/Datadog.xcodeproj/project.pbxproj

+6
Original file line numberDiff line numberDiff line change
@@ -1691,6 +1691,8 @@
16911691
D2DC4BF727F484AA00E4FB96 /* DataEncryption.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2DC4BF527F484AA00E4FB96 /* DataEncryption.swift */; };
16921692
D2DE63532A30A7CA00441A54 /* CoreRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2DE63522A30A7CA00441A54 /* CoreRegistry.swift */; };
16931693
D2DE63542A30A7CA00441A54 /* CoreRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2DE63522A30A7CA00441A54 /* CoreRegistry.swift */; };
1694+
D2E6E8FB2D8039BB00FF1398 /* BenchmarkURLSessionTaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E6E8FA2D8039B200FF1398 /* BenchmarkURLSessionTaskDelegate.swift */; };
1695+
D2E6E8FC2D8039BB00FF1398 /* BenchmarkURLSessionTaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E6E8FA2D8039B200FF1398 /* BenchmarkURLSessionTaskDelegate.swift */; };
16941696
D2EA0F462C0E1AE300CB20F8 /* SessionReplayConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2EA0F452C0E1AE200CB20F8 /* SessionReplayConfiguration.swift */; };
16951697
D2EBEE1F29BA160F00B15732 /* HTTPHeadersReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 618E13A92524B8700098C6B0 /* HTTPHeadersReader.swift */; };
16961698
D2EBEE2029BA160F00B15732 /* TracePropagationHeadersWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2EBEDCF29B8A02100B15732 /* TracePropagationHeadersWriter.swift */; };
@@ -3087,6 +3089,7 @@
30873089
D2DA23C9298D5C1300C6C7E6 /* UIKitMocks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIKitMocks.swift; sourceTree = "<group>"; };
30883090
D2DC4BF527F484AA00E4FB96 /* DataEncryption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataEncryption.swift; sourceTree = "<group>"; };
30893091
D2DE63522A30A7CA00441A54 /* CoreRegistry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreRegistry.swift; sourceTree = "<group>"; };
3092+
D2E6E8FA2D8039B200FF1398 /* BenchmarkURLSessionTaskDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchmarkURLSessionTaskDelegate.swift; sourceTree = "<group>"; };
30903093
D2E8D59728C7AB90007E5DE1 /* ContextMessageReceiverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextMessageReceiverTests.swift; sourceTree = "<group>"; };
30913094
D2EA0F452C0E1AE200CB20F8 /* SessionReplayConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionReplayConfiguration.swift; sourceTree = "<group>"; };
30923095
D2EBEDCC29B893D800B15732 /* TraceID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TraceID.swift; sourceTree = "<group>"; };
@@ -4999,6 +5002,7 @@
49995002
6174D6082BFDDD1E00EC7469 /* SDKMetrics */ = {
50005003
isa = PBXGroup;
50015004
children = (
5005+
D2E6E8FA2D8039B200FF1398 /* BenchmarkURLSessionTaskDelegate.swift */,
50025006
614396712A67D74F00197326 /* BatchMetrics.swift */,
50035007
);
50045008
path = SDKMetrics;
@@ -7967,6 +7971,7 @@
79677971
D2FB1254292E0E96005B13F8 /* TrackingConsentPublisher.swift in Sources */,
79687972
61D3E0D6277B23F1008BE766 /* KronosClock.swift in Sources */,
79697973
D2A7841129A53B2F003B03BB /* File.swift in Sources */,
7974+
D2E6E8FB2D8039BB00FF1398 /* BenchmarkURLSessionTaskDelegate.swift in Sources */,
79707975
D286626E2A43487500852CE3 /* Datadog.swift in Sources */,
79717976
61F930C22BA1C41A005F0EE2 /* TLVBlockReader.swift in Sources */,
79727977
613E793B2577B6EE00DFCC17 /* DataReader.swift in Sources */,
@@ -9284,6 +9289,7 @@
92849289
D2CB6E5527C50EAE00A62B57 /* KronosNSTimer+ClosureKit.swift in Sources */,
92859290
D2CB6E6627C50EAE00A62B57 /* Reader.swift in Sources */,
92869291
D2CB6E6927C50EAE00A62B57 /* KronosDNSResolver.swift in Sources */,
9292+
D2E6E8FC2D8039BB00FF1398 /* BenchmarkURLSessionTaskDelegate.swift in Sources */,
92879293
D286626F2A43487500852CE3 /* Datadog.swift in Sources */,
92889294
61F930C32BA1C41A005F0EE2 /* TLVBlockReader.swift in Sources */,
92899295
D2A7841229A53B2F003B03BB /* File.swift in Sources */,

DatadogCore/Sources/Core/Upload/DataUploader.swift

+7-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,13 @@ internal final class DataUploader: DataUploaderType {
5858

5959
let semaphore = DispatchSemaphore(value: 0)
6060

61-
httpClient.send(request: request) { result in
61+
#if DD_BENCHMARK
62+
let delegate: URLSessionTaskDelegate = BenchmarkURLSessionTaskDelegate(track: featureName)
63+
#else
64+
let delegate: URLSessionTaskDelegate? = nil
65+
#endif
66+
67+
httpClient.send(request: request, delegate: delegate) { result in
6268
switch result {
6369
case .success(let httpResponse):
6470
uploadStatus = DataUploadStatus(

DatadogCore/Sources/Core/Upload/HTTPClient.swift

+12-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@ internal protocol HTTPClient {
1111
/// Sends the provided request using HTTP.
1212
/// - Parameters:
1313
/// - request: The request to be sent.
14+
/// - delegate: The task-specific delegate.
1415
/// - completion: A closure that receives a Result containing either an HTTPURLResponse or an Error.
15-
func send(request: URLRequest, completion: @escaping (Result<HTTPURLResponse, Error>) -> Void)
16+
func send(request: URLRequest, delegate: URLSessionTaskDelegate?, completion: @escaping (Result<HTTPURLResponse, Error>) -> Void)
17+
}
18+
19+
extension HTTPClient {
20+
/// Sends the provided request using HTTP.
21+
/// - Parameters:
22+
/// - request: The request to be sent.
23+
/// - completion: A closure that receives a Result containing either an HTTPURLResponse or an Error.
24+
func send(request: URLRequest, completion: @escaping (Result<HTTPURLResponse, Error>) -> Void) {
25+
self.send(request: request, delegate: nil, completion: completion)
26+
}
1627
}

DatadogCore/Sources/Core/Upload/URLSessionClient.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,13 @@ internal class URLSessionClient: HTTPClient {
3535
self.session = session
3636
}
3737

38-
func send(request: URLRequest, completion: @escaping (Result<HTTPURLResponse, Error>) -> Void) {
38+
func send(request: URLRequest, delegate: URLSessionTaskDelegate?, completion: @escaping (Result<HTTPURLResponse, Error>) -> Void) {
3939
let task = session.dataTask(with: request) { data, response, error in
4040
completion(httpClientResult(for: (data, response, error)))
4141
}
42+
if #available(iOS 15.0, tvOS 15.0, watchOS 8.0, *) {
43+
task.delegate = delegate
44+
}
4245
task.resume()
4346
}
4447
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2019-Present Datadog, Inc.
5+
*/
6+
7+
import Foundation
8+
import DatadogInternal
9+
10+
/// Common definitions forcallencting metrics during benchmark execution..
11+
internal final class BenchmarkURLSessionTaskDelegate: NSObject, URLSessionTaskDelegate {
12+
let track: String
13+
14+
init(track: String) {
15+
self.track = track
16+
}
17+
18+
func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) {
19+
bench.meter.gauge(metric: "ios.benchmark.reponse_latency")
20+
.record(metrics.taskInterval.duration, attributes: ["track": track])
21+
}
22+
}

DatadogCore/Tests/Datadog/Mocks/HTTPClientMock.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ internal class HTTPClientMock: HTTPClient {
4242

4343
// MARK: - HTTPClient conformance
4444

45-
func send(request: URLRequest, completion: @escaping (Result<HTTPURLResponse, Error>) -> Void) {
45+
func send(request: URLRequest, delegate: URLSessionTaskDelegate?, completion: @escaping (Result<HTTPURLResponse, any Error>) -> Void) {
4646
queue.async {
4747
completion(self.result(request))
4848
self.requests.append(request)

0 commit comments

Comments
 (0)