/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.graphics; import junit.framework.Assert; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.test.AndroidTestCase; import android.test.PerformanceTestCase; import android.test.suitebuilder.annotation.Suppress; import android.util.Log; import com.android.frameworks.graphicstests.R; /** * Graphics Performance Tests * */ //We don't want to run these perf tests in the continuous build. @Suppress public class GraphicsPerformanceTests { private static final String TAG = "GfxPerf"; public static String[] children() { return new String[] { // test decoding bitmaps of various sizes DecodeBitmapTest.class.getName(), // odd-sized bitmap drawing tests DrawBitmap7x7.class.getName(), DrawBitmap15x15.class.getName(), DrawBitmap31x31.class.getName(), DrawBitmap63x63.class.getName(), DrawBitmap127x127.class.getName(), DrawBitmap319x239.class.getName(), DrawBitmap319x479.class.getName(), // even-sized bitmap drawing tests DrawBitmap8x8.class.getName(), DrawBitmap16x16.class.getName(), DrawBitmap32x32.class.getName(), DrawBitmap64x64.class.getName(), DrawBitmap128x128.class.getName(), DrawBitmap320x240.class.getName(), DrawBitmap320x480.class.getName()}; } /** * Base class for all graphics tests * */ public static abstract class GraphicsTestBase extends AndroidTestCase implements PerformanceTestCase { /** Target "screen" (bitmap) width and height */ private static final int DEFAULT_ITERATIONS = 1; private static final int SCREEN_WIDTH = 320; private static final int SCREEN_HEIGHT = 480; /** Number of iterations to pass back to harness. Subclass should override */ protected int mIterations = 1; /** Bitmap we allocate and draw to */ protected Bitmap mDestBitmap; /** Canvas of drawing routines */ protected Canvas mCanvas; /** Style and color information (uses defaults) */ protected Paint mPaint; @Override public void setUp() throws Exception { super.setUp(); // Create drawable bitmap for rendering into mDestBitmap = Bitmap.createBitmap(SCREEN_WIDTH, SCREEN_HEIGHT, Bitmap.Config.RGB_565); // Set of drawing routines mCanvas = new Canvas(mDestBitmap); // Styles mPaint = new Paint(); // Ask subclass for number of iterations mIterations = getIterations(); } // A reasonable default public int getIterations() { return DEFAULT_ITERATIONS; } public boolean isPerformanceOnly() { return true; } public int startPerformance(Intermediates intermediates) { intermediates.setInternalIterations(mIterations * 10); return 0; } } /** * Tests time to decode a number of sizes of images. */ public static class DecodeBitmapTest extends GraphicsTestBase { /** Number of times to run this test */ private static final int DECODE_ITERATIONS = 10; /** Used to access package bitmap images */ private Resources mResources; @Override public void setUp() throws Exception { super.setUp(); // For bitmap resources Context context = getContext(); Assert.assertNotNull(context); mResources = context.getResources(); Assert.assertNotNull(mResources); } @Override public int getIterations() { return DECODE_ITERATIONS; } public void testDecodeBitmap() { for (int i = 0; i < DECODE_ITERATIONS; i++) { BitmapFactory.decodeResource(mResources, R.drawable.test16x12); BitmapFactory.decodeResource(mResources, R.drawable.test32x24); BitmapFactory.decodeResource(mResources, R.drawable.test64x48); BitmapFactory.decodeResource(mResources, R.drawable.test128x96); BitmapFactory.decodeResource(mResources, R.drawable.test256x192); BitmapFactory.decodeResource(mResources, R.drawable.test320x240); } } } /** * Base class for bitmap drawing tests * */ public static abstract class DrawBitmapTest extends GraphicsTestBase { /** Number of times to run each draw test */ private static final int ITERATIONS = 1000; /** Bitmap to draw. Allocated by subclass's createBitmap() function. */ private Bitmap mBitmap; @Override public void setUp() throws Exception { super.setUp(); // Invoke subclass's method to create the bitmap mBitmap = createBitmap(); } public int getIterations() { return ITERATIONS; } // Generic abstract function to create bitmap for any given subclass public abstract Bitmap createBitmap(); // Provide convenience test code for all subsequent classes. // Note: Though it would be convenient to declare all of the test*() methods here // and just inherit them, our test harness doesn't support it. So we replicate // a bit of code in each derived test case. public void drawBitmapEven() { for (int i = 0; i < ITERATIONS; i++) { mCanvas.drawBitmap(mBitmap, 0.0f, 0.0f, mPaint); } } public void drawBitmapOdd() { for (int i = 0; i < ITERATIONS; i++) { mCanvas.drawBitmap(mBitmap, 1.0f, 0.0f, mPaint); } } } /** * Test drawing of 7x7 image */ public static class DrawBitmap7x7 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(7, 7, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 15x15 image */ public static class DrawBitmap15x15 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(15, 15, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 31x31 image */ public static class DrawBitmap31x31 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(31, 31, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 63x63 image */ public static class DrawBitmap63x63 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(63, 63, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 127x127 image */ public static class DrawBitmap127x127 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(127, 127, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 319x239 image */ public static class DrawBitmap319x239 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(319, 239, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 319x479 image */ public static class DrawBitmap319x479 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(319, 479, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 8x8 image */ public static class DrawBitmap8x8 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(8, 8, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 16x16 image */ public static class DrawBitmap16x16 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(16, 16, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 32x32 image */ public static class DrawBitmap32x32 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(32, 32, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 64x64 image */ public static class DrawBitmap64x64 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(64, 64, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 128x128 image */ public static class DrawBitmap128x128 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(128, 128, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 320x240 image */ public static class DrawBitmap320x240 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(320, 240, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } /** * Test drawing of 320x480 image */ public static class DrawBitmap320x480 extends DrawBitmapTest { public Bitmap createBitmap() { return Bitmap.createBitmap(320, 480, Bitmap.Config.RGB_565); } public void testDrawBitmapEven() { drawBitmapEven(); } public void testDrawBitmapOdd() { drawBitmapOdd(); } } }