blob: 5d212d245f63ea5142d37d0dce503119181ae5a2 [file] [log] [blame]
package org.robolectric.integrationtests.nativegraphics;
import static android.os.Build.VERSION_CODES.O;
import static java.util.concurrent.TimeUnit.SECONDS;
import android.graphics.Bitmap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
@Config(minSdk = O)
@RunWith(RobolectricTestRunner.class)
public class BitmapLoadingTest {
/**
* There is a potential race that happens if Bitmap classes are loaded by multiple threads. The
* race is due to the lazy initialization of ColorSpace class members in hwui's jni/Graphics.cpp.
*/
@Test
public void bitmapLoading_backgroundThreads_doesNotRace() throws Exception {
ExecutorService executorService = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
executorService.execute(
() -> {
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
// createScaledBitmap triggers lazy ColorSpace member initialization in hwui
// Graphics.cpp.
Bitmap.createScaledBitmap(bitmap, 200, 200, false);
});
}
executorService.shutdown();
executorService.awaitTermination(10, SECONDS);
}
}