More optimization of dumpsys output.
There are three major classes of changes here:
- Avoid writing lines where their values are often empty, false, or some other typical thing.
- Use partial writes to the PrintWriter to avoid creating temporary strings.
- Use StringBuilder where we need to generate real String objects (and where possible cache the result).
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index 1bed706..cb660c7 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -440,9 +440,13 @@
@Override
public String toString() {
- return "PendingIntent{"
- + Integer.toHexString(System.identityHashCode(this))
- + " target " + (mTarget != null ? mTarget.asBinder() : null) + "}";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("PendingIntent{");
+ sb.append(Integer.toHexString(System.identityHashCode(this)));
+ sb.append(": ");
+ sb.append(mTarget != null ? mTarget.asBinder() : null);
+ sb.append('}');
+ return sb.toString();
}
public int describeContents() {
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index e82a86c..b3e81d7 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -4390,12 +4390,35 @@
@Override
public String toString() {
- StringBuilder b = new StringBuilder();
+ StringBuilder b = new StringBuilder(128);
- b.append("Intent {");
- if (mAction != null) b.append(" action=").append(mAction);
+ b.append("Intent { ");
+ toShortString(b, true, true);
+ b.append(" }");
+
+ return b.toString();
+ }
+
+ /** @hide */
+ public String toShortString(boolean comp, boolean extras) {
+ StringBuilder b = new StringBuilder(128);
+ toShortString(b, comp, extras);
+ return b.toString();
+ }
+
+ /** @hide */
+ public void toShortString(StringBuilder b, boolean comp, boolean extras) {
+ boolean first = true;
+ if (mAction != null) {
+ b.append("act=").append(mAction);
+ first = false;
+ }
if (mCategories != null) {
- b.append(" categories={");
+ if (!first) {
+ b.append(' ');
+ }
+ first = false;
+ b.append("cat=[");
Iterator<String> i = mCategories.iterator();
boolean didone = false;
while (i.hasNext()) {
@@ -4403,20 +4426,48 @@
didone = true;
b.append(i.next());
}
- b.append("}");
+ b.append("]");
}
- if (mData != null) b.append(" data=").append(mData);
- if (mType != null) b.append(" type=").append(mType);
- if (mFlags != 0) b.append(" flags=0x").append(Integer.toHexString(mFlags));
- if (mComponent != null) b.append(" comp=").append(mComponent.toShortString());
- if (mExtras != null) b.append(" (has extras)");
- b.append(" }");
-
- return b.toString();
+ if (mData != null) {
+ if (!first) {
+ b.append(' ');
+ }
+ first = false;
+ b.append("dat=").append(mData);
+ }
+ if (mType != null) {
+ if (!first) {
+ b.append(' ');
+ }
+ first = false;
+ b.append("typ=").append(mType);
+ }
+ if (mFlags != 0) {
+ if (!first) {
+ b.append(' ');
+ }
+ first = false;
+ b.append("flg=0x").append(Integer.toHexString(mFlags));
+ }
+ if (comp && mComponent != null) {
+ if (!first) {
+ b.append(' ');
+ }
+ first = false;
+ b.append("cmp=").append(mComponent.flattenToShortString());
+ }
+ if (extras && mExtras != null) {
+ if (!first) {
+ b.append(' ');
+ }
+ first = false;
+ b.append("(has extras)");
+ }
}
public String toURI() {
- StringBuilder uri = new StringBuilder(mData != null ? mData.toString() : "");
+ StringBuilder uri = new StringBuilder(128);
+ if (mData != null) uri.append(mData.toString());
uri.append("#Intent;");
diff --git a/core/java/android/content/IntentFilter.java b/core/java/android/content/IntentFilter.java
index 9b190df..e5c5dc8 100644
--- a/core/java/android/content/IntentFilter.java
+++ b/core/java/android/content/IntentFilter.java
@@ -1254,47 +1254,71 @@
}
public void dump(Printer du, String prefix) {
+ StringBuilder sb = new StringBuilder(256);
if (mActions.size() > 0) {
Iterator<String> it = mActions.iterator();
while (it.hasNext()) {
- du.println(prefix + "Action: \"" + it.next() + "\"");
+ sb.setLength(0);
+ sb.append(prefix); sb.append("Action: \"");
+ sb.append(it.next()); sb.append("\"");
+ du.println(sb.toString());
}
}
if (mCategories != null) {
Iterator<String> it = mCategories.iterator();
while (it.hasNext()) {
- du.println(prefix + "Category: \"" + it.next() + "\"");
+ sb.setLength(0);
+ sb.append(prefix); sb.append("Category: \"");
+ sb.append(it.next()); sb.append("\"");
+ du.println(sb.toString());
}
}
if (mDataSchemes != null) {
Iterator<String> it = mDataSchemes.iterator();
while (it.hasNext()) {
- du.println(prefix + "Data Scheme: \"" + it.next() + "\"");
+ sb.setLength(0);
+ sb.append(prefix); sb.append("Scheme: \"");
+ sb.append(it.next()); sb.append("\"");
+ du.println(sb.toString());
}
}
if (mDataAuthorities != null) {
Iterator<AuthorityEntry> it = mDataAuthorities.iterator();
while (it.hasNext()) {
AuthorityEntry ae = it.next();
- du.println(prefix + "Data Authority: \"" + ae.mHost + "\":"
- + ae.mPort + (ae.mWild ? " WILD" : ""));
+ sb.setLength(0);
+ sb.append(prefix); sb.append("Authority: \"");
+ sb.append(ae.mHost); sb.append("\": ");
+ sb.append(ae.mPort);
+ if (ae.mWild) sb.append(" WILD");
+ du.println(sb.toString());
}
}
if (mDataPaths != null) {
Iterator<PatternMatcher> it = mDataPaths.iterator();
while (it.hasNext()) {
PatternMatcher pe = it.next();
- du.println(prefix + "Data Path: \"" + pe + "\"");
+ sb.setLength(0);
+ sb.append(prefix); sb.append("Path: \"");
+ sb.append(pe); sb.append("\"");
+ du.println(sb.toString());
}
}
if (mDataTypes != null) {
Iterator<String> it = mDataTypes.iterator();
while (it.hasNext()) {
- du.println(prefix + "Data Type: \"" + it.next() + "\"");
+ sb.setLength(0);
+ sb.append(prefix); sb.append("Type: \"");
+ sb.append(it.next()); sb.append("\"");
+ du.println(sb.toString());
}
}
- du.println(prefix + "mPriority=" + mPriority
- + ", mHasPartialTypes=" + mHasPartialTypes);
+ if (mPriority != 0 || mHasPartialTypes) {
+ sb.setLength(0);
+ sb.append(prefix); sb.append("mPriority="); sb.append(mPriority);
+ sb.append(", mHasPartialTypes="); sb.append(mHasPartialTypes);
+ du.println(sb.toString());
+ }
}
public static final Parcelable.Creator<IntentFilter> CREATOR
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 2dcb483..963d311 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -64,6 +64,48 @@
private static final Object mSync = new Object();
private static WeakReference<byte[]> mReadBuffer;
+ static class ParsePackageItemArgs {
+ final Package owner;
+ final String[] outError;
+ final int nameRes;
+ final int labelRes;
+ final int iconRes;
+
+ String tag;
+ TypedArray sa;
+
+ ParsePackageItemArgs(Package _owner, String[] _outError,
+ int _nameRes, int _labelRes, int _iconRes) {
+ owner = _owner;
+ outError = _outError;
+ nameRes = _nameRes;
+ labelRes = _labelRes;
+ iconRes = _iconRes;
+ }
+ }
+
+ static class ParseComponentArgs extends ParsePackageItemArgs {
+ final String[] sepProcesses;
+ final int processRes;
+ final int enabledRes;
+ int flags;
+
+ ParseComponentArgs(Package _owner, String[] _outError,
+ int _nameRes, int _labelRes, int _iconRes,
+ String[] _sepProcesses, int _processRes,int _enabledRes) {
+ super(_owner, _outError, _nameRes, _labelRes, _iconRes);
+ sepProcesses = _sepProcesses;
+ processRes = _processRes;
+ enabledRes = _enabledRes;
+ }
+ }
+
+ private ParsePackageItemArgs mParseInstrumentationArgs;
+ private ParseComponentArgs mParseActivityArgs;
+ private ParseComponentArgs mParseActivityAliasArgs;
+ private ParseComponentArgs mParseServiceArgs;
+ private ParseComponentArgs mParseProviderArgs;
+
/** If set to true, we will only allow package files that exactly match
* the DTD. Otherwise, we try to get as much from the package as we
* can without failing. This should normally be set to false, to
@@ -557,6 +599,11 @@
throws XmlPullParserException, IOException {
AttributeSet attrs = parser;
+ mParseInstrumentationArgs = null;
+ mParseActivityArgs = null;
+ mParseServiceArgs = null;
+ mParseProviderArgs = null;
+
String pkgName = parsePackageName(parser, attrs, flags, outError);
if (pkgName == null) {
mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
@@ -593,8 +640,6 @@
}
sa.recycle();
- final int innerDepth = parser.getDepth();
-
int outerDepth = parser.getDepth();
while ((type=parser.next()) != parser.END_DOCUMENT
&& (type != parser.END_TAG || parser.getDepth() > outerDepth)) {
@@ -950,20 +995,24 @@
TypedArray sa = res.obtainAttributes(attrs,
com.android.internal.R.styleable.AndroidManifestInstrumentation);
- Instrumentation a = new Instrumentation(owner);
-
- if (!parsePackageItemInfo(owner, a.info, outError, "<instrumentation>", sa,
- com.android.internal.R.styleable.AndroidManifestInstrumentation_name,
- com.android.internal.R.styleable.AndroidManifestInstrumentation_label,
- com.android.internal.R.styleable.AndroidManifestInstrumentation_icon)) {
+ if (mParseInstrumentationArgs == null) {
+ mParseInstrumentationArgs = new ParsePackageItemArgs(owner, outError,
+ com.android.internal.R.styleable.AndroidManifestInstrumentation_name,
+ com.android.internal.R.styleable.AndroidManifestInstrumentation_label,
+ com.android.internal.R.styleable.AndroidManifestInstrumentation_icon);
+ mParseInstrumentationArgs.tag = "<instrumentation>";
+ }
+
+ mParseInstrumentationArgs.sa = sa;
+
+ Instrumentation a = new Instrumentation(mParseInstrumentationArgs,
+ new InstrumentationInfo());
+ if (outError[0] != null) {
sa.recycle();
mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
return null;
}
- a.component = new ComponentName(owner.applicationInfo.packageName,
- a.info.name);
-
String str;
str = sa.getNonResourceString(
com.android.internal.R.styleable.AndroidManifestInstrumentation_targetPackage);
@@ -1140,7 +1189,7 @@
owner.providers.add(p);
} else if (tagName.equals("activity-alias")) {
- Activity a = parseActivityAlias(owner, res, parser, attrs, flags, outError, false);
+ Activity a = parseActivityAlias(owner, res, parser, attrs, flags, outError);
if (a == null) {
mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
return false;
@@ -1239,22 +1288,29 @@
return outError[0] == null;
}
-
+
private Activity parseActivity(Package owner, Resources res,
XmlPullParser parser, AttributeSet attrs, int flags, String[] outError,
boolean receiver) throws XmlPullParserException, IOException {
TypedArray sa = res.obtainAttributes(attrs,
com.android.internal.R.styleable.AndroidManifestActivity);
- Activity a = new Activity(owner);
-
- if (!parseComponentInfo(owner, flags, a.info, outError,
- receiver ? "<receiver>" : "<activity>", sa,
- com.android.internal.R.styleable.AndroidManifestActivity_name,
- com.android.internal.R.styleable.AndroidManifestActivity_label,
- com.android.internal.R.styleable.AndroidManifestActivity_icon,
- com.android.internal.R.styleable.AndroidManifestActivity_process,
- com.android.internal.R.styleable.AndroidManifestActivity_enabled)) {
+ if (mParseActivityArgs == null) {
+ mParseActivityArgs = new ParseComponentArgs(owner, outError,
+ com.android.internal.R.styleable.AndroidManifestActivity_name,
+ com.android.internal.R.styleable.AndroidManifestActivity_label,
+ com.android.internal.R.styleable.AndroidManifestActivity_icon,
+ mSeparateProcesses,
+ com.android.internal.R.styleable.AndroidManifestActivity_process,
+ com.android.internal.R.styleable.AndroidManifestActivity_enabled);
+ }
+
+ mParseActivityArgs.tag = receiver ? "<receiver>" : "<activity>";
+ mParseActivityArgs.sa = sa;
+ mParseActivityArgs.flags = flags;
+
+ Activity a = new Activity(mParseActivityArgs, new ActivityInfo());
+ if (outError[0] != null) {
sa.recycle();
return null;
}
@@ -1266,9 +1322,6 @@
com.android.internal.R.styleable.AndroidManifestActivity_exported, false);
}
- a.component = new ComponentName(owner.applicationInfo.packageName,
- a.info.name);
-
a.info.theme = sa.getResourceId(
com.android.internal.R.styleable.AndroidManifestActivity_theme, 0);
@@ -1412,8 +1465,8 @@
}
private Activity parseActivityAlias(Package owner, Resources res,
- XmlPullParser parser, AttributeSet attrs, int flags, String[] outError,
- boolean receiver) throws XmlPullParserException, IOException {
+ XmlPullParser parser, AttributeSet attrs, int flags, String[] outError)
+ throws XmlPullParserException, IOException {
TypedArray sa = res.obtainAttributes(attrs,
com.android.internal.R.styleable.AndroidManifestActivityAlias);
@@ -1432,7 +1485,20 @@
return null;
}
- Activity a = new Activity(owner);
+ if (mParseActivityAliasArgs == null) {
+ mParseActivityAliasArgs = new ParseComponentArgs(owner, outError,
+ com.android.internal.R.styleable.AndroidManifestActivityAlias_name,
+ com.android.internal.R.styleable.AndroidManifestActivityAlias_label,
+ com.android.internal.R.styleable.AndroidManifestActivityAlias_icon,
+ mSeparateProcesses,
+ 0,
+ com.android.internal.R.styleable.AndroidManifestActivityAlias_enabled);
+ mParseActivityAliasArgs.tag = "<activity-alias>";
+ }
+
+ mParseActivityAliasArgs.sa = sa;
+ mParseActivityAliasArgs.flags = flags;
+
Activity target = null;
final int NA = owner.activities.size();
@@ -1451,26 +1517,21 @@
return null;
}
- a.info.targetActivity = targetActivity;
-
- a.info.configChanges = target.info.configChanges;
- a.info.flags = target.info.flags;
- a.info.icon = target.info.icon;
- a.info.labelRes = target.info.labelRes;
- a.info.launchMode = target.info.launchMode;
- a.info.nonLocalizedLabel = target.info.nonLocalizedLabel;
- a.info.processName = target.info.processName;
- a.info.screenOrientation = target.info.screenOrientation;
- a.info.taskAffinity = target.info.taskAffinity;
- a.info.theme = target.info.theme;
-
- if (!parseComponentInfo(owner, flags, a.info, outError,
- receiver ? "<receiver>" : "<activity>", sa,
- com.android.internal.R.styleable.AndroidManifestActivityAlias_name,
- com.android.internal.R.styleable.AndroidManifestActivityAlias_label,
- com.android.internal.R.styleable.AndroidManifestActivityAlias_icon,
- 0,
- com.android.internal.R.styleable.AndroidManifestActivityAlias_enabled)) {
+ ActivityInfo info = new ActivityInfo();
+ info.targetActivity = targetActivity;
+ info.configChanges = target.info.configChanges;
+ info.flags = target.info.flags;
+ info.icon = target.info.icon;
+ info.labelRes = target.info.labelRes;
+ info.nonLocalizedLabel = target.info.nonLocalizedLabel;
+ info.launchMode = target.info.launchMode;
+ info.processName = target.info.processName;
+ info.screenOrientation = target.info.screenOrientation;
+ info.taskAffinity = target.info.taskAffinity;
+ info.theme = target.info.theme;
+
+ Activity a = new Activity(mParseActivityAliasArgs, info);
+ if (outError[0] != null) {
sa.recycle();
return null;
}
@@ -1482,9 +1543,6 @@
com.android.internal.R.styleable.AndroidManifestActivityAlias_exported, false);
}
- a.component = new ComponentName(owner.applicationInfo.packageName,
- a.info.name);
-
String str;
str = sa.getNonResourceString(
com.android.internal.R.styleable.AndroidManifestActivityAlias_permission);
@@ -1548,14 +1606,22 @@
TypedArray sa = res.obtainAttributes(attrs,
com.android.internal.R.styleable.AndroidManifestProvider);
- Provider p = new Provider(owner);
-
- if (!parseComponentInfo(owner, flags, p.info, outError, "<provider>", sa,
- com.android.internal.R.styleable.AndroidManifestProvider_name,
- com.android.internal.R.styleable.AndroidManifestProvider_label,
- com.android.internal.R.styleable.AndroidManifestProvider_icon,
- com.android.internal.R.styleable.AndroidManifestProvider_process,
- com.android.internal.R.styleable.AndroidManifestProvider_enabled)) {
+ if (mParseProviderArgs == null) {
+ mParseProviderArgs = new ParseComponentArgs(owner, outError,
+ com.android.internal.R.styleable.AndroidManifestProvider_name,
+ com.android.internal.R.styleable.AndroidManifestProvider_label,
+ com.android.internal.R.styleable.AndroidManifestProvider_icon,
+ mSeparateProcesses,
+ com.android.internal.R.styleable.AndroidManifestProvider_process,
+ com.android.internal.R.styleable.AndroidManifestProvider_enabled);
+ mParseProviderArgs.tag = "<provider>";
+ }
+
+ mParseProviderArgs.sa = sa;
+ mParseProviderArgs.flags = flags;
+
+ Provider p = new Provider(mParseProviderArgs, new ProviderInfo());
+ if (outError[0] != null) {
sa.recycle();
return null;
}
@@ -1563,9 +1629,6 @@
p.info.exported = sa.getBoolean(
com.android.internal.R.styleable.AndroidManifestProvider_exported, true);
- p.component = new ComponentName(owner.applicationInfo.packageName,
- p.info.name);
-
String cpname = sa.getNonResourceString(
com.android.internal.R.styleable.AndroidManifestProvider_authorities);
@@ -1706,14 +1769,22 @@
TypedArray sa = res.obtainAttributes(attrs,
com.android.internal.R.styleable.AndroidManifestService);
- Service s = new Service(owner);
-
- if (!parseComponentInfo(owner, flags, s.info, outError, "<service>", sa,
- com.android.internal.R.styleable.AndroidManifestService_name,
- com.android.internal.R.styleable.AndroidManifestService_label,
- com.android.internal.R.styleable.AndroidManifestService_icon,
- com.android.internal.R.styleable.AndroidManifestService_process,
- com.android.internal.R.styleable.AndroidManifestService_enabled)) {
+ if (mParseServiceArgs == null) {
+ mParseServiceArgs = new ParseComponentArgs(owner, outError,
+ com.android.internal.R.styleable.AndroidManifestService_name,
+ com.android.internal.R.styleable.AndroidManifestService_label,
+ com.android.internal.R.styleable.AndroidManifestService_icon,
+ mSeparateProcesses,
+ com.android.internal.R.styleable.AndroidManifestService_process,
+ com.android.internal.R.styleable.AndroidManifestService_enabled);
+ mParseServiceArgs.tag = "<service>";
+ }
+
+ mParseServiceArgs.sa = sa;
+ mParseServiceArgs.flags = flags;
+
+ Service s = new Service(mParseServiceArgs, new ServiceInfo());
+ if (outError[0] != null) {
sa.recycle();
return null;
}
@@ -1725,9 +1796,6 @@
com.android.internal.R.styleable.AndroidManifestService_exported, false);
}
- s.component = new ComponentName(owner.applicationInfo.packageName,
- s.info.name);
-
String str = sa.getNonResourceString(
com.android.internal.R.styleable.AndroidManifestService_permission);
if (str == null) {
@@ -2084,16 +2152,75 @@
public static class Component<II extends IntentInfo> {
public final Package owner;
- public final ArrayList<II> intents = new ArrayList<II>(0);
- public ComponentName component;
+ public final ArrayList<II> intents;
+ public final ComponentName component;
+ public final String componentShortName;
public Bundle metaData;
public Component(Package _owner) {
owner = _owner;
+ intents = null;
+ component = null;
+ componentShortName = null;
+ }
+
+ public Component(final ParsePackageItemArgs args, final PackageItemInfo outInfo) {
+ owner = args.owner;
+ intents = new ArrayList<II>(0);
+ String name = args.sa.getNonResourceString(args.nameRes);
+ if (name == null) {
+ component = null;
+ componentShortName = null;
+ args.outError[0] = args.tag + " does not specify android:name";
+ return;
+ }
+
+ outInfo.name
+ = buildClassName(owner.applicationInfo.packageName, name, args.outError);
+ if (outInfo.name == null) {
+ component = null;
+ componentShortName = null;
+ args.outError[0] = args.tag + " does not have valid android:name";
+ return;
+ }
+
+ component = new ComponentName(owner.applicationInfo.packageName,
+ outInfo.name);
+ componentShortName = component.flattenToShortString();
+
+ int iconVal = args.sa.getResourceId(args.iconRes, 0);
+ if (iconVal != 0) {
+ outInfo.icon = iconVal;
+ outInfo.nonLocalizedLabel = null;
+ }
+
+ TypedValue v = args.sa.peekValue(args.labelRes);
+ if (v != null && (outInfo.labelRes=v.resourceId) == 0) {
+ outInfo.nonLocalizedLabel = v.coerceToString();
+ }
+
+ outInfo.packageName = owner.packageName;
+ }
+
+ public Component(final ParseComponentArgs args, final ComponentInfo outInfo) {
+ this(args, (PackageItemInfo)outInfo);
+ if (args.outError[0] != null) {
+ return;
+ }
+
+ if (args.processRes != 0) {
+ outInfo.processName = buildProcessName(owner.applicationInfo.packageName,
+ owner.applicationInfo.processName, args.sa.getNonResourceString(args.processRes),
+ args.flags, args.sepProcesses, args.outError);
+ }
+ outInfo.enabled = args.sa.getBoolean(args.enabledRes, true);
}
public Component(Component<II> clone) {
owner = clone.owner;
+ intents = clone.intents;
+ component = clone.component;
+ componentShortName = clone.componentShortName;
metaData = clone.metaData;
}
}
@@ -2192,14 +2319,14 @@
}
public final static class Activity extends Component<ActivityIntentInfo> {
- public final ActivityInfo info =
- new ActivityInfo();
+ public final ActivityInfo info;
- public Activity(Package _owner) {
- super(_owner);
- info.applicationInfo = owner.applicationInfo;
+ public Activity(final ParseComponentArgs args, final ActivityInfo _info) {
+ super(args, _info);
+ info = _info;
+ info.applicationInfo = args.owner.applicationInfo;
}
-
+
public String toString() {
return "Activity{"
+ Integer.toHexString(System.identityHashCode(this))
@@ -2221,14 +2348,14 @@
}
public final static class Service extends Component<ServiceIntentInfo> {
- public final ServiceInfo info =
- new ServiceInfo();
+ public final ServiceInfo info;
- public Service(Package _owner) {
- super(_owner);
- info.applicationInfo = owner.applicationInfo;
+ public Service(final ParseComponentArgs args, final ServiceInfo _info) {
+ super(args, _info);
+ info = _info;
+ info.applicationInfo = args.owner.applicationInfo;
}
-
+
public String toString() {
return "Service{"
+ Integer.toHexString(System.identityHashCode(this))
@@ -2252,13 +2379,13 @@
public final ProviderInfo info;
public boolean syncable;
- public Provider(Package _owner) {
- super(_owner);
- info = new ProviderInfo();
- info.applicationInfo = owner.applicationInfo;
+ public Provider(final ParseComponentArgs args, final ProviderInfo _info) {
+ super(args, _info);
+ info = _info;
+ info.applicationInfo = args.owner.applicationInfo;
syncable = false;
}
-
+
public Provider(Provider existingProvider) {
super(existingProvider);
this.info = existingProvider.info;
@@ -2291,13 +2418,13 @@
}
public final static class Instrumentation extends Component {
- public final InstrumentationInfo info =
- new InstrumentationInfo();
+ public final InstrumentationInfo info;
- public Instrumentation(Package _owner) {
- super(_owner);
+ public Instrumentation(final ParsePackageItemArgs args, final InstrumentationInfo _info) {
+ super(args, _info);
+ info = _info;
}
-
+
public String toString() {
return "Instrumentation{"
+ Integer.toHexString(System.identityHashCode(this))
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index 956b15a..bb3486c 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -144,11 +144,29 @@
}
public String toString() {
- return "{ scale=" + fontScale + " imsi=" + mcc + "/" + mnc
- + " locale=" + locale
- + " touch=" + touchscreen + " key=" + keyboard + "/"
- + keyboardHidden + "/" + hardKeyboardHidden
- + " nav=" + navigation + " orien=" + orientation + " }";
+ StringBuilder sb = new StringBuilder(128);
+ sb.append("{ scale=");
+ sb.append(fontScale);
+ sb.append(" imsi=");
+ sb.append(mcc);
+ sb.append("/");
+ sb.append(mnc);
+ sb.append(" loc=");
+ sb.append(locale);
+ sb.append(" touch=");
+ sb.append(touchscreen);
+ sb.append(" keys=");
+ sb.append(keyboard);
+ sb.append("/");
+ sb.append(keyboardHidden);
+ sb.append("/");
+ sb.append(hardKeyboardHidden);
+ sb.append(" nav=");
+ sb.append(navigation);
+ sb.append(" orien=");
+ sb.append(orientation);
+ sb.append('}');
+ return sb.toString();
}
/**
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 39d36de..333ba73 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -113,7 +113,7 @@
private static final String DATA_CONNECTION_TIME_DATA = "dct";
private static final String DATA_CONNECTION_COUNT_DATA = "dcc";
- private final StringBuilder mFormatBuilder = new StringBuilder(8);
+ private final StringBuilder mFormatBuilder = new StringBuilder(32);
private final Formatter mFormatter = new Formatter(mFormatBuilder);
/**
@@ -522,7 +522,7 @@
public abstract Map<String, ? extends Timer> getKernelWakelockStats();
- private final static void formatTime(StringBuilder out, long seconds) {
+ private final static void formatTimeRaw(StringBuilder out, long seconds) {
long days = seconds / (60 * 60 * 24);
if (days != 0) {
out.append(days);
@@ -550,22 +550,18 @@
}
}
- private final static String formatTime(long time) {
+ private final static void formatTime(StringBuilder sb, long time) {
long sec = time / 100;
- StringBuilder sb = new StringBuilder();
- formatTime(sb, sec);
+ formatTimeRaw(sb, sec);
sb.append((time - (sec * 100)) * 10);
sb.append("ms ");
- return sb.toString();
}
- private final static String formatTimeMs(long time) {
+ private final static void formatTimeMs(StringBuilder sb, long time) {
long sec = time / 1000;
- StringBuilder sb = new StringBuilder();
- formatTime(sb, sec);
+ formatTimeRaw(sb, sec);
sb.append(time - (sec * 1000));
sb.append("ms ");
- return sb.toString();
}
private final String formatRatioLocked(long num, long den) {
@@ -616,8 +612,8 @@
int count = timer.getCountLocked(which);
if (totalTimeMillis != 0) {
sb.append(linePrefix);
- sb.append(formatTimeMs(totalTimeMillis));
- sb.append(name != null ? name : "");
+ formatTimeMs(sb, totalTimeMillis);
+ if (name != null) sb.append(name);
sb.append(' ');
sb.append('(');
sb.append(count);
@@ -916,7 +912,7 @@
}
@SuppressWarnings("unused")
- private final void dumpLocked(Printer pw, String prefix, int which) {
+ private final void dumpLocked(PrintWriter pw, String prefix, int which) {
final long rawUptime = SystemClock.uptimeMillis() * 1000;
final long rawRealtime = SystemClock.elapsedRealtime() * 1000;
final long batteryUptime = getBatteryUptime(rawUptime);
@@ -932,33 +928,41 @@
SparseArray<? extends Uid> uidStats = getUidStats();
final int NU = uidStats.size();
- pw.println(prefix
- + " Time on battery: "
- + formatTimeMs(whichBatteryRealtime / 1000) + "("
- + formatRatioLocked(whichBatteryRealtime, totalRealtime)
- + ") realtime, "
- + formatTimeMs(whichBatteryUptime / 1000)
- + "(" + formatRatioLocked(whichBatteryUptime, totalRealtime)
- + ") uptime");
- pw.println(prefix
- + " Total run time: "
- + formatTimeMs(totalRealtime / 1000)
- + "realtime, "
- + formatTimeMs(totalUptime / 1000)
- + "uptime, ");
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Time on battery: ");
+ formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("(");
+ sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime));
+ sb.append(") realtime, ");
+ formatTimeMs(sb, whichBatteryUptime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime));
+ sb.append(") uptime");
+ pw.println(sb.toString());
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Total run time: ");
+ formatTimeMs(sb, totalRealtime / 1000);
+ sb.append("realtime, ");
+ formatTimeMs(sb, totalUptime / 1000);
+ sb.append("uptime, ");
+ pw.println(sb.toString());
final long screenOnTime = getScreenOnTime(batteryRealtime, which);
final long phoneOnTime = getPhoneOnTime(batteryRealtime, which);
final long wifiRunningTime = getWifiRunningTime(batteryRealtime, which);
final long wifiOnTime = getWifiOnTime(batteryRealtime, which);
final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which);
- pw.println(prefix
- + " Screen on: " + formatTimeMs(screenOnTime / 1000)
- + "(" + formatRatioLocked(screenOnTime, whichBatteryRealtime)
- + "), Input events: " + getInputEventCount(which)
- + ", Active phone call: " + formatTimeMs(phoneOnTime / 1000)
- + "(" + formatRatioLocked(phoneOnTime, whichBatteryRealtime) + ")");
sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Screen on: "); formatTimeMs(sb, screenOnTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(screenOnTime, whichBatteryRealtime));
+ sb.append("), Input events: "); sb.append(getInputEventCount(which));
+ sb.append(", Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime));
+ sb.append(")");
+ pw.println(sb.toString());
+ sb.setLength(0);
+ sb.append(prefix);
sb.append(" Screen brightnesses: ");
boolean didOne = false;
for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
@@ -970,7 +974,7 @@
didOne = true;
sb.append(SCREEN_BRIGHTNESS_NAMES[i]);
sb.append(" ");
- sb.append(formatTimeMs(time/1000));
+ formatTimeMs(sb, time/1000);
sb.append("(");
sb.append(formatRatioLocked(time, screenOnTime));
sb.append(")");
@@ -1030,16 +1034,19 @@
}
}
- pw.println(prefix
- + " Total received: " + formatBytesLocked(rxTotal)
- + ", Total sent: " + formatBytesLocked(txTotal));
- pw.println(prefix
- + " Total full wakelock time: " + formatTimeMs(
- (fullWakeLockTimeTotalMicros + 500) / 1000)
- + ", Total partial waklock time: " + formatTimeMs(
- (partialWakeLockTimeTotalMicros + 500) / 1000));
+ pw.print(prefix);
+ pw.print(" Total received: "); pw.print(formatBytesLocked(rxTotal));
+ pw.print(", Total sent: "); pw.println(formatBytesLocked(txTotal));
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Total full wakelock time: "); formatTimeMs(sb,
+ (fullWakeLockTimeTotalMicros + 500) / 1000);
+ sb.append(", Total partial waklock time: "); formatTimeMs(sb,
+ (partialWakeLockTimeTotalMicros + 500) / 1000);
+ pw.println(sb.toString());
sb.setLength(0);
+ sb.append(prefix);
sb.append(" Signal levels: ");
didOne = false;
for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) {
@@ -1051,7 +1058,7 @@
didOne = true;
sb.append(SIGNAL_STRENGTH_NAMES[i]);
sb.append(" ");
- sb.append(formatTimeMs(time/1000));
+ formatTimeMs(sb, time/1000);
sb.append("(");
sb.append(formatRatioLocked(time, whichBatteryRealtime));
sb.append(") ");
@@ -1062,6 +1069,7 @@
pw.println(sb.toString());
sb.setLength(0);
+ sb.append(prefix);
sb.append(" Radio types: ");
didOne = false;
for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
@@ -1073,7 +1081,7 @@
didOne = true;
sb.append(DATA_CONNECTION_NAMES[i]);
sb.append(" ");
- sb.append(formatTimeMs(time/1000));
+ formatTimeMs(sb, time/1000);
sb.append("(");
sb.append(formatRatioLocked(time, whichBatteryRealtime));
sb.append(") ");
@@ -1083,29 +1091,32 @@
if (!didOne) sb.append("No activity");
pw.println(sb.toString());
- pw.println(prefix
- + " Wifi on: " + formatTimeMs(wifiOnTime / 1000)
- + "(" + formatRatioLocked(wifiOnTime, whichBatteryRealtime)
- + "), Wifi running: " + formatTimeMs(wifiRunningTime / 1000)
- + "(" + formatRatioLocked(wifiRunningTime, whichBatteryRealtime)
- + "), Bluetooth on: " + formatTimeMs(bluetoothOnTime / 1000)
- + "(" + formatRatioLocked(bluetoothOnTime, whichBatteryRealtime)+ ")");
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(wifiOnTime, whichBatteryRealtime));
+ sb.append("), Wifi running: "); formatTimeMs(sb, wifiRunningTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(wifiRunningTime, whichBatteryRealtime));
+ sb.append("), Bluetooth on: "); formatTimeMs(sb, bluetoothOnTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(bluetoothOnTime, whichBatteryRealtime));
+ sb.append(")");
+ pw.println(sb.toString());
pw.println(" ");
if (which == STATS_UNPLUGGED) {
if (getIsOnBattery()) {
- pw.println(prefix + " Device is currently unplugged");
- pw.println(prefix + " Discharge cycle start level: " +
- getDischargeStartLevel());
- pw.println(prefix + " Discharge cycle current level: " +
- getDischargeCurrentLevel());
+ pw.print(prefix); pw.println(" Device is currently unplugged");
+ pw.print(prefix); pw.print(" Discharge cycle start level: ");
+ pw.println(getDischargeStartLevel());
+ pw.print(prefix); pw.print(" Discharge cycle current level: ");
+ pw.println(getDischargeCurrentLevel());
} else {
- pw.println(prefix + " Device is currently plugged into power");
- pw.println(prefix + " Last discharge cycle start level: " +
- getDischargeStartLevel());
- pw.println(prefix + " Last discharge cycle end level: " +
- getDischargeCurrentLevel());
+ pw.print(prefix); pw.println(" Device is currently plugged into power");
+ pw.print(prefix); pw.print(" Last discharge cycle start level: ");
+ pw.println(getDischargeStartLevel());
+ pw.print(prefix); pw.print(" Last discharge cycle end level: ");
+ pw.println(getDischargeCurrentLevel());
}
pw.println(" ");
}
@@ -1124,8 +1135,9 @@
long wifiTurnedOnTime = u.getWifiTurnedOnTime(batteryRealtime, which);
if (tcpReceived != 0 || tcpSent != 0) {
- pw.println(prefix + " Network: " + formatBytesLocked(tcpReceived) + " received, "
- + formatBytesLocked(tcpSent) + " sent");
+ pw.print(prefix); pw.print(" Network: ");
+ pw.print(formatBytesLocked(tcpReceived)); pw.print(" received, ");
+ pw.print(formatBytesLocked(tcpSent)); pw.println(" sent");
}
if (u.hasUserActivity()) {
@@ -1152,18 +1164,20 @@
if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0
|| wifiTurnedOnTime != 0) {
- pw.println(prefix + " Turned Wifi On Time: "
- + formatTimeMs(wifiTurnedOnTime / 1000)
- + "(" + formatRatioLocked(wifiTurnedOnTime,
- whichBatteryRealtime)+ ")");
- pw.println(prefix + " Full Wifi Lock Time: "
- + formatTimeMs(fullWifiLockOnTime / 1000)
- + "(" + formatRatioLocked(fullWifiLockOnTime,
- whichBatteryRealtime)+ ")");
- pw.println(prefix + " Scan Wifi Lock Time: "
- + formatTimeMs(scanWifiLockOnTime / 1000)
- + "(" + formatRatioLocked(scanWifiLockOnTime,
- whichBatteryRealtime)+ ")");
+ sb.setLength(0);
+ sb.append(prefix); sb.append(" Turned Wifi On: ");
+ formatTimeMs(sb, wifiTurnedOnTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(wifiTurnedOnTime,
+ whichBatteryRealtime)); sb.append(")\n");
+ sb.append(prefix); sb.append(" Full Wifi Lock: ");
+ formatTimeMs(sb, fullWifiLockOnTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime,
+ whichBatteryRealtime)); sb.append(")\n");
+ sb.append(prefix); sb.append(" Scan Wifi Lock: ");
+ formatTimeMs(sb, scanWifiLockOnTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(scanWifiLockOnTime,
+ whichBatteryRealtime)); sb.append(")");
+ pw.println(sb.toString());
}
Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats();
@@ -1217,7 +1231,7 @@
int count = timer.getCountLocked(which);
//timer.logState();
if (totalTime != 0) {
- sb.append(formatTimeMs(totalTime));
+ formatTimeMs(sb, totalTime);
sb.append("realtime (");
sb.append(count);
sb.append(" times)");
@@ -1247,10 +1261,15 @@
starts = ps.getStarts(which);
if (userTime != 0 || systemTime != 0 || starts != 0) {
- pw.println(prefix + " Proc " + ent.getKey() + ":");
- pw.println(prefix + " CPU: " + formatTime(userTime) + "user + "
- + formatTime(systemTime) + "kernel");
- pw.println(prefix + " " + starts + " process starts");
+ sb.setLength(0);
+ sb.append(prefix); sb.append(" Proc ");
+ sb.append(ent.getKey()); sb.append(":\n");
+ sb.append(prefix); sb.append(" CPU: ");
+ formatTime(sb, userTime); sb.append("usr + ");
+ formatTime(sb, systemTime); sb.append("krn\n");
+ sb.append(prefix); sb.append(" "); sb.append(starts);
+ sb.append(" proc starts");
+ pw.println(sb.toString());
uidActivity = true;
}
}
@@ -1260,12 +1279,13 @@
if (packageStats.size() > 0) {
for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent
: packageStats.entrySet()) {
- pw.println(prefix + " Apk " + ent.getKey() + ":");
+ pw.print(prefix); pw.print(" Apk "); pw.print(ent.getKey()); pw.println(":");
boolean apkActivity = false;
Uid.Pkg ps = ent.getValue();
int wakeups = ps.getWakeups(which);
if (wakeups != 0) {
- pw.println(prefix + " " + wakeups + " wakeup alarms");
+ pw.print(prefix); pw.print(" ");
+ pw.print(wakeups); pw.println(" wakeup alarms");
apkActivity = true;
}
Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats();
@@ -1277,24 +1297,28 @@
int starts = ss.getStarts(which);
int launches = ss.getLaunches(which);
if (startTime != 0 || starts != 0 || launches != 0) {
- pw.println(prefix + " Service " + sent.getKey() + ":");
- pw.println(prefix + " Created for: "
- + formatTimeMs(startTime / 1000)
- + " uptime");
- pw.println(prefix + " Starts: " + starts
- + ", launches: " + launches);
+ sb.setLength(0);
+ sb.append(prefix); sb.append(" Service ");
+ sb.append(sent.getKey()); sb.append(":\n");
+ sb.append(prefix); sb.append(" Created for: ");
+ formatTimeMs(sb, startTime / 1000);
+ sb.append(" uptime\n");
+ sb.append(prefix); sb.append(" Starts: ");
+ sb.append(starts);
+ sb.append(", launches: "); sb.append(launches);
+ pw.println(sb.toString());
apkActivity = true;
}
}
}
if (!apkActivity) {
- pw.println(prefix + " (nothing executed)");
+ pw.print(prefix); pw.println(" (nothing executed)");
}
uidActivity = true;
}
}
if (!uidActivity) {
- pw.println(prefix + " (nothing executed)");
+ pw.print(prefix); pw.println(" (nothing executed)");
}
}
}
@@ -1305,7 +1329,7 @@
* @param pw a Printer to receive the dump output.
*/
@SuppressWarnings("unused")
- public void dumpLocked(Printer pw) {
+ public void dumpLocked(PrintWriter pw) {
pw.println("Total Statistics (Current and Historic):");
pw.println(" System starts: " + getStartCount()
+ ", currently on battery: " + getIsOnBattery());
diff --git a/core/java/android/view/animation/Transformation.java b/core/java/android/view/animation/Transformation.java
index f9e85bf..cf210c8 100644
--- a/core/java/android/view/animation/Transformation.java
+++ b/core/java/android/view/animation/Transformation.java
@@ -18,6 +18,8 @@
import android.graphics.Matrix;
+import java.io.PrintWriter;
+
/**
* Defines the transformation to be applied at
* one point in time of an Animation.
@@ -134,14 +136,38 @@
@Override
public String toString() {
- return "Transformation{alpha=" + mAlpha + " matrix="
- + mMatrix.toShortString() + "}";
+ StringBuilder sb = new StringBuilder(64);
+ sb.append("Transformation");
+ toShortString(sb);
+ return sb.toString();
}
/**
* Return a string representation of the transformation in a compact form.
*/
public String toShortString() {
- return "{alpha=" + mAlpha + " matrix=" + mMatrix.toShortString() + "}";
+ StringBuilder sb = new StringBuilder(64);
+ toShortString(sb);
+ return sb.toString();
+ }
+
+ /**
+ * @hide
+ */
+ public void toShortString(StringBuilder sb) {
+ sb.append("{alpha="); sb.append(mAlpha);
+ sb.append(" matrix="); mMatrix.toShortString(sb);
+ sb.append('}');
+ }
+
+ /**
+ * Print short string, to optimize dumping.
+ * @hide
+ */
+ public void printShortString(PrintWriter pw) {
+ pw.print("{alpha="); pw.print(mAlpha);
+ pw.print(" matrix=");
+ mMatrix.printShortString(pw);
+ pw.print('}');
}
}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 58a9be85..77649f0 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -25,6 +25,7 @@
import android.os.SystemClock;
import android.telephony.TelephonyManager;
import android.util.Log;
+import android.util.PrintWriterPrinter;
import android.util.Printer;
import android.util.SparseArray;
@@ -32,6 +33,7 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -3096,32 +3098,33 @@
}
};
- public void dumpLocked(Printer pw) {
+ public void dumpLocked(PrintWriter pw) {
if (DEBUG) {
- pw.println("*** Screen timer:");
- mScreenOnTimer.logState(pw, " ");
+ Printer pr = new PrintWriterPrinter(pw);
+ pr.println("*** Screen timer:");
+ mScreenOnTimer.logState(pr, " ");
for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
- pw.println("*** Screen brightness #" + i + ":");
- mScreenBrightnessTimer[i].logState(pw, " ");
+ pr.println("*** Screen brightness #" + i + ":");
+ mScreenBrightnessTimer[i].logState(pr, " ");
}
- pw.println("*** Input event counter:");
- mInputEventCounter.logState(pw, " ");
- pw.println("*** Phone timer:");
- mPhoneOnTimer.logState(pw, " ");
+ pr.println("*** Input event counter:");
+ mInputEventCounter.logState(pr, " ");
+ pr.println("*** Phone timer:");
+ mPhoneOnTimer.logState(pr, " ");
for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) {
- pw.println("*** Signal strength #" + i + ":");
- mPhoneSignalStrengthsTimer[i].logState(pw, " ");
+ pr.println("*** Signal strength #" + i + ":");
+ mPhoneSignalStrengthsTimer[i].logState(pr, " ");
}
for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
- pw.println("*** Data connection type #" + i + ":");
- mPhoneDataConnectionsTimer[i].logState(pw, " ");
+ pr.println("*** Data connection type #" + i + ":");
+ mPhoneDataConnectionsTimer[i].logState(pr, " ");
}
- pw.println("*** Wifi timer:");
- mWifiOnTimer.logState(pw, " ");
- pw.println("*** WifiRunning timer:");
- mWifiRunningTimer.logState(pw, " ");
- pw.println("*** Bluetooth timer:");
- mBluetoothOnTimer.logState(pw, " ");
+ pr.println("*** Wifi timer:");
+ mWifiOnTimer.logState(pr, " ");
+ pr.println("*** WifiRunning timer:");
+ mWifiRunningTimer.logState(pr, " ");
+ pr.println("*** Bluetooth timer:");
+ mBluetoothOnTimer.logState(pr, " ");
}
super.dumpLocked(pw);
}