1758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov/* 2758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * Copyright (C) 2012 The Android Open Source Project 3758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * 4758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * Licensed under the Apache License, Version 2.0 (the "License"); 5758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * you may not use this file except in compliance with the License. 6758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * You may obtain a copy of the License at 7758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * 8758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * http://www.apache.org/licenses/LICENSE-2.0 9758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * 10758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * Unless required by applicable law or agreed to in writing, software 11758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * distributed under the License is distributed on an "AS IS" BASIS, 12758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * See the License for the specific language governing permissions and 14758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * limitations under the License. 15758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov */ 16758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 17758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganovpackage com.android.internal.os; 18758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 19758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov/** 20758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * Helper class for passing more arguments though a message 21758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * and avoiding allocation of a custom class for wrapping the 22758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * arguments. This class maintains a pool of instances and 23758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * it is responsibility of the client to recycle and instance 24758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov * once it is no longer used. 25758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov */ 26758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganovpublic final class SomeArgs { 27758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 28758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov private static final int MAX_POOL_SIZE = 10; 29758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 30758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov private static SomeArgs sPool; 31758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov private static int sPoolSize; 32758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov private static Object sPoolLock = new Object(); 33758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 34758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov private SomeArgs mNext; 35758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 36758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov private boolean mInPool; 37758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 38758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public Object arg1; 39758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public Object arg2; 40758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public Object arg3; 41758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public Object arg4; 42758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public int argi1; 43758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public int argi2; 44758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public int argi3; 45758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public int argi4; 46758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public int argi5; 47758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public int argi6; 48758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 49758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov private SomeArgs() { 50758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov /* do nothing - reduce visibility */ 51758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 52758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 53758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public static SomeArgs obtain() { 54758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov synchronized (sPoolLock) { 55758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov if (sPoolSize > 0) { 56758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov SomeArgs args = sPool; 57758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov sPool = sPool.mNext; 58758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov args.mNext = null; 59758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov args.mInPool = false; 60758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov sPoolSize--; 61758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov return args; 62758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } else { 63758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov return new SomeArgs(); 64758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 65758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 66758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 67758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 68758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov public void recycle() { 69758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov if (mInPool) { 70758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov throw new IllegalStateException("Already recycled."); 71758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 72758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov synchronized (sPoolLock) { 73758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov clear(); 74758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov if (sPoolSize < MAX_POOL_SIZE) { 75758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov mNext = sPool; 76758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov mInPool = true; 77758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov sPool = this; 78758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov sPoolSize++; 79758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 80758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 81758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 82758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov 83758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov private void clear() { 84758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov arg1 = null; 85758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov arg2 = null; 86758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov arg3 = null; 87758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov arg4 = null; 88758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov argi1 = 0; 89758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov argi2 = 0; 90758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov argi3 = 0; 91758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov argi4 = 0; 92758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov argi5 = 0; 93758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov argi6 = 0; 94758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov } 95758143ecfedbe08cc6c4fed0ad8ad7a854194ca4Svetoslav Ganov} 96