Skip to content

Commit c69b1ff

Browse files
Add support for network request completed field. (#8194)
* Add support for network request completed field. * Update CHANGELOG. * Clean up log messages * Address comments
1 parent 76d0144 commit c69b1ff

File tree

7 files changed

+23
-12
lines changed

7 files changed

+23
-12
lines changed

FirebasePerformance/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Version 8.2.0
22
* Update log messages with proper log levels.
3+
* Fix empty values in `network_info.request_completed_time_us` field from the [data schema](https://firebase.google.com/docs/perf-mon/bigquery-export#detailed_data_schema).
34
* Fix a crash on FPRSessionDetails. (#8139)
45

56
# Version 8.1.0

FirebasePerformance/Sources/Instrumentation/Network/Delegates/FPRNSURLConnectionDelegate.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@ - (void)connection:(NSURLConnection *)connection
5151
totalBytesWritten:(NSInteger)totalBytesWritten
5252
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite {
5353
FPRNetworkTrace *trace = [FPRNetworkTrace networkTraceFromObject:connection];
54-
[trace checkpointState:FPRNetworkTraceCheckpointStateResponseReceived];
5554
trace.requestSize = totalBytesWritten;
55+
if (totalBytesWritten >= totalBytesExpectedToWrite) {
56+
[trace checkpointState:FPRNetworkTraceCheckpointStateRequestCompleted];
57+
}
5658
}
5759

5860
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

FirebasePerformance/Sources/Instrumentation/Network/Delegates/FPRNSURLConnectionDelegateInstrument.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,10 @@ void InstrumentConnectionAllTheTotals(FPRClassInstrumentor *instrumentor) {
141141
setReplacingBlock:^(id object, NSURLConnection *connection, NSInteger bytesWritten,
142142
NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {
143143
FPRNetworkTrace *trace = [FPRNetworkTrace networkTraceFromObject:connection];
144-
[trace checkpointState:FPRNetworkTraceCheckpointStateResponseReceived];
145144
trace.requestSize = totalBytesWritten;
145+
if (totalBytesWritten >= totalBytesExpectedToWrite) {
146+
[trace checkpointState:FPRNetworkTraceCheckpointStateRequestCompleted];
147+
}
146148
typedef void (*OriginalImp)(id, SEL, NSURLConnection *, NSInteger, NSInteger, NSInteger);
147149
((OriginalImp)currentIMP)(object, selector, connection, bytesWritten, totalBytesWritten,
148150
totalBytesExpectedToWrite);

FirebasePerformance/Sources/Instrumentation/Network/Delegates/FPRNSURLSessionDelegate.m

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,7 @@ - (void)URLSession:(NSURLSession *)session
4040
FPRNetworkTrace *trace = [FPRNetworkTrace networkTraceFromObject:task];
4141
trace.requestSize = totalBytesSent;
4242
if (totalBytesSent >= totalBytesExpectedToSend) {
43-
if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) {
44-
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
45-
[trace didCompleteRequestWithResponse:response error:task.error];
46-
[FPRNetworkTrace removeNetworkTraceFromObject:task];
47-
}
43+
[trace checkpointState:FPRNetworkTraceCheckpointStateRequestCompleted];
4844
}
4945
} @catch (NSException *exception) {
5046
FPRLogWarning(kFPRNetworkTraceNotTrackable, @"Unable to track network request.");

FirebasePerformance/Sources/Instrumentation/Network/Delegates/FPRNSURLSessionDelegateInstrument.m

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,7 @@ void InstrumentURLSessionTaskDidSendBodyDataTotalBytesSentTotalBytesExpectedToSe
8383
FPRNetworkTrace *trace = [FPRNetworkTrace networkTraceFromObject:task];
8484
trace.requestSize = totalBytesSent;
8585
if (totalBytesSent >= totalBytesExpectedToSend) {
86-
if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) {
87-
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
88-
[trace didCompleteRequestWithResponse:response error:task.error];
89-
[FPRNetworkTrace removeNetworkTraceFromObject:task];
90-
}
86+
[trace checkpointState:FPRNetworkTraceCheckpointStateRequestCompleted];
9187
}
9288
} @catch (NSException *exception) {
9389
FPRLogWarning(kFPRNetworkTraceNotTrackable, @"Unable to track network request.");

FirebasePerformance/Tests/Unit/Instruments/FPRNSURLConnectionInstrumentTest.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,10 +364,17 @@ - (void)testConnectionDidSendBodyDataTotalBytesWrittenTotalBytesExpectedToWrite
364364
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:delegate];
365365
[connection start];
366366
XCTAssertNotNil([FPRNetworkTrace networkTraceFromObject:connection]);
367+
FPRNetworkTrace *networkTrace = [FPRNetworkTrace networkTraceFromObject:connection];
368+
367369
[self waitAndRunBlockAfterResponse:^(id self, GCDWebServerRequest *_Nonnull request,
368370
GCDWebServerResponse *_Nonnull response) {
369371
XCTAssertTrue(
370372
delegate.connectionDidSendBodyDataTotalBytesWrittenTotalBytesExpectedToWriteCalled);
373+
XCTAssert(networkTrace.requestSize > 0);
374+
XCTAssert(
375+
[networkTrace
376+
timeIntervalBetweenCheckpointState:FPRNetworkTraceCheckpointStateInitiated
377+
andState:FPRNetworkTraceCheckpointStateRequestCompleted] > 0);
371378
XCTAssertNil([FPRNetworkTrace networkTraceFromObject:connection]);
372379
}];
373380
[instrument deregisterInstrumentors];

FirebasePerformance/Tests/Unit/Instruments/FPRNSURLSessionInstrumentTest.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,9 +387,16 @@ - (void)testDelegateURLSessionTaskDidSendBodyDataTotalBytesSentTotalBytesExpecte
387387
[uploadTask resume];
388388

389389
XCTAssertNotNil([FPRNetworkTrace networkTraceFromObject:uploadTask]);
390+
FPRNetworkTrace *networkTrace = [FPRNetworkTrace networkTraceFromObject:uploadTask];
391+
390392
[self waitAndRunBlockAfterResponse:^(id self, GCDWebServerRequest *_Nonnull request,
391393
GCDWebServerResponse *_Nonnull response) {
392394
XCTAssertTrue(delegate.URLSessionTaskDidSendBodyDataTotalBytesSentTotalBytesExpectedCalled);
395+
XCTAssert(networkTrace.requestSize > 0);
396+
XCTAssert(
397+
[networkTrace
398+
timeIntervalBetweenCheckpointState:FPRNetworkTraceCheckpointStateInitiated
399+
andState:FPRNetworkTraceCheckpointStateRequestCompleted] > 0);
393400
XCTAssertNil([FPRNetworkTrace networkTraceFromObject:uploadTask]);
394401
}];
395402
[instrument deregisterInstrumentors];

0 commit comments

Comments
 (0)