mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +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 androidx.test.platform.app.InstrumentationRegistry;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Range;
|
import com.google.common.collect.Range;
|
||||||
|
import com.google.common.util.concurrent.SettableFuture;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
@ -113,7 +114,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET.videoFormat,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET.videoFormat);
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
AtomicReference<EditingEndedEvent> editingEndedEventAtomicReference = new AtomicReference<>();
|
SettableFuture<EditingEndedEvent> editingEndedEventFuture = SettableFuture.create();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setUsePlatformDiagnostics(true)
|
.setUsePlatformDiagnostics(true)
|
||||||
@ -124,7 +125,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
||||||
editingEndedEventAtomicReference.set(editingEndedEvent);
|
editingEndedEventFuture.set(editingEndedEvent);
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
.build();
|
.build();
|
||||||
@ -150,7 +151,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
.build()
|
.build()
|
||||||
.run(testId, composition);
|
.run(testId, composition);
|
||||||
|
|
||||||
EditingEndedEvent editingEndedEvent = editingEndedEventAtomicReference.get();
|
EditingEndedEvent editingEndedEvent = editingEndedEventFuture.get();
|
||||||
assertThat(editingEndedEvent.getFinalState())
|
assertThat(editingEndedEvent.getFinalState())
|
||||||
.isEqualTo(EditingEndedEvent.FINAL_STATE_SUCCEEDED);
|
.isEqualTo(EditingEndedEvent.FINAL_STATE_SUCCEEDED);
|
||||||
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
||||||
@ -247,7 +248,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET.videoFormat,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET.videoFormat);
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
AtomicReference<EditingEndedEvent> editingEndedEventAtomicReference = new AtomicReference<>();
|
SettableFuture<EditingEndedEvent> editingEndedEventFuture = SettableFuture.create();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setUsePlatformDiagnostics(true)
|
.setUsePlatformDiagnostics(true)
|
||||||
@ -258,7 +259,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
||||||
editingEndedEventAtomicReference.set(editingEndedEvent);
|
editingEndedEventFuture.set(editingEndedEvent);
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
.setMuxerFactory(new FailingMuxerFactory())
|
.setMuxerFactory(new FailingMuxerFactory())
|
||||||
@ -273,7 +274,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
.build()
|
.build()
|
||||||
.run(testId, audioVideoItem));
|
.run(testId, audioVideoItem));
|
||||||
|
|
||||||
EditingEndedEvent editingEndedEvent = editingEndedEventAtomicReference.get();
|
EditingEndedEvent editingEndedEvent = editingEndedEventFuture.get();
|
||||||
assertThat(editingEndedEvent.getFinalState()).isEqualTo(EditingEndedEvent.FINAL_STATE_ERROR);
|
assertThat(editingEndedEvent.getFinalState()).isEqualTo(EditingEndedEvent.FINAL_STATE_ERROR);
|
||||||
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
||||||
assertThat(editingEndedEvent.getExporterName()).isEqualTo(EXPORTER_NAME);
|
assertThat(editingEndedEvent.getExporterName()).isEqualTo(EXPORTER_NAME);
|
||||||
@ -290,7 +291,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET.videoFormat,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET.videoFormat);
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
AtomicReference<EditingEndedEvent> editingEndedEventAtomicReference = new AtomicReference<>();
|
SettableFuture<EditingEndedEvent> editingEndedEventFuture = SettableFuture.create();
|
||||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
@ -302,7 +303,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
public void onMetricsReported(EditingEndedEvent editingEndedEvent) {
|
||||||
editingEndedEventAtomicReference.set(editingEndedEvent);
|
editingEndedEventFuture.set(editingEndedEvent);
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
.setMuxerFactory(
|
.setMuxerFactory(
|
||||||
@ -321,7 +322,7 @@ public class EditingMetricsCollectorTest {
|
|||||||
}
|
}
|
||||||
InstrumentationRegistry.getInstrumentation().runOnMainSync(transformer::cancel);
|
InstrumentationRegistry.getInstrumentation().runOnMainSync(transformer::cancel);
|
||||||
|
|
||||||
EditingEndedEvent editingEndedEvent = editingEndedEventAtomicReference.get();
|
EditingEndedEvent editingEndedEvent = editingEndedEventFuture.get();
|
||||||
assertThat(editingEndedEvent.getFinalState()).isEqualTo(EditingEndedEvent.FINAL_STATE_CANCELED);
|
assertThat(editingEndedEvent.getFinalState()).isEqualTo(EditingEndedEvent.FINAL_STATE_CANCELED);
|
||||||
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
assertThat(editingEndedEvent.getTimeSinceCreatedMillis()).isAtLeast(0);
|
||||||
assertThat(editingEndedEvent.getExporterName()).isEqualTo(EXPORTER_NAME);
|
assertThat(editingEndedEvent.getExporterName()).isEqualTo(EXPORTER_NAME);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user