summaryrefslogtreecommitdiff
path: root/apct-tests
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2023-11-15 12:40:39 -0500
committerJohn Reck <jreck@google.com>2023-11-15 19:06:13 -0500
commit6256c0f500ca852ba85c4f30579600f1b63cd4ab (patch)
tree434ff25cd6218d0c3906cba813276096f80a9343 /apct-tests
parent3b84c2ca315399696f2aab72ee9221d838923c9c (diff)
downloadbase-6256c0f500ca852ba85c4f30579600f1b63cd4ab.tar.gz
Only use the gainmap shader if we might need it
Skip using the gainmap shader when drawing to a bitmap with a known SDR colorspace as it'll be a no-op in rendering results since W=1.0, but it'll be very expensive in runtime due to CPU evaluation of the SKSL shader. Before: createScaledBitmapWithGainmap_median (ns): 179,455,037 After: createScaledBitmapWithGainmap_median (ns): 15,643,742 Bug: 311085927 Test: benchmark in CL Change-Id: I3f2506a2bd86bbe29c6e0837d31e4a231a7c182a
Diffstat (limited to 'apct-tests')
-rw-r--r--apct-tests/perftests/core/res/drawable-nodpi/fountain_night.jpgbin0 -> 3579758 bytes
-rw-r--r--apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java43
2 files changed, 43 insertions, 0 deletions
diff --git a/apct-tests/perftests/core/res/drawable-nodpi/fountain_night.jpg b/apct-tests/perftests/core/res/drawable-nodpi/fountain_night.jpg
new file mode 100644
index 000000000000..d8b2d759e4c0
--- /dev/null
+++ b/apct-tests/perftests/core/res/drawable-nodpi/fountain_night.jpg
Binary files differ
diff --git a/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java b/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java
index f84a0d037ca5..e5a06c9bd146 100644
--- a/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java
+++ b/apct-tests/perftests/core/src/android/graphics/perftests/CanvasPerfTest.java
@@ -16,20 +16,29 @@
package android.graphics.perftests;
+import static org.junit.Assert.assertTrue;
+
+import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Color;
+import android.graphics.ImageDecoder;
import android.graphics.Paint;
import android.graphics.RecordingCanvas;
import android.graphics.RenderNode;
import android.perftests.utils.BenchmarkState;
import android.perftests.utils.PerfStatusReporter;
+import androidx.test.InstrumentationRegistry;
import androidx.test.filters.LargeTest;
+import com.android.perftests.core.R;
+
import org.junit.Rule;
import org.junit.Test;
+import java.io.IOException;
+
@LargeTest
public class CanvasPerfTest {
@Rule
@@ -93,4 +102,38 @@ public class CanvasPerfTest {
node.end(canvas);
}
}
+
+ @Test
+ public void testCreateScaledBitmap() throws IOException {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ final Context context = InstrumentationRegistry.getContext();
+ Bitmap source = ImageDecoder.decodeBitmap(
+ ImageDecoder.createSource(context.getResources(), R.drawable.fountain_night),
+ (decoder, info, source1) -> {
+ decoder.setAllocator(ImageDecoder.ALLOCATOR_SOFTWARE);
+ });
+ source.setGainmap(null);
+
+ while (state.keepRunning()) {
+ Bitmap.createScaledBitmap(source, source.getWidth() / 2, source.getHeight() / 2, true)
+ .recycle();
+ }
+ }
+
+ @Test
+ public void testCreateScaledBitmapWithGainmap() throws IOException {
+ BenchmarkState state = mPerfStatusReporter.getBenchmarkState();
+ final Context context = InstrumentationRegistry.getContext();
+ Bitmap source = ImageDecoder.decodeBitmap(
+ ImageDecoder.createSource(context.getResources(), R.drawable.fountain_night),
+ (decoder, info, source1) -> {
+ decoder.setAllocator(ImageDecoder.ALLOCATOR_SOFTWARE);
+ });
+ assertTrue(source.hasGainmap());
+
+ while (state.keepRunning()) {
+ Bitmap.createScaledBitmap(source, source.getWidth() / 2, source.getHeight() / 2, true)
+ .recycle();
+ }
+ }
}