content: /*
   * Copyright (C) 2009 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.
   */
  
  public class Main {
      Bitmap mBitmap1, mBitmap2, mBitmap3, mBitmap4;
  
      public static void sleep(int ms) {
          try {
              Thread.sleep(ms);
          } catch (InterruptedException ie) {
              System.err.println("sleep interrupted");
          }
      }
  
      public static void main(String args[]) {
          System.out.println("start");
  
          Main main = new Main();
          main.run();
  
          sleep(1000);
          System.out.println("done");
      }
  
      public void run() {
          createBitmaps();
  
          Runtime.getRuntime().gc();
          sleep(250);
  
          mBitmap2.drawAt(0, 0);
  
          System.out.println("nulling 1");
          mBitmap1 = null;
          Runtime.getRuntime().gc();
          sleep(500);
  
          System.out.println("nulling 2");
          mBitmap2 = null;
          Runtime.getRuntime().gc();
          sleep(500);
  
          System.out.println("nulling 3");
          mBitmap3 = null;
          Runtime.getRuntime().gc();
          sleep(500);
  
          System.out.println("nulling 4");
          mBitmap4 = null;
          Runtime.getRuntime().gc();
          sleep(500);
  
          Bitmap.shutDown();
      }
  
      /*
       * Create bitmaps.
       *
       * bitmap1 is 10x10 and unique
       * bitmap2 and bitmap3 are 20x20 and share the same storage.
       * bitmap4 is just another reference to bitmap3
       *
       * When we return there should be no local refs lurking on the stack.
       */
      public void createBitmaps() {
          Bitmap.NativeWrapper dataA = Bitmap.allocNativeStorage(10, 10);
          Bitmap.NativeWrapper dataB = Bitmap.allocNativeStorage(20, 20);
          mBitmap1 = new Bitmap("one", 10, 10, dataA);
          mBitmap2 = new Bitmap("two", 20, 20, dataB);
          mBitmap3 = mBitmap4 = new Bitmap("three/four", 20, 20, dataB);
      }
  }
  