Merge "Add mandelbrot to compute perf"

This commit is contained in:
Jason Sams
2011-10-18 17:44:33 -07:00
committed by Android (Google) Code Review
3 changed files with 92 additions and 0 deletions

View File

@@ -27,6 +27,7 @@ import android.widget.ImageView;
public class ComputePerf extends Activity {
private LaunchTest mLT;
private Mandelbrot mMandel;
private RenderScript mRS;
@Override
@@ -38,6 +39,10 @@ public class ComputePerf extends Activity {
mLT = new LaunchTest(mRS, getResources());
mLT.run();
mLT.run();
mMandel = new Mandelbrot(mRS, getResources());
mMandel.run();
}
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (C) 2011 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 com.example.android.rs.computeperf;
import android.content.res.Resources;
import android.renderscript.*;
public class Mandelbrot implements Runnable {
private RenderScript mRS;
private Allocation mAllocationXY;
private ScriptC_mandelbrot mScript;
Mandelbrot(RenderScript rs, Resources res) {
mRS = rs;
mScript = new ScriptC_mandelbrot(mRS, res, R.raw.mandelbrot);
Type.Builder tb = new Type.Builder(rs, Element.U8_4(rs));
tb.setX(mScript.get_gDimX());
tb.setY(mScript.get_gDimY());
mAllocationXY = Allocation.createTyped(rs, tb.create());
}
public void run() {
long t = java.lang.System.currentTimeMillis();
mScript.forEach_root(mAllocationXY);
mRS.finish();
t = java.lang.System.currentTimeMillis() - t;
android.util.Log.v("ComputePerf", "mandelbrot ms " + t);
}
}

View File

@@ -0,0 +1,42 @@
// Copyright (C) 2011 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.
#pragma version(1)
#pragma rs java_package_name(com.example.android.rs.computeperf)
const int gMaxIteration = 500;
const int gDimX = 1024;
const int gDimY = 1024;
void root(uchar4 *v_out, uint32_t x, uint32_t y) {
float2 p;
p.x = -2.5f + ((float)x / gDimX) * 3.5f;
p.y = -1.f + ((float)y / gDimY) * 2.f;
float2 t = 0;
int iteration = 0;
while((t.x*t.x + t.y*t.y < 4.f) && (iteration < gMaxIteration)) {
float2 t2 = t * t;
float xtemp = t2.x - t2.y + p.x;
t.y = 2 * t.x * t.y + p.y;
t.x = xtemp;
iteration++;
}
if(iteration >= gMaxIteration) {
*v_out = 0;
} else {
*v_out = (uchar4){iteration & 0xff, (iteration >> 6) & 0xff, 0x8f, 0xff};
}
}