Skip to content

Commit ed017c4

Browse files
authored
Fix lack of fallback values for user timing 3 implementation (#36)
1 parent b2f2550 commit ed017c4

File tree

4 files changed

+76
-2
lines changed

4 files changed

+76
-2
lines changed

packages/react-native-performance/package.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
},
1111
"main": "lib/commonjs/index",
1212
"module": "lib/module/index",
13-
"types": "lib/typescript/src/index.d.ts",
13+
"types": "lib/typescript/index.d.ts",
1414
"react-native": "src/index",
1515
"source": "src/index",
1616
"files": [
@@ -53,7 +53,12 @@
5353
"targets": [
5454
"commonjs",
5555
"module",
56-
"typescript"
56+
[
57+
"typescript",
58+
{
59+
"project": "tsconfig.build.json"
60+
}
61+
]
5762
]
5863
}
5964
}

packages/react-native-performance/src/performance.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ export const createPerformance = (now: () => number = defaultNow) => {
127127
let detail: any;
128128

129129
if (
130+
startOrMeasureOptions &&
130131
typeof startOrMeasureOptions === 'object' &&
131132
startOrMeasureOptions.constructor == Object
132133
) {
@@ -162,6 +163,8 @@ export const createPerformance = (now: () => number = defaultNow) => {
162163
end =
163164
convertMarkToTimestamp(startOrMeasureOptions.start) +
164165
convertMarkToTimestamp(startOrMeasureOptions.duration);
166+
} else {
167+
end = now();
165168
}
166169

167170
if (startOrMeasureOptions && startOrMeasureOptions.start) {
@@ -174,6 +177,8 @@ export const createPerformance = (now: () => number = defaultNow) => {
174177
start =
175178
convertMarkToTimestamp(startOrMeasureOptions.end) -
176179
convertMarkToTimestamp(startOrMeasureOptions.duration);
180+
} else {
181+
start = timeOrigin;
177182
}
178183
} else {
179184
if (endMark) {
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { createPerformance } from '../src/performance';
2+
3+
test('Performance.measure with start', () => {
4+
const mockNow = jest.fn();
5+
mockNow.mockReturnValue(1);
6+
const { performance } = createPerformance(mockNow);
7+
8+
mockNow.mockReturnValue(2);
9+
performance.mark('start');
10+
mockNow.mockReturnValue(8);
11+
const measure1 = performance.measure('measure1', 'start');
12+
const measure2 = performance.measure('measure2', { start: 'start' });
13+
expect(measure1.startTime).toBe(2);
14+
expect(measure2.startTime).toBe(2);
15+
expect(measure1.duration).toBe(6);
16+
expect(measure2.duration).toBe(6);
17+
});
18+
19+
test('Performance.measure with end', () => {
20+
const mockNow = jest.fn();
21+
mockNow.mockReturnValue(1);
22+
const { performance } = createPerformance(mockNow);
23+
24+
mockNow.mockReturnValue(5);
25+
performance.mark('end');
26+
mockNow.mockReturnValue(8);
27+
const measure1 = performance.measure('measure1', null, 'end');
28+
const measure2 = performance.measure('measure2', {
29+
end: 'end',
30+
detail: 'lol',
31+
});
32+
expect(measure1.startTime).toBe(1);
33+
expect(measure2.startTime).toBe(1);
34+
expect(measure1.duration).toBe(4);
35+
expect(measure2.duration).toBe(4);
36+
});
37+
38+
test('Performance.measure with duration', () => {
39+
const mockNow = jest.fn();
40+
mockNow.mockReturnValue(1);
41+
const { performance } = createPerformance(mockNow);
42+
43+
mockNow.mockReturnValue(2);
44+
performance.mark('start');
45+
mockNow.mockReturnValue(5);
46+
performance.mark('end');
47+
mockNow.mockReturnValue(8);
48+
const measure1 = performance.measure('measure2', {
49+
duration: 1,
50+
end: 'end',
51+
});
52+
expect(measure1.startTime).toBe(4);
53+
expect(measure1.duration).toBe(1);
54+
const measure2 = performance.measure('measure2', {
55+
duration: 2,
56+
start: 'start',
57+
});
58+
expect(measure2.startTime).toBe(2);
59+
expect(measure2.duration).toBe(2);
60+
});
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"extends": "./tsconfig.json",
3+
"exclude": ["test"]
4+
}

0 commit comments

Comments
 (0)