mirror of
https://github.com/androidx/media.git
synced 2025-04-29 22:36:54 +08:00
Resolve race condition and NPE for EditingMetricsCollectorTest
Previously, `exportSuccess_populatesEditingEndedEvent` and `exportError_populatesEditingEndedEvent` used an AtomicReference to capture the EditingEndedEvent. However, this led to a race condition where `EditingEndedEvent` was accessed before it was set in the `onMetricsReported` callback, resulting in a NullPointerException. This change replaces the AtomicReference with a SettableFuture to ensure the test waits for the event to be reported before asserting its value. PiperOrigin-RevId: 739146511
This commit is contained in:
parent
3be1d5646f
commit
5f7066a9d9
@ -43,6 +43,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Range;
|
||||
import com.google.common.util.concurrent.SettableFuture;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
@ -113,7 +114,7 @@ public class EditingMetricsCollectorTest {
|
||||
testId,
|
||||
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||
AtomicReference<EditingEndedEvent> editingEndedEventAtomicReference = new AtomicReference<>();
|
||||
SettableFuture<EditingEndedEvent> editingEndedEventFuture = SettableFuture.create();
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setUsePlatformDiagnostics(true)
|
||||
@ -124,7 +125,7 @@ public class EditingMetricsCollectorTest {
|
||||
|
||||
@Override
|
||||
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
||||
editingEndedEventAtomicReference.set(editingEndedEvent);
|
||||
editingEndedEventFuture.set(editingEndedEvent);
|
||||
}
|
||||
}))
|
||||
.build();
|
||||
@ -150,7 +151,7 @@ public class EditingMetricsCollectorTest {
|
||||
.build()
|
||||
.run(testId, composition);
|
||||
|
||||
EditingEndedEvent editingEndedEvent = editingEndedEventAtomicReference.get();
|
||||
EditingEndedEvent editingEndedEvent = editingEndedEventFuture.get();
|
||||
assertThat(editingEndedEvent.getFinalState())
|
||||
.isEqualTo(EditingEndedEvent.FINAL_STATE_SUCCEEDED);
|
||||
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
||||
@ -247,7 +248,7 @@ public class EditingMetricsCollectorTest {
|
||||
testId,
|
||||
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||
AtomicReference<EditingEndedEvent> editingEndedEventAtomicReference = new AtomicReference<>();
|
||||
SettableFuture<EditingEndedEvent> editingEndedEventFuture = SettableFuture.create();
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
.setUsePlatformDiagnostics(true)
|
||||
@ -258,7 +259,7 @@ public class EditingMetricsCollectorTest {
|
||||
|
||||
@Override
|
||||
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
||||
editingEndedEventAtomicReference.set(editingEndedEvent);
|
||||
editingEndedEventFuture.set(editingEndedEvent);
|
||||
}
|
||||
}))
|
||||
.setMuxerFactory(new FailingMuxerFactory())
|
||||
@ -273,7 +274,7 @@ public class EditingMetricsCollectorTest {
|
||||
.build()
|
||||
.run(testId, audioVideoItem));
|
||||
|
||||
EditingEndedEvent editingEndedEvent = editingEndedEventAtomicReference.get();
|
||||
EditingEndedEvent editingEndedEvent = editingEndedEventFuture.get();
|
||||
assertThat(editingEndedEvent.getFinalState()).isEqualTo(EditingEndedEvent.FINAL_STATE_ERROR);
|
||||
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
||||
assertThat(editingEndedEvent.getExporterName()).isEqualTo(EXPORTER_NAME);
|
||||
@ -290,7 +291,7 @@ public class EditingMetricsCollectorTest {
|
||||
testId,
|
||||
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||
AtomicReference<EditingEndedEvent> editingEndedEventAtomicReference = new AtomicReference<>();
|
||||
SettableFuture<EditingEndedEvent> editingEndedEventFuture = SettableFuture.create();
|
||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||
Transformer transformer =
|
||||
new Transformer.Builder(context)
|
||||
@ -302,7 +303,7 @@ public class EditingMetricsCollectorTest {
|
||||
|
||||
@Override
|
||||
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
||||
editingEndedEventAtomicReference.set(editingEndedEvent);
|
||||
editingEndedEventFuture.set(editingEndedEvent);
|
||||
}
|
||||
}))
|
||||
.setMuxerFactory(
|
||||
@ -321,7 +322,7 @@ public class EditingMetricsCollectorTest {
|
||||
}
|
||||
InstrumentationRegistry.getInstrumentation().runOnMainSync(transformer::cancel);
|
||||
|
||||
EditingEndedEvent editingEndedEvent = editingEndedEventAtomicReference.get();
|
||||
EditingEndedEvent editingEndedEvent = editingEndedEventFuture.get();
|
||||
assertThat(editingEndedEvent.getFinalState()).isEqualTo(EditingEndedEvent.FINAL_STATE_CANCELED);
|
||||
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
||||
assertThat(editingEndedEvent.getExporterName()).isEqualTo(EXPORTER_NAME);
|
||||
|
Loading…
x
Reference in New Issue
Block a user