am e350b3b0: DO NOT MERGE Add opengl extensions to cts device info report output.

* commit 'e350b3b0138582f353ae90d7f748efd097c31ebf':
  DO NOT MERGE Add opengl extensions to cts device info report output.
diff --git a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoActivity.java b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoActivity.java
index 7ee7436..4df8e62 100644
--- a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoActivity.java
+++ b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoActivity.java
@@ -36,6 +36,7 @@
 
     // work done should be reported in GLES..View
     private CountDownLatch mDone = new CountDownLatch(1);
+    private HashSet<String> mOpenGlExtensions = new HashSet<String>();
     private HashSet<String> mFormats = new HashSet<String>();
     private String mGraphicsVendor;
     private String mGraphicsRenderer;
@@ -67,14 +68,20 @@
             }
         }
 
-        StringBuilder builder = new StringBuilder();
+        StringBuilder textureBuilder = new StringBuilder();
         for (String format: mFormats) {
-            builder.append(format);
-            builder.append(";");
+            textureBuilder.append(format).append(";");
+        }
+        StringBuilder extensionBuilder = new StringBuilder();
+        for (String extension : mOpenGlExtensions) {
+            extensionBuilder.append(extension).append(";");
         }
         DeviceInfoInstrument.addResult(
+                DeviceInfoConstants.OPEN_GL_EXTENSIONS,
+                extensionBuilder.toString());
+        DeviceInfoInstrument.addResult(
                 DeviceInfoConstants.OPEN_GL_COMPRESSED_TEXTURE_FORMATS,
-                builder.toString());
+                textureBuilder.toString());
         DeviceInfoInstrument.addResult(
                 DeviceInfoConstants.GRAPHICS_VENDOR,
                 mGraphicsVendor);
@@ -84,6 +91,10 @@
         mDone.countDown();
     }
 
+    public void addOpenGlExtension(String openGlExtension) {
+        mOpenGlExtensions.add(openGlExtension);
+    }
+
     public void addCompressedTextureFormat(String format) {
         mFormats.add(format);
     }
diff --git a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoConstants.java b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoConstants.java
index ddc87dc..d77a44c 100644
--- a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoConstants.java
+++ b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/DeviceInfoConstants.java
@@ -23,6 +23,7 @@
  */
 public interface DeviceInfoConstants {
 
+    public static final String OPEN_GL_EXTENSIONS = "openGlExtensions";
     public static final String OPEN_GL_COMPRESSED_TEXTURE_FORMATS =
             "openGlCompressedTextureFormats";
     public static final String SYS_LIBRARIES = "systemlibraries";
diff --git a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/GLESSurfaceView.java b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/GLESSurfaceView.java
index b3af3a7..1d3bf7f 100644
--- a/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/GLESSurfaceView.java
+++ b/tools/device-setup/TestDeviceSetup/src/android/tests/getinfo/GLESSurfaceView.java
@@ -81,6 +81,7 @@
             scanner.useDelimiter(" ");
             while (scanner.hasNext()) {
                 String ext = scanner.next();
+                mParent.addOpenGlExtension(ext);
                 if (ext.contains("texture")) {
                     if (ext.contains("compression") || ext.contains("compressed")) {
                         Log.i(TAG, "Compression supported: " + ext);
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/result/DeviceInfoResult.java b/tools/tradefed-host/src/com/android/cts/tradefed/result/DeviceInfoResult.java
index 56b3913..dd91af0 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/result/DeviceInfoResult.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/result/DeviceInfoResult.java
@@ -53,6 +53,10 @@
     private static final String OPENGL_TEXTURE_FORMAT_TAG = "TextureFormat";
     private static final String OPENGL_TEXTURE_FORMAT_DELIM = ";";
 
+    private static final String OPENGL_EXTENSIONS_TAG = "OpenGlExtensions";
+    private static final String OPENGL_EXTENSION_TAG = "OpenGlExtension";
+    private static final String OPENGL_EXTENSION_DELIM = ";";
+
     private static final String SYSLIB_INFO_TAG = "SystemLibrariesInfo";
     private static final String SYSLIB_TAG = "Library";
     private static final String SYSLIB_DELIM = ";";
@@ -73,47 +77,52 @@
     public void serialize(KXmlSerializer serializer) throws IOException {
         serializer.startTag(ns, TAG);
 
-        if (!mMetrics.isEmpty()) {
-
-            // Extract metrics that need extra handling, and then dump the remainder into BuildInfo
-            Map<String, String> metricsCopy = new HashMap<String, String>(mMetrics);
-            serializer.startTag(ns, SCREEN_TAG);
-            serializer.attribute(ns, DeviceInfoConstants.RESOLUTION,
-                    getMetric(metricsCopy, DeviceInfoConstants.RESOLUTION));
-            serializer.attribute(ns, DeviceInfoConstants.SCREEN_DENSITY,
-                    getMetric(metricsCopy, DeviceInfoConstants.SCREEN_DENSITY));
-            serializer.attribute(ns, DeviceInfoConstants.SCREEN_DENSITY_BUCKET,
-                    getMetric(metricsCopy, DeviceInfoConstants.SCREEN_DENSITY_BUCKET));
-            serializer.attribute(ns, DeviceInfoConstants.SCREEN_SIZE,
-                    getMetric(metricsCopy, DeviceInfoConstants.SCREEN_SIZE));
-            serializer.endTag(ns, SCREEN_TAG);
-
-            serializer.startTag(ns, PHONE_TAG);
-            serializer.attribute(ns, DeviceInfoConstants.PHONE_NUMBER,
-                    getMetric(metricsCopy, DeviceInfoConstants.PHONE_NUMBER));
-            serializer.endTag(ns, PHONE_TAG);
-
-            String featureData = getMetric(metricsCopy, DeviceInfoConstants.FEATURES);
-            String processData = getMetric(metricsCopy, DeviceInfoConstants.PROCESSES);
-            String sysLibData = getMetric(metricsCopy, DeviceInfoConstants.SYS_LIBRARIES);
-            String textureData = getMetric(metricsCopy,
-                    DeviceInfoConstants.OPEN_GL_COMPRESSED_TEXTURE_FORMATS);
-
-            // dump the remaining metrics without translation
-            serializer.startTag(ns, BUILD_TAG);
-            for (Map.Entry<String, String> metricEntry : metricsCopy.entrySet()) {
-                serializer.attribute(ns, metricEntry.getKey(), metricEntry.getValue());
-            }
-            serializer.endTag(ns, BUILD_TAG);
-
-            serializeFeatureInfo(serializer, featureData);
-            serializeProcessInfo(serializer, processData);
-            serializeSystemLibrariesInfo(serializer, sysLibData);
-            serializeOpenGLCompressedTextureFormatsInfo(serializer, textureData);
-        } else {
+        if (mMetrics.isEmpty()) {
             // this might be expected, if device info collection was turned off
             CLog.d("Could not find device info");
+            serializer.endTag(ns, TAG);
+            return;
         }
+
+        // Extract metrics that need extra handling, and then dump the remainder into BuildInfo
+        Map<String, String> metricsCopy = new HashMap<String, String>(mMetrics);
+        serializer.startTag(ns, SCREEN_TAG);
+        serializer.attribute(ns, DeviceInfoConstants.RESOLUTION,
+                getMetric(metricsCopy, DeviceInfoConstants.RESOLUTION));
+        serializer.attribute(ns, DeviceInfoConstants.SCREEN_DENSITY,
+                getMetric(metricsCopy, DeviceInfoConstants.SCREEN_DENSITY));
+        serializer.attribute(ns, DeviceInfoConstants.SCREEN_DENSITY_BUCKET,
+                getMetric(metricsCopy, DeviceInfoConstants.SCREEN_DENSITY_BUCKET));
+        serializer.attribute(ns, DeviceInfoConstants.SCREEN_SIZE,
+                getMetric(metricsCopy, DeviceInfoConstants.SCREEN_SIZE));
+        serializer.endTag(ns, SCREEN_TAG);
+
+        serializer.startTag(ns, PHONE_TAG);
+        serializer.attribute(ns, DeviceInfoConstants.PHONE_NUMBER,
+                getMetric(metricsCopy, DeviceInfoConstants.PHONE_NUMBER));
+        serializer.endTag(ns, PHONE_TAG);
+
+        String featureData = getMetric(metricsCopy, DeviceInfoConstants.FEATURES);
+        String processData = getMetric(metricsCopy, DeviceInfoConstants.PROCESSES);
+        String sysLibData = getMetric(metricsCopy, DeviceInfoConstants.SYS_LIBRARIES);
+        String textureData = getMetric(metricsCopy,
+                DeviceInfoConstants.OPEN_GL_COMPRESSED_TEXTURE_FORMATS);
+        String openGlExtensionData = getMetric(metricsCopy,
+                DeviceInfoConstants.OPEN_GL_EXTENSIONS);
+
+        // dump the remaining metrics without translation
+        serializer.startTag(ns, BUILD_TAG);
+        for (Map.Entry<String, String> metricEntry : metricsCopy.entrySet()) {
+            serializer.attribute(ns, metricEntry.getKey(), metricEntry.getValue());
+        }
+        serializer.endTag(ns, BUILD_TAG);
+
+        serializeFeatureInfo(serializer, featureData);
+        serializeProcessInfo(serializer, processData);
+        serializeSystemLibrariesInfo(serializer, sysLibData);
+        serializeOpenGLCompressedTextureFormatsInfo(serializer, textureData);
+        serializeOpenGLExtensions(serializer, openGlExtensionData);
+        // End
         serializer.endTag(ns, TAG);
     }
 
@@ -148,6 +157,12 @@
                 OPENGL_TEXTURE_FORMAT_DELIM, null, formats, "name");
     }
 
+    private void serializeOpenGLExtensions(KXmlSerializer serializer, String extensions)
+            throws IOException {
+        serialize(serializer, OPENGL_EXTENSIONS_TAG, OPENGL_EXTENSION_TAG,
+                OPENGL_EXTENSION_DELIM, null, extensions, "name");
+    }
+
     private void serializeSystemLibrariesInfo(KXmlSerializer serializer, String libs)
             throws IOException {
         serialize(serializer, SYSLIB_INFO_TAG, SYSLIB_TAG, SYSLIB_DELIM, null, libs, "name");