Merge "Merge "CP: Add EGL extensions to graphics device info" into nougat-cts-dev am: 0f9f0a94ad" into nougat-mr1-cts-dev
diff --git a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GlesStubActivity.java b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GlesStubActivity.java
index 9e0d3c5..5edf531 100644
--- a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GlesStubActivity.java
+++ b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GlesStubActivity.java
@@ -24,6 +24,8 @@
 import android.os.Bundle;
 import android.view.Window;
 import android.view.WindowManager;
+import android.opengl.EGL14;
+import android.opengl.EGLDisplay;
 import android.opengl.GLES20;
 import android.opengl.GLES30;
 import android.opengl.GLSurfaceView;
@@ -32,6 +34,7 @@
 import java.lang.reflect.Field;
 import java.nio.FloatBuffer;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 import java.util.HashSet;
@@ -50,10 +53,11 @@
     private int mVersion = -1;
     private GraphicsDeviceInfo mGraphicsDeviceInfo;
     private CountDownLatch mDone = new CountDownLatch(1);
-    private HashSet<String> mOpenGlExtensions = new HashSet<String>();
-    private HashSet<String> mFormats = new HashSet<String>();
-    private HashMap<String, Object> mImplVariables = new HashMap<String, Object>();
-    private HashSet<String> mDynamicArrayVariables = new HashSet<String>();
+    private HashSet<String> mOpenGlExtensions = new HashSet<>();
+    private HashSet<String> mEglExtensions = new HashSet<>();
+    private HashSet<String> mFormats = new HashSet<>();
+    private HashMap<String, Object> mImplVariables = new HashMap<>();
+    private HashSet<String> mDynamicArrayVariables = new HashSet<>();
     private String mGraphicsVendor;
     private String mGraphicsRenderer;
 
@@ -126,6 +130,15 @@
         mOpenGlExtensions.add(openGlExtension);
     }
 
+    List<String> getEglExtensions() {
+        return new ArrayList<>(mEglExtensions);
+    }
+
+    void addEglExtensions(String[] eglExtensions) {
+        // NOTE: We may end up here multiple times, using set to avoid dupes.
+        mEglExtensions.addAll(Arrays.asList(eglExtensions));
+    }
+
     List<String> getCompressedTextureFormats() {
         return new ArrayList<>(mFormats);
     }
@@ -429,6 +442,8 @@
             }
             scanner.close();
 
+            collectEglExtensions(mParent);
+
             mDone.countDown();
         }
 
@@ -446,5 +461,22 @@
                 mParent.addImplementationVariable(name, value, dynamicArray);
             }
         }
+
+        private static void collectEglExtensions(GlesStubActivity collector) {
+            EGLDisplay display = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY);
+            if (display == EGL14.EGL_NO_DISPLAY) {
+                Log.e(LOG_TAG, "Failed to init EGL default display: 0x" +
+                        Integer.toHexString(EGL14.eglGetError()));
+                return;
+            }
+            String extensions = EGL14.eglQueryString(display, EGL14.EGL_EXTENSIONS);
+            int error = EGL14.eglGetError();
+            if (error != EGL14.EGL_SUCCESS) {
+                Log.e(LOG_TAG, "Failed to query extension string: 0x" + Integer.toHexString(error));
+                return;
+            }
+            // Fingers crossed for no extra white space in the extension string.
+            collector.addEglExtensions(extensions.split(" "));
+        }
     }
 }
diff --git a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GraphicsDeviceInfo.java b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GraphicsDeviceInfo.java
index f1832b3..e1d0cef 100644
--- a/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GraphicsDeviceInfo.java
+++ b/common/device-side/device-info/src/com/android/compatibility/common/deviceinfo/GraphicsDeviceInfo.java
@@ -95,5 +95,7 @@
                 }
             }
         }
+
+        store.addListResult("egl_extension", stubActivity.getEglExtensions());
     }
 }