Merge "Replace arrays with ArrayList"
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index fb0ee59..6bcf863 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -32,6 +32,7 @@
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintWriter;
+import java.util.ArrayList;
/**
* Provides low-level communication with the system window manager for
@@ -106,9 +107,10 @@
private final Object mLock = new Object();
- private View[] mViews;
- private ViewRootImpl[] mRoots;
- private WindowManager.LayoutParams[] mParams;
+ private final ArrayList<View> mViews = new ArrayList<View>();
+ private final ArrayList<ViewRootImpl> mRoots = new ArrayList<ViewRootImpl>();
+ private final ArrayList<WindowManager.LayoutParams> mParams =
+ new ArrayList<WindowManager.LayoutParams>();
private boolean mNeedsEglTerminate;
private Runnable mSystemPropertyUpdater;
@@ -161,11 +163,10 @@
public String[] getViewRootNames() {
synchronized (mLock) {
- if (mRoots == null) return new String[0];
- String[] mViewRoots = new String[mRoots.length];
- int i = 0;
- for (ViewRootImpl root : mRoots) {
- mViewRoots[i++] = getWindowName(root);
+ final int numRoots = mRoots.size();
+ String[] mViewRoots = new String[numRoots];
+ for (int i = 0; i < numRoots; ++i) {
+ mViewRoots[i] = getWindowName(mRoots.get(i));
}
return mViewRoots;
}
@@ -173,8 +174,8 @@
public View getRootView(String name) {
synchronized (mLock) {
- if (mRoots == null) return null;
- for (ViewRootImpl root : mRoots) {
+ for (int i = mRoots.size() - 1; i >= 0; --i) {
+ final ViewRootImpl root = mRoots.get(i);
if (name.equals(getWindowName(root))) return root.getView();
}
}
@@ -208,8 +209,8 @@
mSystemPropertyUpdater = new Runnable() {
@Override public void run() {
synchronized (mLock) {
- for (ViewRootImpl viewRoot : mRoots) {
- viewRoot.loadSystemProperties();
+ for (int i = mRoots.size() - 1; i >= 0; --i) {
+ mRoots.get(i).loadSystemProperties();
}
}
}
@@ -227,10 +228,10 @@
// attached to for future reference.
if (wparams.type >= WindowManager.LayoutParams.FIRST_SUB_WINDOW &&
wparams.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
- final int count = mViews != null ? mViews.length : 0;
- for (int i=0; i<count; i++) {
- if (mRoots[i].mWindow.asBinder() == wparams.token) {
- panelParentView = mViews[i];
+ final int count = mViews.size();
+ for (int i = 0; i < count; i++) {
+ if (mRoots.get(i).mWindow.asBinder() == wparams.token) {
+ panelParentView = mViews.get(i);
}
}
}
@@ -239,28 +240,9 @@
view.setLayoutParams(wparams);
- if (mViews == null) {
- index = 1;
- mViews = new View[1];
- mRoots = new ViewRootImpl[1];
- mParams = new WindowManager.LayoutParams[1];
- } else {
- index = mViews.length + 1;
- Object[] old = mViews;
- mViews = new View[index];
- System.arraycopy(old, 0, mViews, 0, index-1);
- old = mRoots;
- mRoots = new ViewRootImpl[index];
- System.arraycopy(old, 0, mRoots, 0, index-1);
- old = mParams;
- mParams = new WindowManager.LayoutParams[index];
- System.arraycopy(old, 0, mParams, 0, index-1);
- }
- index--;
-
- mViews[index] = view;
- mRoots[index] = root;
- mParams[index] = wparams;
+ mViews.add(view);
+ mRoots.add(root);
+ mParams.add(wparams);
}
// do this last because it fires off messages to start doing things
@@ -292,8 +274,9 @@
synchronized (mLock) {
int index = findViewLocked(view, true);
- ViewRootImpl root = mRoots[index];
- mParams[index] = wparams;
+ ViewRootImpl root = mRoots.get(index);
+ mParams.remove(index);
+ mParams.add(index, wparams);
root.setLayoutParams(wparams, false);
}
}
@@ -305,7 +288,7 @@
synchronized (mLock) {
int index = findViewLocked(view, true);
- View curView = mRoots[index].getView();
+ View curView = mRoots.get(index).getView();
removeViewLocked(index, immediate);
if (curView == view) {
return;
@@ -318,16 +301,13 @@
public void closeAll(IBinder token, String who, String what) {
synchronized (mLock) {
- if (mViews == null)
- return;
-
- int count = mViews.length;
+ int count = mViews.size();
//Log.i("foo", "Closing all windows of " + token);
for (int i = 0; i < count; i++) {
//Log.i("foo", "@ " + i + " token " + mParams[i].token
// + " view " + mRoots[i].getView());
- if (token == null || mParams[i].token == token) {
- ViewRootImpl root = mRoots[i];
+ if (token == null || mParams.get(i).token == token) {
+ ViewRootImpl root = mRoots.get(i);
//Log.i("foo", "Force closing " + root);
if (who != null) {
@@ -345,13 +325,13 @@
}
private void removeViewLocked(int index, boolean immediate) {
- ViewRootImpl root = mRoots[index];
+ ViewRootImpl root = mRoots.get(index);
View view = root.getView();
if (view != null) {
InputMethodManager imm = InputMethodManager.getInstance();
if (imm != null) {
- imm.windowDismissed(mViews[index].getWindowToken());
+ imm.windowDismissed(mViews.get(index).getWindowToken());
}
}
root.die(immediate);
@@ -364,52 +344,21 @@
view.assignParent(null);
}
- final int newCount = mViews.length - 1;
- for (int index = newCount; index >= 0; --index) {
- if (mRoots[index] == root) {
- // remove it from the list
- View[] tmpViews = new View[newCount];
- removeItem(tmpViews, mViews, index);
- mViews = tmpViews;
-
- ViewRootImpl[] tmpRoots = new ViewRootImpl[newCount];
- removeItem(tmpRoots, mRoots, index);
- mRoots = tmpRoots;
-
- WindowManager.LayoutParams[] tmpParams = new WindowManager.LayoutParams[newCount];
- removeItem(tmpParams, mParams, index);
- mParams = tmpParams;
-
- return;
- }
- }
- }
- }
-
- private static void removeItem(Object[] dst, Object[] src, int index) {
- if (dst.length > 0) {
- if (index > 0) {
- System.arraycopy(src, 0, dst, 0, index);
- }
- if (index < dst.length) {
- System.arraycopy(src, index+1, dst, index, src.length-index-1);
+ final int index = mRoots.indexOf(root);
+ if (index >= 0) {
+ mRoots.remove(index);
+ mViews.remove(index);
+ mParams.remove(index);
}
}
}
private int findViewLocked(View view, boolean required) {
- if (mViews != null) {
- final int count = mViews.length;
- for (int i = 0; i < count; i++) {
- if (mViews[i] == view) {
- return i;
- }
- }
- }
- if (required) {
+ final int index = mViews.indexOf(view);
+ if (required && index < 0) {
throw new IllegalArgumentException("View=" + view + " not attached to window manager");
}
- return -1;
+ return index;
}
public void startTrimMemory(int level) {
@@ -422,10 +371,8 @@
// Destroy all hardware surfaces and resources associated to
// known windows
synchronized (mLock) {
- if (mViews == null) return;
- int count = mViews.length;
- for (int i = 0; i < count; i++) {
- mRoots[i].terminateHardwareResources();
+ for (int i = mRoots.size() - 1; i >= 0; --i) {
+ mRoots.get(i).terminateHardwareResources();
}
}
// Force a full memory flush
@@ -449,10 +396,8 @@
public void trimLocalMemory() {
synchronized (mLock) {
- if (mViews == null) return;
- int count = mViews.length;
- for (int i = 0; i < count; i++) {
- mRoots[i].destroyHardwareLayers();
+ for (int i = mRoots.size() - 1; i >= 0; --i) {
+ mRoots.get(i).destroyHardwareLayers();
}
}
}
@@ -462,51 +407,49 @@
PrintWriter pw = new PrintWriter(fout);
try {
synchronized (mLock) {
- if (mViews != null) {
- final int count = mViews.length;
+ final int count = mViews.size();
- pw.println("Profile data in ms:");
+ pw.println("Profile data in ms:");
- for (int i = 0; i < count; i++) {
- ViewRootImpl root = mRoots[i];
- String name = getWindowName(root);
- pw.printf("\n\t%s", name);
+ for (int i = 0; i < count; i++) {
+ ViewRootImpl root = mRoots.get(i);
+ String name = getWindowName(root);
+ pw.printf("\n\t%s", name);
- HardwareRenderer renderer =
- root.getView().mAttachInfo.mHardwareRenderer;
- if (renderer != null) {
- renderer.dumpGfxInfo(pw);
- }
+ HardwareRenderer renderer =
+ root.getView().mAttachInfo.mHardwareRenderer;
+ if (renderer != null) {
+ renderer.dumpGfxInfo(pw);
}
-
- pw.println("\nView hierarchy:\n");
-
- int viewsCount = 0;
- int displayListsSize = 0;
- int[] info = new int[2];
-
- for (int i = 0; i < count; i++) {
- ViewRootImpl root = mRoots[i];
- root.dumpGfxInfo(info);
-
- String name = getWindowName(root);
- pw.printf(" %s\n %d views, %.2f kB of display lists",
- name, info[0], info[1] / 1024.0f);
- HardwareRenderer renderer =
- root.getView().mAttachInfo.mHardwareRenderer;
- if (renderer != null) {
- pw.printf(", %d frames rendered", renderer.getFrameCount());
- }
- pw.printf("\n\n");
-
- viewsCount += info[0];
- displayListsSize += info[1];
- }
-
- pw.printf("\nTotal ViewRootImpl: %d\n", count);
- pw.printf("Total Views: %d\n", viewsCount);
- pw.printf("Total DisplayList: %.2f kB\n\n", displayListsSize / 1024.0f);
}
+
+ pw.println("\nView hierarchy:\n");
+
+ int viewsCount = 0;
+ int displayListsSize = 0;
+ int[] info = new int[2];
+
+ for (int i = 0; i < count; i++) {
+ ViewRootImpl root = mRoots.get(i);
+ root.dumpGfxInfo(info);
+
+ String name = getWindowName(root);
+ pw.printf(" %s\n %d views, %.2f kB of display lists",
+ name, info[0], info[1] / 1024.0f);
+ HardwareRenderer renderer =
+ root.getView().mAttachInfo.mHardwareRenderer;
+ if (renderer != null) {
+ pw.printf(", %d frames rendered", renderer.getFrameCount());
+ }
+ pw.printf("\n\n");
+
+ viewsCount += info[0];
+ displayListsSize += info[1];
+ }
+
+ pw.printf("\nTotal ViewRootImpl: %d\n", count);
+ pw.printf("Total Views: %d\n", viewsCount);
+ pw.printf("Total DisplayList: %.2f kB\n\n", displayListsSize / 1024.0f);
}
} finally {
pw.flush();
@@ -520,13 +463,11 @@
public void setStoppedState(IBinder token, boolean stopped) {
synchronized (mLock) {
- if (mViews != null) {
- int count = mViews.length;
- for (int i=0; i < count; i++) {
- if (token == null || mParams[i].token == token) {
- ViewRootImpl root = mRoots[i];
- root.setStopped(stopped);
- }
+ int count = mViews.size();
+ for (int i = 0; i < count; i++) {
+ if (token == null || mParams.get(i).token == token) {
+ ViewRootImpl root = mRoots.get(i);
+ root.setStopped(stopped);
}
}
}
@@ -534,13 +475,11 @@
public void reportNewConfiguration(Configuration config) {
synchronized (mLock) {
- if (mViews != null) {
- int count = mViews.length;
- config = new Configuration(config);
- for (int i=0; i < count; i++) {
- ViewRootImpl root = mRoots[i];
- root.requestUpdateConfiguration(config);
- }
+ int count = mViews.size();
+ config = new Configuration(config);
+ for (int i=0; i < count; i++) {
+ ViewRootImpl root = mRoots.get(i);
+ root.requestUpdateConfiguration(config);
}
}
}