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;
