am b8b34ba9: am 6dc2c7a5: am 8b982465: Merge "Control OpenGL traces from Developer Options in Settings" into jb-mr1-dev

* commit 'b8b34ba9f5e1fb545276dc95ff57859e26188265':
  Control OpenGL traces from Developer Options in Settings
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 6b1c3f9a..14e1fc8 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -670,6 +670,22 @@
         <item>1280x720/213;1920x1080/320</item>
     </string-array>
 
+    <!-- Titles for OpenGL traces preference. [CHAR LIMIT=35] -->
+    <string-array name="enable_opengl_traces_entries">
+        <item>None</item>
+        <item>Logcat</item>
+        <item>Systrace (Graphics)</item>
+        <item>Call stack on glGetError</item>
+    </string-array>
+
+    <!-- Values for OpenGL traces preference. -->
+    <string-array name="enable_opengl_traces_values" translatable="false" >
+        <item>0</item>
+        <item>1</item>
+        <item>systrace</item>
+        <item>error</item>
+    </string-array>
+
     <!-- Titles for app process limit preference. [CHAR LIMIT=35] -->
     <string-array name="app_process_limit_entries">
         <item>Standard limit</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5310c7b..2a60dd1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3954,6 +3954,9 @@
     <!-- UI debug setting: enable low-level traces, all enabled summary [CHAR LIMIT=NONE] -->
     <string name="enable_traces_summary_all">All traces currently enabled</string>
 
+    <!-- UI debug setting: enable various types of OpenGL traces [CHAR LIMIT=25] -->
+    <string name="enable_opengl_traces_title">Enable OpenGL traces</string>
+
     <!-- UI debug setting: show layout bounds information [CHAR LIMIT=25] -->
     <string name="debug_layout">Show layout bounds</string>
     <!-- UI debug setting: show layout bounds information summary [CHAR LIMIT=50] -->
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 1f08eaa..e67aad1 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -188,6 +188,13 @@
             android:title="@string/track_frame_time"
             android:summary="@string/track_frame_time_summary"/>
 
+        <ListPreference
+            android:key="enable_opengl_traces"
+            android:title="@string/enable_opengl_traces_title"
+            android:persistent="false"
+            android:entries="@array/enable_opengl_traces_entries"
+            android:entryValues="@array/enable_opengl_traces_values" />
+
         <MultiCheckPreference
             android:key="enable_traces"
             android:title="@string/enable_traces_title"
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 0ad6a91..a98230f 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -95,6 +95,7 @@
     private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
     private static final String MSAA_PROPERTY = "debug.egl.force_msaa";
     private static final String BUGREPORT_IN_POWER_KEY = "bugreport_in_power";
+    private static final String OPENGL_TRACES_PROPERTY = "debug.egl.trace";
 
     private static final String DEBUG_APP_KEY = "debug_app";
     private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
@@ -117,6 +118,7 @@
     private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
     private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
     private static final String DEBUG_DEBUGGING_CATEGORY_KEY = "debug_debugging_category";
+    private static final String OPENGL_TRACES_KEY = "enable_opengl_traces";
 
     private static final String ENABLE_TRACES_KEY = "enable_traces";
 
@@ -170,6 +172,7 @@
     private ListPreference mTransitionAnimationScale;
     private ListPreference mAnimatorDurationScale;
     private ListPreference mOverlayDisplayDevices;
+    private ListPreference mOpenGLTraces;
     private MultiCheckPreference mEnableTracesPref;
 
     private CheckBoxPreference mImmediatelyDestroyActivities;
@@ -245,6 +248,9 @@
         mOverlayDisplayDevices = (ListPreference) findPreference(OVERLAY_DISPLAY_DEVICES_KEY);
         mAllPrefs.add(mOverlayDisplayDevices);
         mOverlayDisplayDevices.setOnPreferenceChangeListener(this);
+        mOpenGLTraces = (ListPreference) findPreference(OPENGL_TRACES_KEY);
+        mAllPrefs.add(mOpenGLTraces);
+        mOpenGLTraces.setOnPreferenceChangeListener(this);
         mEnableTracesPref = (MultiCheckPreference)findPreference(ENABLE_TRACES_KEY);
         String[] traceValues = new String[Trace.TRACE_TAGS.length];
         for (int i=Trace.TRACE_FLAGS_START_BIT; i<traceValues.length; i++) {
@@ -405,6 +411,7 @@
         updateDebugLayoutOptions();
         updateAnimationScaleOptions();
         updateOverlayDisplayDevicesOptions();
+        updateOpenGLTracesOptions();
         updateEnableTracesOptions();
         updateImmediatelyDestroyActivitiesOptions();
         updateAppProcessLimitOptions();
@@ -811,6 +818,30 @@
         updateOverlayDisplayDevicesOptions();
     }
 
+    private void updateOpenGLTracesOptions() {
+        String value = SystemProperties.get(OPENGL_TRACES_PROPERTY);
+        if (value == null) {
+            value = "";
+        }
+
+        CharSequence[] values = mOpenGLTraces.getEntryValues();
+        for (int i = 0; i < values.length; i++) {
+            if (value.contentEquals(values[i])) {
+                mOpenGLTraces.setValueIndex(i);
+                mOpenGLTraces.setSummary(mOpenGLTraces.getEntries()[i]);
+                return;
+            }
+        }
+        mOpenGLTraces.setValueIndex(0);
+        mOpenGLTraces.setSummary(mOpenGLTraces.getEntries()[0]);
+    }
+
+    private void writeOpenGLTracesOptions(Object newValue) {
+        SystemProperties.set(OPENGL_TRACES_PROPERTY, newValue == null ? "" : newValue.toString());
+        pokeSystemProperties();
+        updateOpenGLTracesOptions();
+    }
+
     private void updateAppProcessLimitOptions() {
         try {
             int limit = ActivityManagerNative.getDefault().getProcessLimit();
@@ -1037,6 +1068,9 @@
         } else if (preference == mOverlayDisplayDevices) {
             writeOverlayDisplayDevicesOptions(newValue);
             return true;
+        } else if (preference == mOpenGLTraces) {
+            writeOpenGLTracesOptions(newValue);
+            return true;
         } else if (preference == mEnableTracesPref) {
             writeEnableTracesOptions();
             return true;