Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.renderscriptlegacy.cts;
     18 
     19 import android.app.ActivityManager;
     20 import android.renderscript.Allocation;
     21 import android.renderscript.Element;
     22 import android.renderscript.Type;
     23 import android.util.Log;
     24 import android.content.Context;
     25 
     26 /*
     27 // -target-api 11
     28 
     29 #pragma version(1)
     30 #pragma rs java_package_name(android.renderscript.cts)
     31 
     32 rs_allocation a;
     33 
     34 void print() {
     35     rsDebug("unused", rsGetElementAt_int(a, 0, 0));
     36 }
     37 */
     38 
     39 /**
     40  * Test for memory leaks due to missing object slot information.
     41  *
     42  * The code to generate leak.bc is in the previous comment block.
     43  * Note that you need to modify llvm-rs-cc to skip emitting the
     44  * .rs.dtor() function, since it will also do the proper cleanup
     45  * (but not trigger the original bug). Old HC code can trigger this
     46  * bug, since it may have been compiled without .rs.dtor() support.
     47  */
     48 public class LeakTest extends RSBaseCompute {
     49     private static final String TAG = "LeakTest";
     50 
     51     public void testForLeaks() {
     52         ActivityManager am = (ActivityManager) getContext().getSystemService("activity");
     53         int mc = am.getLargeMemoryClass() / 32;
     54         if (mc < 1) {
     55             mc = 1;
     56         }
     57         int x = mc * 1024 * 1024;
     58 
     59         for (int i = 0; i < 100; i++) {
     60             Log.w(TAG, "Leak test iteration " + i);
     61             ScriptC_leak leak = new ScriptC_leak(mRS);
     62             Type t = new Type.Builder(mRS, Element.I32(mRS)).setX(x).create();
     63             Allocation A = Allocation.createTyped(mRS, t);
     64             leak.set_a(A);
     65             A = null;
     66             //System.gc();
     67             leak.destroy();
     68             mRS.finish();
     69         }
     70         mRS.finish();
     71         checkForErrors();
     72     }
     73 }
     74