@@ -204,7 +204,8 @@ public synchronized void onActivityResumed(Activity activity) {
204
204
// cases:
205
205
// 1. At app startup, first activity comes to foreground.
206
206
// 2. app switch from background to foreground.
207
- // 3. app already in foreground, current activity is replaced by another activity.
207
+ // 3. app already in foreground, current activity is replaced by another activity, or the
208
+ // current activity was paused then resumed without onStop, for example by an AlertDialog
208
209
if (activityToResumedMap .isEmpty ()) {
209
210
// The first resumed activity means app comes to foreground.
210
211
resumeTime = clock .getTime ();
@@ -221,9 +222,24 @@ public synchronized void onActivityResumed(Activity activity) {
221
222
updateAppState (ApplicationProcessState .FOREGROUND );
222
223
}
223
224
} else {
224
- // case 3: app already in foreground, current activity is replaced by another activity.
225
+ // case 3: app already in foreground, current activity is replaced by another activity, or the
226
+ // current activity was paused then resumed without onStop, for example by an AlertDialog
225
227
activityToResumedMap .put (activity , true );
226
228
}
229
+
230
+ // Screen trace is after session update so the sessionId is not added twice to the Trace
231
+ if (isScreenTraceSupported (activity ) && configResolver .isPerformanceMonitoringEnabled ()) {
232
+ // Starts recording frame metrics for this activity.
233
+ /**
234
+ * TODO: Only add activities that are hardware acceleration enabled so that calling {@link
235
+ * FrameMetricsAggregator#remove(Activity)} will not throw exceptions.
236
+ */
237
+ frameMetricsAggregator .add (activity );
238
+ // Start the Trace
239
+ Trace screenTrace = new Trace (getScreenTraceName (activity ), transportManager , clock , this );
240
+ screenTrace .start ();
241
+ activityToScreenTraceMap .put (activity , screenTrace );
242
+ }
227
243
}
228
244
229
245
/** Returns if this is the cold start of the app. */
0 commit comments