36
export let componentEffectStartTime: number = -1.1;
37
export let componentEffectEndTime: number = -1.1;
38
39
+export let blockingClampTime: number = -0;
40
export let blockingUpdateTime: number = -1.1; // First sync setState scheduled.
41
export let blockingEventTime: number = -1.1; // Event timeStamp of the first setState.
42
export let blockingEventType: null | string = null; // Event type of the first setState.
43
+export let blockingEventIsRepeat: boolean = false;
44
// TODO: This should really be one per Transition lane.
45
+export let transitionClampTime: number = -0;
46
export let transitionStartTime: number = -1.1; // First startTransition call before setState.
47
export let transitionUpdateTime: number = -1.1; // First transition setState scheduled.
48
export let transitionEventTime: number = -1.1; // Event timeStamp of the first transition.
49
export let transitionEventType: null | string = null; // Event type of the first transition.
50
+export let transitionEventIsRepeat: boolean = false;
51
52
export function startUpdateTimerByLane(lane: Lane): void {
53
if (!enableProfilerTimer || !enableComponentPerformanceTrack) {
56
if (isSyncLane(lane) || isBlockingLane(lane)) {
57
if (blockingUpdateTime < 0) {
58
blockingUpdateTime = now();
55
- blockingEventTime = resolveEventTimeStamp();
56
- blockingEventType = resolveEventType();
59
+ const newEventTime = resolveEventTimeStamp();
60
+ const newEventType = resolveEventType();
61
+ blockingEventIsRepeat =
62
+ newEventTime === blockingEventTime &&
63
+ newEventType === blockingEventType;
64
+ blockingEventTime = newEventTime;
65
+ blockingEventType = newEventType;
66
}
67
} else if (isTransitionLane(lane)) {
68
if (transitionUpdateTime < 0) {
69
transitionUpdateTime = now();
70
if (transitionStartTime < 0) {
62
- transitionEventTime = resolveEventTimeStamp();
63
- transitionEventType = resolveEventType();
71
+ const newEventTime = resolveEventTimeStamp();
72
+ const newEventType = resolveEventType();
73
+ transitionEventIsRepeat =
74
+ newEventTime === transitionEventTime &&
75
+ newEventType === transitionEventType;
76
+ transitionEventTime = newEventTime;
77
+ transitionEventType = newEventType;
78
}
79
}
80
}
90
}
91
if (transitionStartTime < 0 && transitionUpdateTime < 0) {
92
transitionStartTime = now();
79
- transitionEventTime = resolveEventTimeStamp();
80
- transitionEventType = resolveEventType();
93
+ const newEventTime = resolveEventTimeStamp();
94
+ const newEventType = resolveEventType();
95
+ transitionEventIsRepeat =
96
+ newEventTime === transitionEventTime &&
97
+ newEventType === transitionEventType;
98
+ transitionEventTime = newEventTime;
99
+ transitionEventType = newEventType;
100
}
101
}
102
134
// If we had new updates come in while we were still rendering or committing, we don't want
135
// those update times to create overlapping tracks in the performance timeline so we clamp
136
// them to the end of the commit phase.
118
- if (blockingUpdateTime >= 0 && blockingUpdateTime < finalTime) {
119
- blockingUpdateTime = finalTime;
120
- }
121
- if (blockingEventTime >= 0 && blockingEventTime < finalTime) {
122
- blockingEventTime = finalTime;
123
- }
137
+ blockingClampTime = finalTime;
138
}
139
140
export function clampTransitionTimers(finalTime: number): void {
144
// If we had new updates come in while we were still rendering or committing, we don't want
145
// those update times to create overlapping tracks in the performance timeline so we clamp
146
// them to the end of the commit phase.
133
- if (transitionStartTime >= 0 && transitionStartTime < finalTime) {
134
- transitionStartTime = finalTime;
135
- }
136
- if (transitionUpdateTime >= 0 && transitionUpdateTime < finalTime) {
137
- transitionUpdateTime = finalTime;
138
- }
139
- if (transitionEventTime >= 0 && transitionEventTime < finalTime) {
140
- transitionEventTime = finalTime;
141
- }
147
+ transitionClampTime = finalTime;
148
}
149
150
export function pushNestedEffectDurations(): number {