diff options
| -rw-r--r-- | packages/CrashRecovery/services/module/java/com/android/server/PackageWatchdog.java | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/packages/CrashRecovery/services/module/java/com/android/server/PackageWatchdog.java b/packages/CrashRecovery/services/module/java/com/android/server/PackageWatchdog.java index 8e5ae2082ac1..fbf51fd7cca7 100644 --- a/packages/CrashRecovery/services/module/java/com/android/server/PackageWatchdog.java +++ b/packages/CrashRecovery/services/module/java/com/android/server/PackageWatchdog.java @@ -19,6 +19,7 @@ package com.android.server; import static android.content.Intent.ACTION_REBOOT; import static android.content.Intent.ACTION_SHUTDOWN; import static android.service.watchdog.ExplicitHealthCheckService.PackageConfig; +import static android.util.Xml.Encoding.UTF_8; import static com.android.server.crashrecovery.CrashRecoveryUtils.dumpCrashRecoveryEvents; @@ -58,13 +59,14 @@ import android.util.XmlUtils; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.FastXmlSerializer; import com.android.modules.utils.BackgroundThread; -import com.android.modules.utils.TypedXmlPullParser; -import com.android.modules.utils.TypedXmlSerializer; import libcore.io.IoUtils; +import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlSerializer; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -1152,7 +1154,8 @@ public class PackageWatchdog { mAllObservers.clear(); try { infile = mPolicyFile.openRead(); - final TypedXmlPullParser parser = Xml.resolvePullParser(infile); + final XmlPullParser parser = Xml.newPullParser(); + parser.setInput(infile, UTF_8.name()); XmlUtils.beginDocument(parser, TAG_PACKAGE_WATCHDOG); int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { @@ -1163,7 +1166,7 @@ public class PackageWatchdog { } } catch (FileNotFoundException e) { // Nothing to monitor - } catch (IOException | NumberFormatException | XmlPullParserException e) { + } catch (Exception e) { Slog.wtf(TAG, "Unable to read monitored packages, deleting file", e); mPolicyFile.delete(); } finally { @@ -1237,10 +1240,11 @@ public class PackageWatchdog { } try { - TypedXmlSerializer out = Xml.resolveSerializer(stream); + XmlSerializer out = new FastXmlSerializer(); + out.setOutput(stream, UTF_8.name()); out.startDocument(null, true); out.startTag(null, TAG_PACKAGE_WATCHDOG); - out.attributeInt(null, ATTR_VERSION, DB_VERSION); + out.attribute(null, ATTR_VERSION, Integer.toString(DB_VERSION)); for (int oIndex = 0; oIndex < mAllObservers.size(); oIndex++) { mAllObservers.valueAt(oIndex).writeLocked(out); } @@ -1356,12 +1360,12 @@ public class PackageWatchdog { * Does not persist any package failure thresholds. */ @GuardedBy("mLock") - public boolean writeLocked(TypedXmlSerializer out) { + public boolean writeLocked(XmlSerializer out) { try { out.startTag(null, TAG_OBSERVER); out.attribute(null, ATTR_NAME, name); if (Flags.recoverabilityDetection()) { - out.attributeInt(null, ATTR_MITIGATION_COUNT, mMitigationCount); + out.attribute(null, ATTR_MITIGATION_COUNT, Integer.toString(mMitigationCount)); } for (int i = 0; i < mPackages.size(); i++) { MonitoredPackage p = mPackages.valueAt(i); @@ -1486,7 +1490,7 @@ public class PackageWatchdog { * #loadFromFile which in turn is only called on construction of the * singleton PackageWatchdog. **/ - public static ObserverInternal read(TypedXmlPullParser parser, PackageWatchdog watchdog) { + public static ObserverInternal read(XmlPullParser parser, PackageWatchdog watchdog) { String observerName = null; int observerMitigationCount = 0; if (TAG_OBSERVER.equals(parser.getName())) { @@ -1501,9 +1505,9 @@ public class PackageWatchdog { try { if (Flags.recoverabilityDetection()) { try { - observerMitigationCount = - parser.getAttributeInt(null, ATTR_MITIGATION_COUNT); - } catch (XmlPullParserException e) { + observerMitigationCount = Integer.parseInt( + parser.getAttributeValue(null, ATTR_MITIGATION_COUNT)); + } catch (Exception e) { Slog.i( TAG, "ObserverInternal mitigation count was not present."); @@ -1579,13 +1583,14 @@ public class PackageWatchdog { hasPassedHealthCheck, mitigationCalls); } - MonitoredPackage parseMonitoredPackage(TypedXmlPullParser parser) + MonitoredPackage parseMonitoredPackage(XmlPullParser parser) throws XmlPullParserException { String packageName = parser.getAttributeValue(null, ATTR_NAME); - long duration = parser.getAttributeLong(null, ATTR_DURATION); - long healthCheckDuration = parser.getAttributeLong(null, - ATTR_EXPLICIT_HEALTH_CHECK_DURATION); - boolean hasPassedHealthCheck = parser.getAttributeBoolean(null, ATTR_PASSED_HEALTH_CHECK); + long duration = Long.parseLong(parser.getAttributeValue(null, ATTR_DURATION)); + long healthCheckDuration = Long.parseLong(parser.getAttributeValue(null, + ATTR_EXPLICIT_HEALTH_CHECK_DURATION)); + boolean hasPassedHealthCheck = Boolean.parseBoolean(parser.getAttributeValue(null, + ATTR_PASSED_HEALTH_CHECK)); LongArrayQueue mitigationCalls = parseLongArrayQueue( parser.getAttributeValue(null, ATTR_MITIGATION_CALLS)); return newMonitoredPackage(packageName, @@ -1643,12 +1648,13 @@ public class PackageWatchdog { * @hide */ @GuardedBy("mLock") - public void writeLocked(TypedXmlSerializer out) throws IOException { + public void writeLocked(XmlSerializer out) throws IOException { out.startTag(null, TAG_PACKAGE); out.attribute(null, ATTR_NAME, getName()); - out.attributeLong(null, ATTR_DURATION, mDurationMs); - out.attributeLong(null, ATTR_EXPLICIT_HEALTH_CHECK_DURATION, mHealthCheckDurationMs); - out.attributeBoolean(null, ATTR_PASSED_HEALTH_CHECK, mHasPassedHealthCheck); + out.attribute(null, ATTR_DURATION, Long.toString(mDurationMs)); + out.attribute(null, ATTR_EXPLICIT_HEALTH_CHECK_DURATION, + Long.toString(mHealthCheckDurationMs)); + out.attribute(null, ATTR_PASSED_HEALTH_CHECK, Boolean.toString(mHasPassedHealthCheck)); LongArrayQueue normalizedCalls = normalizeMitigationCalls(); out.attribute(null, ATTR_MITIGATION_CALLS, longArrayQueueToString(normalizedCalls)); out.endTag(null, TAG_PACKAGE); |