blob: f60ac7bdb5e5c4340a75dae34c0f135ce5958463 [file] [log] [blame]
/*
* 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();
}
}
}