1cfd74d65d832137e20e193c960802afba73b5d38sm/* 23c1e67e433728684b5f228c5d4f3e5b1457bb271sm * Copyright (C) 2010 The Android Open Source Project 3cfd74d65d832137e20e193c960802afba73b5d38sm * 4cfd74d65d832137e20e193c960802afba73b5d38sm * Licensed under the Apache License, Version 2.0 (the "License"); 5cfd74d65d832137e20e193c960802afba73b5d38sm * you may not use this file except in compliance with the License. 6cfd74d65d832137e20e193c960802afba73b5d38sm * You may obtain a copy of the License at 7cfd74d65d832137e20e193c960802afba73b5d38sm * 8cfd74d65d832137e20e193c960802afba73b5d38sm * http://www.apache.org/licenses/LICENSE-2.0 9cfd74d65d832137e20e193c960802afba73b5d38sm * 10cfd74d65d832137e20e193c960802afba73b5d38sm * Unless required by applicable law or agreed to in writing, software 11cfd74d65d832137e20e193c960802afba73b5d38sm * distributed under the License is distributed on an "AS IS" BASIS, 12cfd74d65d832137e20e193c960802afba73b5d38sm * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cfd74d65d832137e20e193c960802afba73b5d38sm * See the License for the specific language governing permissions and 14cfd74d65d832137e20e193c960802afba73b5d38sm * limitations under the License. 15cfd74d65d832137e20e193c960802afba73b5d38sm */ 16cfd74d65d832137e20e193c960802afba73b5d38sm 17cfd74d65d832137e20e193c960802afba73b5d38sm 18cfd74d65d832137e20e193c960802afba73b5d38smpackage com.replica.replicaisland; 19cfd74d65d832137e20e193c960802afba73b5d38sm 20cfd74d65d832137e20e193c960802afba73b5d38sm/** 21cfd74d65d832137e20e193c960802afba73b5d38sm * This class manages drawable objects that have short lifetimes (one or two frames). It provides 22cfd74d65d832137e20e193c960802afba73b5d38sm * type-specific allocator functions and a type-insensitive release function. This class manages 23cfd74d65d832137e20e193c960802afba73b5d38sm * pools of objects so no actual allocations occur after bootstrap. 24cfd74d65d832137e20e193c960802afba73b5d38sm */ 25cfd74d65d832137e20e193c960802afba73b5d38smpublic class DrawableFactory extends BaseObject { 262b1168acefb6a4104bb7f008df6ac51fcd1de7ecsm private final static int BITMAP_POOL_SIZE = 768; 27cfd74d65d832137e20e193c960802afba73b5d38sm 28cfd74d65d832137e20e193c960802afba73b5d38sm private DrawableBitmapPool mBitmapPool; 29cfd74d65d832137e20e193c960802afba73b5d38sm private ScrollableBitmapPool mScrollableBitmapPool; 30cfd74d65d832137e20e193c960802afba73b5d38sm private TiledBackgroundVertexGridPool mTiledBackgroundVertexGridPool; 31cfd74d65d832137e20e193c960802afba73b5d38sm 32cfd74d65d832137e20e193c960802afba73b5d38sm // This class wraps several object pools and provides a type-sensitive release function. 33cfd74d65d832137e20e193c960802afba73b5d38sm public DrawableFactory() { 34cfd74d65d832137e20e193c960802afba73b5d38sm super(); 35cfd74d65d832137e20e193c960802afba73b5d38sm mBitmapPool = new DrawableBitmapPool(BITMAP_POOL_SIZE); 36cfd74d65d832137e20e193c960802afba73b5d38sm mTiledBackgroundVertexGridPool = new TiledBackgroundVertexGridPool(); 37cfd74d65d832137e20e193c960802afba73b5d38sm mScrollableBitmapPool = new ScrollableBitmapPool(); 38cfd74d65d832137e20e193c960802afba73b5d38sm } 39cfd74d65d832137e20e193c960802afba73b5d38sm 40cfd74d65d832137e20e193c960802afba73b5d38sm @Override 41cfd74d65d832137e20e193c960802afba73b5d38sm public void reset() { 42cfd74d65d832137e20e193c960802afba73b5d38sm } 43cfd74d65d832137e20e193c960802afba73b5d38sm 44cfd74d65d832137e20e193c960802afba73b5d38sm public DrawableBitmap allocateDrawableBitmap() { 45cfd74d65d832137e20e193c960802afba73b5d38sm return mBitmapPool.allocate(); 46cfd74d65d832137e20e193c960802afba73b5d38sm } 47cfd74d65d832137e20e193c960802afba73b5d38sm 48cfd74d65d832137e20e193c960802afba73b5d38sm public TiledBackgroundVertexGrid allocateTiledBackgroundVertexGrid() { 49cfd74d65d832137e20e193c960802afba73b5d38sm return mTiledBackgroundVertexGridPool.allocate(); 50cfd74d65d832137e20e193c960802afba73b5d38sm } 51cfd74d65d832137e20e193c960802afba73b5d38sm 52cfd74d65d832137e20e193c960802afba73b5d38sm public ScrollableBitmap allocateScrollableBitmap() { 53cfd74d65d832137e20e193c960802afba73b5d38sm return mScrollableBitmapPool.allocate(); 54cfd74d65d832137e20e193c960802afba73b5d38sm } 55cfd74d65d832137e20e193c960802afba73b5d38sm 56cfd74d65d832137e20e193c960802afba73b5d38sm public void release(DrawableObject object) { 57cfd74d65d832137e20e193c960802afba73b5d38sm ObjectPool pool = object.getParentPool(); 58cfd74d65d832137e20e193c960802afba73b5d38sm if (pool != null) { 59cfd74d65d832137e20e193c960802afba73b5d38sm pool.release(object); 60cfd74d65d832137e20e193c960802afba73b5d38sm } 61cfd74d65d832137e20e193c960802afba73b5d38sm // Objects with no pool weren't created by this factory. Ignore them. 62cfd74d65d832137e20e193c960802afba73b5d38sm } 63cfd74d65d832137e20e193c960802afba73b5d38sm 64cfd74d65d832137e20e193c960802afba73b5d38sm private class DrawableBitmapPool extends TObjectPool<DrawableBitmap> { 65cfd74d65d832137e20e193c960802afba73b5d38sm 66cfd74d65d832137e20e193c960802afba73b5d38sm public DrawableBitmapPool(int size) { 67cfd74d65d832137e20e193c960802afba73b5d38sm super(size); 68cfd74d65d832137e20e193c960802afba73b5d38sm } 69cfd74d65d832137e20e193c960802afba73b5d38sm 70cfd74d65d832137e20e193c960802afba73b5d38sm @Override 71cfd74d65d832137e20e193c960802afba73b5d38sm public void reset() { 72cfd74d65d832137e20e193c960802afba73b5d38sm } 73cfd74d65d832137e20e193c960802afba73b5d38sm 74cfd74d65d832137e20e193c960802afba73b5d38sm @Override 75cfd74d65d832137e20e193c960802afba73b5d38sm protected void fill() { 76cfd74d65d832137e20e193c960802afba73b5d38sm int size = getSize(); 77cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < size; x++) { 78cfd74d65d832137e20e193c960802afba73b5d38sm DrawableBitmap entry = new DrawableBitmap(null, 0, 0); 79cfd74d65d832137e20e193c960802afba73b5d38sm entry.setParentPool(this); 80cfd74d65d832137e20e193c960802afba73b5d38sm getAvailable().add(entry); 81cfd74d65d832137e20e193c960802afba73b5d38sm } 82cfd74d65d832137e20e193c960802afba73b5d38sm } 83cfd74d65d832137e20e193c960802afba73b5d38sm 84cfd74d65d832137e20e193c960802afba73b5d38sm @Override 85cfd74d65d832137e20e193c960802afba73b5d38sm public void release(Object entry) { 86cfd74d65d832137e20e193c960802afba73b5d38sm ((DrawableBitmap)entry).reset(); 87cfd74d65d832137e20e193c960802afba73b5d38sm super.release(entry); 88cfd74d65d832137e20e193c960802afba73b5d38sm } 89cfd74d65d832137e20e193c960802afba73b5d38sm 90cfd74d65d832137e20e193c960802afba73b5d38sm @Override 91cfd74d65d832137e20e193c960802afba73b5d38sm public DrawableBitmap allocate() { 92cfd74d65d832137e20e193c960802afba73b5d38sm DrawableBitmap result = super.allocate(); 93cfd74d65d832137e20e193c960802afba73b5d38sm ContextParameters params = sSystemRegistry.contextParameters; 94cfd74d65d832137e20e193c960802afba73b5d38sm if (result != null && params != null) { 95cfd74d65d832137e20e193c960802afba73b5d38sm result.setViewSize(params.gameWidth, params.gameHeight); 96cfd74d65d832137e20e193c960802afba73b5d38sm } 97cfd74d65d832137e20e193c960802afba73b5d38sm return result; 98cfd74d65d832137e20e193c960802afba73b5d38sm } 99cfd74d65d832137e20e193c960802afba73b5d38sm } 100cfd74d65d832137e20e193c960802afba73b5d38sm 101cfd74d65d832137e20e193c960802afba73b5d38sm private class ScrollableBitmapPool extends TObjectPool<ScrollableBitmap> { 102cfd74d65d832137e20e193c960802afba73b5d38sm 103cfd74d65d832137e20e193c960802afba73b5d38sm public ScrollableBitmapPool() { 104cfd74d65d832137e20e193c960802afba73b5d38sm super(); 105cfd74d65d832137e20e193c960802afba73b5d38sm } 106cfd74d65d832137e20e193c960802afba73b5d38sm 107cfd74d65d832137e20e193c960802afba73b5d38sm @Override 108cfd74d65d832137e20e193c960802afba73b5d38sm public void reset() { 109cfd74d65d832137e20e193c960802afba73b5d38sm } 110cfd74d65d832137e20e193c960802afba73b5d38sm 111cfd74d65d832137e20e193c960802afba73b5d38sm @Override 112cfd74d65d832137e20e193c960802afba73b5d38sm protected void fill() { 113cfd74d65d832137e20e193c960802afba73b5d38sm int size = getSize(); 114cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < size; x++) { 115cfd74d65d832137e20e193c960802afba73b5d38sm ScrollableBitmap entry = new ScrollableBitmap(null, 0, 0); 116cfd74d65d832137e20e193c960802afba73b5d38sm entry.setParentPool(this); 117cfd74d65d832137e20e193c960802afba73b5d38sm getAvailable().add(entry); 118cfd74d65d832137e20e193c960802afba73b5d38sm } 119cfd74d65d832137e20e193c960802afba73b5d38sm } 120cfd74d65d832137e20e193c960802afba73b5d38sm 121cfd74d65d832137e20e193c960802afba73b5d38sm @Override 122cfd74d65d832137e20e193c960802afba73b5d38sm public void release(Object entry) { 123cfd74d65d832137e20e193c960802afba73b5d38sm ((ScrollableBitmap)entry).reset(); 124cfd74d65d832137e20e193c960802afba73b5d38sm super.release(entry); 125cfd74d65d832137e20e193c960802afba73b5d38sm } 126cfd74d65d832137e20e193c960802afba73b5d38sm 127cfd74d65d832137e20e193c960802afba73b5d38sm 128cfd74d65d832137e20e193c960802afba73b5d38sm } 129cfd74d65d832137e20e193c960802afba73b5d38sm 130cfd74d65d832137e20e193c960802afba73b5d38sm private class TiledBackgroundVertexGridPool extends TObjectPool<TiledBackgroundVertexGrid> { 131cfd74d65d832137e20e193c960802afba73b5d38sm 132cfd74d65d832137e20e193c960802afba73b5d38sm public TiledBackgroundVertexGridPool() { 133cfd74d65d832137e20e193c960802afba73b5d38sm super(); 134cfd74d65d832137e20e193c960802afba73b5d38sm } 135cfd74d65d832137e20e193c960802afba73b5d38sm 136cfd74d65d832137e20e193c960802afba73b5d38sm @Override 137cfd74d65d832137e20e193c960802afba73b5d38sm public void reset() { 138cfd74d65d832137e20e193c960802afba73b5d38sm } 139cfd74d65d832137e20e193c960802afba73b5d38sm 140cfd74d65d832137e20e193c960802afba73b5d38sm @Override 141cfd74d65d832137e20e193c960802afba73b5d38sm protected void fill() { 142cfd74d65d832137e20e193c960802afba73b5d38sm int size = getSize(); 143cfd74d65d832137e20e193c960802afba73b5d38sm for (int x = 0; x < size; x++) { 144cfd74d65d832137e20e193c960802afba73b5d38sm TiledBackgroundVertexGrid entry = new TiledBackgroundVertexGrid(); 145cfd74d65d832137e20e193c960802afba73b5d38sm entry.setParentPool(this); 146cfd74d65d832137e20e193c960802afba73b5d38sm getAvailable().add(entry); 147cfd74d65d832137e20e193c960802afba73b5d38sm } 148cfd74d65d832137e20e193c960802afba73b5d38sm } 149cfd74d65d832137e20e193c960802afba73b5d38sm 150cfd74d65d832137e20e193c960802afba73b5d38sm @Override 151cfd74d65d832137e20e193c960802afba73b5d38sm public void release(Object entry) { 152cfd74d65d832137e20e193c960802afba73b5d38sm TiledBackgroundVertexGrid bg = (TiledBackgroundVertexGrid)entry; 153cfd74d65d832137e20e193c960802afba73b5d38sm bg.reset(); 154cfd74d65d832137e20e193c960802afba73b5d38sm super.release(entry); 155cfd74d65d832137e20e193c960802afba73b5d38sm } 156cfd74d65d832137e20e193c960802afba73b5d38sm 157cfd74d65d832137e20e193c960802afba73b5d38sm } 158cfd74d65d832137e20e193c960802afba73b5d38sm} 159