Add tests for new reuse formats (all) and density scaling
Change-Id: I69e76fd5bc885aaeaed3ee638fe153448412f25c
diff --git a/tests/tests/graphics/src/android/graphics/cts/BitmapFactoryTest.java b/tests/tests/graphics/src/android/graphics/cts/BitmapFactoryTest.java
index 6e6e6b2..914a0bc 100644
--- a/tests/tests/graphics/src/android/graphics/cts/BitmapFactoryTest.java
+++ b/tests/tests/graphics/src/android/graphics/cts/BitmapFactoryTest.java
@@ -242,7 +242,7 @@
assertEquals(START_WIDTH, b.getWidth());
}
- public void testDecodeReuse1() throws IOException {
+ public void testDecodeReuseBasic() throws IOException {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
options.inSampleSize = 0; // treated as 1
@@ -258,28 +258,24 @@
assertEquals(originalSize, pass.getByteCount());
assertEquals(originalSize, pass.getAllocationByteCount());
- assertEquals(start, pass);
+ assertSame(start, pass);
assertTrue(pass.isMutable());
}
- public void testDecodeReuse2() throws IOException {
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inMutable = true;
- options.inScaled = false;
- Bitmap original = BitmapFactory.decodeResource(mRes, R.drawable.robot, options);
- int originalSize = original.getByteCount();
- assertEquals(originalSize, original.getAllocationByteCount());
+ public void testDecodeReuseFormats() throws IOException {
+ // reuse should support all image formats
+ for (int i = 0; i < RES_IDS.length; ++i) {
+ Bitmap reuseBuffer = Bitmap.createBitmap(1000000, 1, Bitmap.Config.ALPHA_8);
- options.inBitmap = original;
- options.inSampleSize = 4;
- Bitmap reduced = BitmapFactory.decodeResource(mRes, R.drawable.robot, options);
-
- assertEquals(original, reduced);
- assertEquals(originalSize, reduced.getAllocationByteCount());
- assertEquals(originalSize, reduced.getByteCount() * 16);
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inBitmap = reuseBuffer;
+ options.inSampleSize = 5;
+ Bitmap decoded = BitmapFactory.decodeResource(mRes, RES_IDS[i], options);
+ assertSame(reuseBuffer, decoded);
+ }
}
- public void testDecodeReuse3() throws IOException {
+ public void testDecodeReuseFailure() throws IOException {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
options.inScaled = false;
@@ -297,6 +293,63 @@
assertTrue(failedCorrectly);
}
+ public void testDecodeReuseScaling() throws IOException {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inMutable = true;
+ options.inScaled = false;
+ Bitmap original = BitmapFactory.decodeResource(mRes, R.drawable.robot, options);
+ int originalSize = original.getByteCount();
+ assertEquals(originalSize, original.getAllocationByteCount());
+
+ options.inBitmap = original;
+ options.inSampleSize = 4;
+ Bitmap reduced = BitmapFactory.decodeResource(mRes, R.drawable.robot, options);
+
+ assertSame(original, reduced);
+ assertEquals(originalSize, reduced.getAllocationByteCount());
+ assertEquals(originalSize, reduced.getByteCount() * 16);
+ }
+
+ public void testDecodeReuseDoubleScaling() throws IOException {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inMutable = true;
+ options.inScaled = false;
+ options.inSampleSize = 1;
+ Bitmap original = BitmapFactory.decodeResource(mRes, R.drawable.robot, options);
+ int originalSize = original.getByteCount();
+
+ // Verify that inSampleSize and density scaling both work with reuse concurrently
+ options.inBitmap = original;
+ options.inScaled = true;
+ options.inSampleSize = 2;
+ options.inDensity = 2;
+ options.inTargetDensity = 4;
+ Bitmap doubleScaled = BitmapFactory.decodeResource(mRes, R.drawable.robot, options);
+
+ assertSame(original, doubleScaled);
+ assertEquals(4, doubleScaled.getDensity());
+ assertEquals(originalSize, doubleScaled.getByteCount());
+ }
+
+ public void testDecodeReuseEquivalentScaling() throws IOException {
+ BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inMutable = true;
+ options.inScaled = true;
+ options.inDensity = 4;
+ options.inTargetDensity = 2;
+ Bitmap densityReduced = BitmapFactory.decodeResource(mRes, R.drawable.robot, options);
+ assertEquals(2, densityReduced.getDensity());
+ options.inBitmap = densityReduced;
+ options.inDensity = 0;
+ options.inScaled = false;
+ options.inSampleSize = 2;
+ Bitmap scaleReduced = BitmapFactory.decodeResource(mRes, R.drawable.robot, options);
+ // verify that density isn't incorrectly carried over during bitmap reuse
+ assertFalse(densityReduced.getDensity() == 2);
+ assertFalse(densityReduced.getDensity() == 0);
+ assertSame(densityReduced, scaleReduced);
+ }
+
private byte[] obtainArray() {
ByteArrayOutputStream stm = new ByteArrayOutputStream();
Options opt = new BitmapFactory.Options();