diff options
| -rw-r--r-- | core/java/android/test/AndroidTestCase.java | 26 | ||||
| -rw-r--r-- | core/java/com/android/internal/widget/ContactHeaderWidget.java | 14 | ||||
| -rw-r--r-- | core/res/res/values-ko/donottranslate-cldr.xml | 8 | ||||
| -rw-r--r-- | graphics/java/android/renderscript/Allocation.java | 48 | ||||
| -rw-r--r-- | graphics/java/android/renderscript/RenderScript.java | 24 | ||||
| -rw-r--r-- | graphics/jni/android_renderscript_RenderScript.cpp | 91 | ||||
| -rw-r--r-- | libs/rs/java/Film/src/com/android/film/FilmRS.java | 17 | ||||
| -rw-r--r-- | libs/rs/rsAdapter.cpp | 16 | ||||
| -rw-r--r-- | libs/surfaceflinger/LayerBitmap.cpp | 1 | ||||
| -rw-r--r-- | test-runner/android/test/AndroidTestRunner.java | 6 | ||||
| -rw-r--r-- | test-runner/android/test/TestRunner.java | 8 | ||||
| -rw-r--r-- | tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java | 11 | ||||
| -rw-r--r-- | tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java | 6 |
13 files changed, 228 insertions, 48 deletions
diff --git a/core/java/android/test/AndroidTestCase.java b/core/java/android/test/AndroidTestCase.java index de0587ab7366..1015506ba227 100644 --- a/core/java/android/test/AndroidTestCase.java +++ b/core/java/android/test/AndroidTestCase.java @@ -30,6 +30,7 @@ import java.lang.reflect.Field; public class AndroidTestCase extends TestCase { protected Context mContext; + private Context mTestContext; @Override protected void setUp() throws Exception { @@ -43,7 +44,7 @@ public class AndroidTestCase extends TestCase { public void testAndroidTestCaseSetupProperly() { assertNotNull("Context is null. setContext should be called before tests are run", - mContext); + mContext); } public void setContext(Context context) { @@ -55,6 +56,25 @@ public class AndroidTestCase extends TestCase { } /** + * Test context can be used to access resources from the test's own package + * as opposed to the resources from the test target package. Access to the + * latter is provided by the context set with the {@link #setContext} + * method. + * + * @hide + */ + public void setTestContext(Context context) { + mTestContext = context; + } + + /** + * @hide + */ + public Context getTestContext() { + return mTestContext; + } + + /** * Asserts that launching a given activity is protected by a particular permission by * attempting to start the activity and validating that a {@link SecurityException} * is thrown that mentions the permission in its error message. @@ -125,9 +145,9 @@ public class AndroidTestCase extends TestCase { * to scrub out any class variables. This protects against memory leaks in the case where a * test case creates a non-static inner class (thus referencing the test case) and gives it to * someone else to hold onto. - * + * * @param testCaseClass The class of the derived TestCase implementation. - * + * * @throws IllegalAccessException */ protected void scrubClass(final Class<?> testCaseClass) diff --git a/core/java/com/android/internal/widget/ContactHeaderWidget.java b/core/java/com/android/internal/widget/ContactHeaderWidget.java index 94d4edc9bd76..ccb537ac8ad3 100644 --- a/core/java/com/android/internal/widget/ContactHeaderWidget.java +++ b/core/java/com/android/internal/widget/ContactHeaderWidget.java @@ -225,9 +225,10 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList c = mContentResolver.query(Uri.withAppendedPath( RawContacts.CONTENT_FILTER_EMAIL_URI, Uri.encode(emailAddress)), EMAIL_LOOKUP_PROJECTION, null, null, null); - c.moveToFirst(); - long contactId = c.getLong(EMAIL_LOOKUP_CONTACT_ID_COLUMN_INDEX); - bindFromContactId(contactId); + if (c.moveToFirst()) { + long contactId = c.getLong(EMAIL_LOOKUP_CONTACT_ID_COLUMN_INDEX); + bindFromContactId(contactId); + } } finally { if (c != null) { c.close(); @@ -248,9 +249,10 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList try { c = mContentResolver.query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, number), PHONE_LOOKUP_PROJECTION, null, null, null); - c.moveToFirst(); - long contactId = c.getLong(PHONE_LOOKUP_CONTACT_ID_COLUMN_INDEX); - bindFromContactId(contactId); + if (c.moveToFirst()) { + long contactId = c.getLong(PHONE_LOOKUP_CONTACT_ID_COLUMN_INDEX); + bindFromContactId(contactId); + } } finally { if (c != null) { c.close(); diff --git a/core/res/res/values-ko/donottranslate-cldr.xml b/core/res/res/values-ko/donottranslate-cldr.xml index 47f8c0331b2a..6b792c66b4fd 100644 --- a/core/res/res/values-ko/donottranslate-cldr.xml +++ b/core/res/res/values-ko/donottranslate-cldr.xml @@ -101,16 +101,16 @@ <string name="numeric_date_template">"%s. %s. %s."</string> <string name="month_day_year">%Y년 %-m월 %-e일</string> <string name="time_of_day">%p %-l:%M:%S</string> - <string name="date_and_time">%Y. %-m. %-e. %p %-l:%M:%S</string> + <string name="date_and_time">%Y년 %-m월 %-e일 %p %-l:%M:%S</string> <string name="date_time">%1$s %2$s</string> <string name="time_date">%3$s %1$s</string> - <string name="abbrev_month_day_year">%Y. %-m. %-e.</string> + <string name="abbrev_month_day_year">%Y년 %-m월 %-e일</string> <string name="month_day">%B %-e일</string> <string name="month">%-B</string> <string name="month_year">%Y년 %B</string> - <string name="abbrev_month_day">%-m. %-e.</string> + <string name="abbrev_month_day">%-m월 %-e일</string> <string name="abbrev_month">%-m월</string> - <string name="abbrev_month_year">%Y. %-m.</string> + <string name="abbrev_month_year">%Y년 %-m월</string> <string name="time1_time2">%1$s ~ %2$s</string> <string name="date1_date2">%2$s ~ %5$s</string> <string name="numeric_md1_md2">%2$s. %3$s ~ %7$s. %8$s</string> diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java index 13273280fb9c..3b6571aaf043 100644 --- a/graphics/java/android/renderscript/Allocation.java +++ b/graphics/java/android/renderscript/Allocation.java @@ -90,14 +90,14 @@ public class Allocation extends BaseObj { mRS.nAdapter1DData(mID, d); } - public void subData(int off, int count, int[] d) { - mRS.nAdapter1DSubData(mID, off, count, d); - } - public void data(float[] d) { mRS.nAdapter1DData(mID, d); } + public void subData(int off, int count, int[] d) { + mRS.nAdapter1DSubData(mID, off, count, d); + } + public void subData(int off, int count, float[] d) { mRS.nAdapter1DSubData(mID, off, count, d); } @@ -112,6 +112,46 @@ public class Allocation extends BaseObj { } + public class Adapter2D extends BaseObj { + Adapter2D(int id, RenderScript rs) { + super(rs); + mID = id; + } + + public void destroy() { + mRS.nAdapter2DDestroy(mID); + mID = 0; + } + + public void setConstraint(Dimension dim, int value) { + mRS.nAdapter2DSetConstraint(mID, dim.mID, value); + } + + public void data(int[] d) { + mRS.nAdapter2DData(mID, d); + } + + public void data(float[] d) { + mRS.nAdapter2DData(mID, d); + } + + public void subData(int xoff, int yoff, int w, int h, int[] d) { + mRS.nAdapter2DSubData(mID, xoff, yoff, w, h, d); + } + + public void subData(int xoff, int yoff, int w, int h, float[] d) { + mRS.nAdapter2DSubData(mID, xoff, yoff, w, h, d); + } + } + + public Adapter2D createAdapter2D() { + int id = mRS.nAdapter2DCreate(); + if (id != 0) { + mRS.nAdapter2DBindAllocation(id, mID); + } + return new Adapter2D(id, mRS); + } + // creation diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index dc87b6a62acb..dd7dd0225440 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -113,11 +113,20 @@ public class RenderScript { native void nAdapter1DBindAllocation(int ad, int alloc); native void nAdapter1DSetConstraint(int ad, int dim, int value); native void nAdapter1DData(int ad, int[] d); - native void nAdapter1DSubData(int ad, int off, int count, int[] d); native void nAdapter1DData(int ad, float[] d); + native void nAdapter1DSubData(int ad, int off, int count, int[] d); native void nAdapter1DSubData(int ad, int off, int count, float[] d); native int nAdapter1DCreate(); + native void nAdapter2DDestroy(int id); + native void nAdapter2DBindAllocation(int ad, int alloc); + native void nAdapter2DSetConstraint(int ad, int dim, int value); + native void nAdapter2DData(int ad, int[] d); + native void nAdapter2DData(int ad, float[] d); + native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, int[] d); + native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, float[] d); + native int nAdapter2DCreate(); + native void nScriptDestroy(int script); native void nScriptBindAllocation(int vtm, int alloc, int slot); native void nScriptCBegin(); @@ -720,19 +729,6 @@ public class RenderScript { nContextBindProgramVertex(pf.mID); } -/* - RsAdapter2D rsAdapter2DCreate (); - void rsAdapter2DBindAllocation (RsAdapter2D adapt, RsAllocation alloc); - void rsAdapter2DDestroy (RsAdapter2D adapter); - void rsAdapter2DSetConstraint (RsAdapter2D adapter, RsDimension dim, uint32_t value); - void rsAdapter2DData (RsAdapter2D adapter, const void * data); - void rsAdapter2DSubData (RsAdapter2D adapter, uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void * data); - void rsSamplerBegin (); - void rsSamplerSet (RsSamplerParam p, RsSamplerValue value); - RsSampler rsSamplerCreate (); - void rsSamplerBind (RsSampler sampler, RsAllocation alloc); -*/ - } diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp index a02abca6cae1..f5227a0183ee 100644 --- a/graphics/jni/android_renderscript_RenderScript.cpp +++ b/graphics/jni/android_renderscript_RenderScript.cpp @@ -551,6 +551,86 @@ nAdapter1DCreate(JNIEnv *_env, jobject _this) // ----------------------------------- static void +nAdapter2DDestroy(JNIEnv *_env, jobject _this, jint adapter) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + LOG_API("nAdapter2DDestroy, con(%p), adapter(%p)", con, (RsAdapter2D)adapter); + rsAdapter2DDestroy((RsAdapter2D)adapter); +} + +static void +nAdapter2DBindAllocation(JNIEnv *_env, jobject _this, jint adapter, jint alloc) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + LOG_API("nAdapter2DBindAllocation, con(%p), adapter(%p), alloc(%p)", con, (RsAdapter2D)adapter, (RsAllocation)alloc); + rsAdapter2DBindAllocation((RsAdapter2D)adapter, (RsAllocation)alloc); +} + +static void +nAdapter2DSetConstraint(JNIEnv *_env, jobject _this, jint adapter, jint dim, jint value) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + LOG_API("nAdapter2DSetConstraint, con(%p), adapter(%p), dim(%i), value(%i)", con, (RsAdapter2D)adapter, dim, value); + rsAdapter2DSetConstraint((RsAdapter2D)adapter, (RsDimension)dim, value); +} + +static void +nAdapter2DData_i(JNIEnv *_env, jobject _this, jint adapter, jintArray data) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + jint len = _env->GetArrayLength(data); + LOG_API("nAdapter2DData_i, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len); + jint *ptr = _env->GetIntArrayElements(data, NULL); + rsAdapter2DData((RsAdapter2D)adapter, ptr); + _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/); +} + +static void +nAdapter2DData_f(JNIEnv *_env, jobject _this, jint adapter, jfloatArray data) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + jint len = _env->GetArrayLength(data); + LOG_API("nAdapter2DData_f, con(%p), adapter(%p), len(%i)", con, (RsAdapter2D)adapter, len); + jfloat *ptr = _env->GetFloatArrayElements(data, NULL); + rsAdapter2DData((RsAdapter2D)adapter, ptr); + _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/); +} + +static void +nAdapter2DSubData_i(JNIEnv *_env, jobject _this, jint adapter, jint xoff, jint yoff, jint w, jint h, jintArray data) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + jint len = _env->GetArrayLength(data); + LOG_API("nAdapter2DSubData_i, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", + con, (RsAdapter2D)adapter, xoff, yoff, w, h, len); + jint *ptr = _env->GetIntArrayElements(data, NULL); + rsAdapter2DSubData((RsAdapter2D)adapter, xoff, yoff, w, h, ptr); + _env->ReleaseIntArrayElements(data, ptr, 0/*JNI_ABORT*/); +} + +static void +nAdapter2DSubData_f(JNIEnv *_env, jobject _this, jint adapter, jint xoff, jint yoff, jint w, jint h, jfloatArray data) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + jint len = _env->GetArrayLength(data); + LOG_API("nAdapter2DSubData_f, con(%p), adapter(%p), xoff(%i), yoff(%i), w(%i), h(%i), len(%i)", + con, (RsAdapter2D)adapter, xoff, yoff, w, h, len); + jfloat *ptr = _env->GetFloatArrayElements(data, NULL); + rsAdapter2DSubData((RsAdapter1D)adapter, xoff, yoff, w, h, ptr); + _env->ReleaseFloatArrayElements(data, ptr, 0/*JNI_ABORT*/); +} + +static jint +nAdapter2DCreate(JNIEnv *_env, jobject _this) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + LOG_API("nAdapter2DCreate, con(%p)", con); + return (jint)rsAdapter2DCreate(); +} + +// ----------------------------------- + +static void nScriptDestroy(JNIEnv *_env, jobject _this, jint script) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); @@ -1058,11 +1138,20 @@ static JNINativeMethod methods[] = { {"nAdapter1DBindAllocation", "(II)V", (void*)nAdapter1DBindAllocation }, {"nAdapter1DSetConstraint", "(III)V", (void*)nAdapter1DSetConstraint }, {"nAdapter1DData", "(I[I)V", (void*)nAdapter1DData_i }, -{"nAdapter1DSubData", "(III[I)V", (void*)nAdapter1DSubData_i }, {"nAdapter1DData", "(I[F)V", (void*)nAdapter1DData_f }, +{"nAdapter1DSubData", "(III[I)V", (void*)nAdapter1DSubData_i }, {"nAdapter1DSubData", "(III[F)V", (void*)nAdapter1DSubData_f }, {"nAdapter1DCreate", "()I", (void*)nAdapter1DCreate }, +{"nAdapter2DDestroy", "(I)V", (void*)nAdapter2DDestroy }, +{"nAdapter2DBindAllocation", "(II)V", (void*)nAdapter2DBindAllocation }, +{"nAdapter2DSetConstraint", "(III)V", (void*)nAdapter2DSetConstraint }, +{"nAdapter2DData", "(I[I)V", (void*)nAdapter2DData_i }, +{"nAdapter2DData", "(I[F)V", (void*)nAdapter2DData_f }, +{"nAdapter2DSubData", "(IIIII[I)V", (void*)nAdapter2DSubData_i }, +{"nAdapter2DSubData", "(IIIII[F)V", (void*)nAdapter2DSubData_f }, +{"nAdapter2DCreate", "()I", (void*)nAdapter2DCreate }, + {"nScriptDestroy", "(I)V", (void*)nScriptDestroy }, {"nScriptBindAllocation", "(III)V", (void*)nScriptBindAllocation }, {"nScriptCBegin", "()V", (void*)nScriptCBegin }, diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java index 777a7cf18e20..eda7624ac11c 100644 --- a/libs/rs/java/Film/src/com/android/film/FilmRS.java +++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java @@ -28,6 +28,7 @@ import android.renderscript.ProgramVertexAlloc; import android.renderscript.RenderScript; import android.renderscript.Element; import android.renderscript.Allocation; +import android.renderscript.Dimension; public class FilmRS { private final int POS_TRANSLATE = 0; @@ -175,7 +176,23 @@ public class FilmRS { mImages[11] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p12, ie, true); mImages[12] = Allocation.createFromBitmapResourceBoxed(mRS, mRes, R.drawable.p13, ie, true); + int black[] = new int[1024]; for(int ct=0; ct < mImages.length; ct++) { + Allocation.Adapter2D a = mImages[ct].createAdapter2D(); + + int size = 512; + int mip = 0; + while(size >= 2) { + a.subData(0, 0, 2, size, black); + a.subData(size-2, 0, 2, size, black); + a.subData(0, 0, size, 2, black); + a.subData(0, size-2, size, 2, black); + size >>= 1; + mip++; + a.setConstraint(Dimension.LOD, mip); + } + a.destroy(); + mImages[ct].uploadToTexture(1); mBufferIDs[ct] = mImages[ct].getID(); } diff --git a/libs/rs/rsAdapter.cpp b/libs/rs/rsAdapter.cpp index 7ac2aed7efe2..25f334096832 100644 --- a/libs/rs/rsAdapter.cpp +++ b/libs/rs/rsAdapter.cpp @@ -61,8 +61,8 @@ void Adapter1D::subData(uint32_t xoff, uint32_t count, const void *data) void Adapter1D::data(const void *data) { - memcpy(getElement(0), - data, + memcpy(getElement(0), + data, mAllocation.get()->getType()->getSizeBytes()); } @@ -71,7 +71,9 @@ namespace renderscript { RsAdapter1D rsi_Adapter1DCreate(Context *rsc) { - return new Adapter1D(); + Adapter1D *a = new Adapter1D(); + a->incRef(); + return a; } void rsi_Adapter1DDestroy(Context *rsc, RsAdapter1D va) @@ -176,8 +178,8 @@ void Adapter2D::subData(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, co void Adapter2D::data(const void *data) { - memcpy(getElement(0,0), - data, + memcpy(getElement(0,0), + data, mAllocation.get()->getType()->getSizeBytes()); } @@ -188,7 +190,9 @@ namespace renderscript { RsAdapter2D rsi_Adapter2DCreate(Context *rsc) { - return new Adapter2D(); + Adapter2D *a = new Adapter2D(); + a->incRef(); + return a; } void rsi_Adapter2DDestroy(Context *rsc, RsAdapter2D va) diff --git a/libs/surfaceflinger/LayerBitmap.cpp b/libs/surfaceflinger/LayerBitmap.cpp index ff49c87db311..5221fed56f4d 100644 --- a/libs/surfaceflinger/LayerBitmap.cpp +++ b/libs/surfaceflinger/LayerBitmap.cpp @@ -178,6 +178,7 @@ sp<Buffer> LayerBitmap::allocate() { Mutex::Autolock _l(mLock); surface_info_t* info = mInfo; + mBuffer.clear(); // free buffer before allocating a new one sp<Buffer> buffer = new Buffer(mWidth, mHeight, mFormat, mFlags); status_t err = buffer->initCheck(); if (LIKELY(err == NO_ERROR)) { diff --git a/test-runner/android/test/AndroidTestRunner.java b/test-runner/android/test/AndroidTestRunner.java index 79cedb009e8a..00440b4350d9 100644 --- a/test-runner/android/test/AndroidTestRunner.java +++ b/test-runner/android/test/AndroidTestRunner.java @@ -158,16 +158,18 @@ public class AndroidTestRunner extends BaseTestRunner { mTestResult.addListener(testListener); } + Context testContext = mInstrumentation.getContext(); for (TestCase testCase : mTestCases) { - setContextIfAndroidTestCase(testCase, mContext); + setContextIfAndroidTestCase(testCase, mContext, testContext); setInstrumentationIfInstrumentationTestCase(testCase, mInstrumentation); testCase.run(mTestResult); } } - private void setContextIfAndroidTestCase(Test test, Context context) { + private void setContextIfAndroidTestCase(Test test, Context context, Context testContext) { if (AndroidTestCase.class.isAssignableFrom(test.getClass())) { ((AndroidTestCase) test).setContext(context); + ((AndroidTestCase) test).setTestContext(testContext); } } diff --git a/test-runner/android/test/TestRunner.java b/test-runner/android/test/TestRunner.java index efa24807ef08..012df3501026 100644 --- a/test-runner/android/test/TestRunner.java +++ b/test-runner/android/test/TestRunner.java @@ -39,7 +39,7 @@ import com.google.android.collect.Lists; * and you probably will not need to instantiate, extend, or call this * class yourself. See the full {@link android.test} package description * to learn more about testing Android applications. - * + * * {@hide} Not needed for 1.0 SDK. */ public class TestRunner implements PerformanceTestCase.Intermediates { @@ -84,6 +84,7 @@ public class TestRunner implements PerformanceTestCase.Intermediates { super(); } + @Override public void run(TestResult result) { result.addListener(this); super.run(result); @@ -301,7 +302,7 @@ public class TestRunner implements PerformanceTestCase.Intermediates { if (mMode == PERFORMANCE) { runInPerformanceMode(test, className, false, className); } else if (mMode == PROFILING) { - //Need a way to mark a test to be run in profiling mode or not. + //Need a way to mark a test to be run in profiling mode or not. startProfiling(); test.run(); finishProfiling(); @@ -337,6 +338,7 @@ public class TestRunner implements PerformanceTestCase.Intermediates { AndroidTestCase testcase = (AndroidTestCase) test; try { testcase.setContext(mContext); + testcase.setTestContext(mContext); } catch (Exception ex) { Log.i("TestHarness", ex.toString()); } @@ -700,7 +702,7 @@ public class TestRunner implements PerformanceTestCase.Intermediates { } } catch (ClassNotFoundException e) { return 1; // this gets the count right, because either this test - // is missing, and it will fail when run or it is a single Junit test to be run. + // is missing, and it will fail when run or it is a single Junit test to be run. } return 0; } diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java index de39800149a3..71d9758e182d 100644 --- a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTest.java @@ -1,5 +1,7 @@ package com.android.dumprendertree; +import android.app.Activity; +import android.content.Intent; import android.os.Handler; import android.os.Message; import android.test.ActivityInstrumentationTestCase2; @@ -33,7 +35,7 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit } public void runReliabilityTest() throws Throwable { - ReliabilityTestActivity activity = getActivity(); +// ReliabilityTestActivity activity = getActivity(); LayoutTestsAutoRunner runner = (LayoutTestsAutoRunner)getInstrumentation(); File testListFile = new File(TEST_LIST_FILE); @@ -54,6 +56,8 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit boolean timeoutFlag = false; long start, elapsed; + Intent intent = new Intent(runner.getContext(), ReliabilityTestActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //read from BufferedReader instead of populating a list in advance, //this will avoid excessive memory usage in case of a large list while((url = listReader.readLine()) != null) { @@ -63,6 +67,8 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit start = System.currentTimeMillis(); Log.v(LOGTAG, "Testing URL: " + url); FsUtils.updateTestStatus(TEST_STATUS_FILE, url); + ReliabilityTestActivity activity = (ReliabilityTestActivity)runner.startActivitySync( + intent); activity.reset(); //use message to send new URL to avoid interacting with //WebView in non-UI thread @@ -88,12 +94,13 @@ public class ReliabilityTest extends ActivityInstrumentationTestCase2<Reliabilit if(runner.mLogtime) { writeLoadTime(url, activity.getPageLoadTime()); } + activity.finish(); System.runFinalization(); System.gc(); System.gc(); } FsUtils.updateTestStatus(TEST_STATUS_FILE, TEST_DONE); - activity.finish(); +// activity.finish(); listReader.close(); } diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java index 5ddd0b379b81..db40daf6e459 100644 --- a/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/ReliabilityTestActivity.java @@ -122,8 +122,9 @@ public class ReliabilityTestActivity extends Activity { @Override protected void onDestroy() { - Log.v(LOGTAG, "onDestroy, inst=" + Integer.toHexString(hashCode())); super.onDestroy(); + Log.v(LOGTAG, "onDestroy, inst=" + Integer.toHexString(hashCode())); + webView.destroy(); } private boolean isPageDone() { @@ -270,8 +271,7 @@ public class ReliabilityTestActivity extends Activity { } public void run() { - if (initialStartCount == pageStartCount) { - //perform cleanup + if (initialStartCount == pageStartCount && !isPageDone()) { handler.removeMessages(MSG_TIMEOUT); webView.stopLoading(); handler.postDelayed(pageDoneRunner, manualDelay); |