From 2f5a6895c552b41b78076c889ca6149b26bb17cf Mon Sep 17 00:00:00 2001 From: Neil Fuller <nfuller@google.com> Date: Tue, 10 Jul 2018 18:41:19 +0100 Subject: [PATCH] Move XML object factory logic to libcore It makes sense to hide the details of the parser implementation (and other similar objects) in libcore so it could be changed. This change removes the "ExpatPerformanceTest" which appears not to have been maintained and was comparing KxmlParser with itself. It is assumed that android.util.Xml used to return the expat parser. Test: build Bug: 111055375 Change-Id: Ibad247323ba90cd949aecb2bd92f2f73306a4327 --- core/java/android/util/Xml.java | 46 ++----- .../src/android/sax/ExpatPerformanceTest.java | 125 ------------------ 2 files changed, 14 insertions(+), 157 deletions(-) delete mode 100644 sax/tests/saxtests/src/android/sax/ExpatPerformanceTest.java diff --git a/core/java/android/util/Xml.java b/core/java/android/util/Xml.java index 041e8a85aafe..e3b8fec3559e 100644 --- a/core/java/android/util/Xml.java +++ b/core/java/android/util/Xml.java @@ -16,27 +16,27 @@ package android.util; -import java.io.IOException; -import java.io.InputStream; -import java.io.Reader; -import java.io.StringReader; -import java.io.UnsupportedEncodingException; -import org.apache.harmony.xml.ExpatReader; -import org.kxml2.io.KXmlParser; +import libcore.util.XmlObjectFactory; + import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; -import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; + /** * XML utility methods. */ public class Xml { - /** @hide */ public Xml() {} + private Xml() {} /** * {@link org.xmlpull.v1.XmlPullParser} "relaxed" feature name. @@ -52,7 +52,7 @@ public class Xml { public static void parse(String xml, ContentHandler contentHandler) throws SAXException { try { - XMLReader reader = new ExpatReader(); + XMLReader reader = XmlObjectFactory.newXMLReader(); reader.setContentHandler(contentHandler); reader.parse(new InputSource(new StringReader(xml))); } catch (IOException e) { @@ -66,7 +66,7 @@ public class Xml { */ public static void parse(Reader in, ContentHandler contentHandler) throws IOException, SAXException { - XMLReader reader = new ExpatReader(); + XMLReader reader = XmlObjectFactory.newXMLReader(); reader.setContentHandler(contentHandler); reader.parse(new InputSource(in)); } @@ -77,7 +77,7 @@ public class Xml { */ public static void parse(InputStream in, Encoding encoding, ContentHandler contentHandler) throws IOException, SAXException { - XMLReader reader = new ExpatReader(); + XMLReader reader = XmlObjectFactory.newXMLReader(); reader.setContentHandler(contentHandler); InputSource source = new InputSource(in); source.setEncoding(encoding.expatName); @@ -89,7 +89,7 @@ public class Xml { */ public static XmlPullParser newPullParser() { try { - KXmlParser parser = new KXmlParser(); + XmlPullParser parser = XmlObjectFactory.newXmlPullParser(); parser.setFeature(XmlPullParser.FEATURE_PROCESS_DOCDECL, true); parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); return parser; @@ -102,25 +102,7 @@ public class Xml { * Creates a new xml serializer. */ public static XmlSerializer newSerializer() { - try { - return XmlSerializerFactory.instance.newSerializer(); - } catch (XmlPullParserException e) { - throw new AssertionError(e); - } - } - - /** Factory for xml serializers. Initialized on demand. */ - static class XmlSerializerFactory { - static final String TYPE - = "org.kxml2.io.KXmlParser,org.kxml2.io.KXmlSerializer"; - static final XmlPullParserFactory instance; - static { - try { - instance = XmlPullParserFactory.newInstance(TYPE, null); - } catch (XmlPullParserException e) { - throw new AssertionError(e); - } - } + return XmlObjectFactory.newXmlSerializer(); } /** diff --git a/sax/tests/saxtests/src/android/sax/ExpatPerformanceTest.java b/sax/tests/saxtests/src/android/sax/ExpatPerformanceTest.java deleted file mode 100644 index 892c49052533..000000000000 --- a/sax/tests/saxtests/src/android/sax/ExpatPerformanceTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.sax; - -import android.test.AndroidTestCase; -import android.test.suitebuilder.annotation.LargeTest; -import android.util.Log; -import android.util.Xml; -import org.kxml2.io.KXmlParser; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import com.android.frameworks.saxtests.R; - -public class ExpatPerformanceTest extends AndroidTestCase { - - private static final String TAG = ExpatPerformanceTest.class.getSimpleName(); - - private byte[] mXmlBytes; - - @Override - public void setUp() throws Exception { - super.setUp(); - InputStream in = mContext.getResources().openRawResource(R.raw.youtube); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int length; - while ((length = in.read(buffer)) != -1) { - out.write(buffer, 0, length); - } - mXmlBytes = out.toByteArray(); - - Log.i("***", "File size: " + (mXmlBytes.length / 1024) + "k"); - } - - @LargeTest - public void testPerformance() throws Exception { -// try { -// Debug.startMethodTracing("expat3"); -// for (int i = 0; i < 1; i++) { - runJavaPullParser(); - runSax(); - runExpatPullParser(); -// } -// } finally { -// Debug.stopMethodTracing(); -// } - } - - private InputStream newInputStream() { - return new ByteArrayInputStream(mXmlBytes); - } - - private void runSax() throws IOException, SAXException { - long start = System.currentTimeMillis(); - Xml.parse(newInputStream(), Xml.Encoding.UTF_8, new DefaultHandler()); - long elapsed = System.currentTimeMillis() - start; - Log.i(TAG, "expat SAX: " + elapsed + "ms"); - } - - private void runExpatPullParser() throws XmlPullParserException, IOException { - long start = System.currentTimeMillis(); - XmlPullParser pullParser = Xml.newPullParser(); - pullParser.setInput(newInputStream(), "UTF-8"); - withPullParser(pullParser); - long elapsed = System.currentTimeMillis() - start; - Log.i(TAG, "expat pull: " + elapsed + "ms"); - } - - private void runJavaPullParser() throws XmlPullParserException, IOException { - XmlPullParser pullParser; - long start = System.currentTimeMillis(); - pullParser = new KXmlParser(); - pullParser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); - pullParser.setInput(newInputStream(), "UTF-8"); - withPullParser(pullParser); - long elapsed = System.currentTimeMillis() - start; - Log.i(TAG, "java pull parser: " + elapsed + "ms"); - } - - private static void withPullParser(XmlPullParser pullParser) - throws IOException, XmlPullParserException { - int eventType = pullParser.next(); - while (eventType != XmlPullParser.END_DOCUMENT) { - switch (eventType) { - case XmlPullParser.START_TAG: - pullParser.getName(); -// int nattrs = pullParser.getAttributeCount(); -// for (int i = 0; i < nattrs; ++i) { -// pullParser.getAttributeName(i); -// pullParser.getAttributeValue(i); -// } - break; - case XmlPullParser.END_TAG: - pullParser.getName(); - break; - case XmlPullParser.TEXT: - pullParser.getText(); - break; - } - eventType = pullParser.next(); - } - } -} -- GitLab