Skip to content

Commit 71b8ece

Browse files
sahrensfacebook-github-bot
authored andcommitted
Add perf markers in XMLHttpRequest
Summary: ChangeLog: [Both] Adds perf markers for `XMLHttpRequest`s Makes it easier to see JS-based network operations in performance traces. Reviewed By: zackargyle Differential Revision: D19903143 fbshipit-source-id: c5ce60163569e003830d8079cb2b580469d5bd5d
1 parent f3d3732 commit 71b8ece

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

Libraries/Network/XMLHttpRequest.js

+18-2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
const BlobManager = require('../Blob/BlobManager');
1414
const EventTarget = require('event-target-shim');
15+
const GlobalPerformanceLogger = require('react-native/Libraries/Utilities/GlobalPerformanceLogger');
1516
const RCTNetworking = require('./RCTNetworking');
1617

1718
const base64 = require('base64-js');
@@ -132,6 +133,7 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): any) {
132133
_headers: Object;
133134
_lowerCaseResponseHeaders: Object;
134135
_method: ?string = null;
136+
_perfKey: ?string = null;
135137
_response: string | ?Object;
136138
_responseType: ResponseType;
137139
_response: string = '';
@@ -301,6 +303,8 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): any) {
301303
responseURL: ?string,
302304
): void {
303305
if (requestId === this._requestId) {
306+
this._perfKey != null &&
307+
GlobalPerformanceLogger.stopTimespan(this._perfKey);
304308
this.status = status;
305309
this.setResponseHeaders(responseHeaders);
306310
this.setReadyState(this.HEADERS_RECEIVED);
@@ -514,8 +518,20 @@ class XMLHttpRequest extends (EventTarget(...XHR_EVENTS): any) {
514518
}
515519

516520
const doSend = () => {
517-
invariant(this._method, 'Request method needs to be defined.');
518-
invariant(this._url, 'Request URL needs to be defined.');
521+
const friendlyName =
522+
this._trackingName !== 'unknown' ? this._trackingName : this._url;
523+
this._perfKey = 'network_XMLHttpRequest_' + String(friendlyName);
524+
GlobalPerformanceLogger.startTimespan(this._perfKey);
525+
invariant(
526+
this._method,
527+
'XMLHttpRequest method needs to be defined (%s).',
528+
friendlyName,
529+
);
530+
invariant(
531+
this._url,
532+
'XMLHttpRequest URL needs to be defined (%s).',
533+
friendlyName,
534+
);
519535
RCTNetworking.sendRequest(
520536
this._method,
521537
this._trackingName,

0 commit comments

Comments
 (0)