Add new developer setting to visualize overdraw

Change-Id: I16d6bb5a199233efebf5c3211dbe57dc9b6729c9
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 97c0726..53923a3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3879,6 +3879,11 @@
     <!-- UI debug setting: show hardware layers updates summary [CHAR LIMIT=50] -->
     <string name="show_hw_layers_updates_summary">Flash hardware layers green when they update</string>
 
+    <!-- UI debug setting: show the amount of overdraw in apps using the GPU [CHAR LIMIT=25] -->
+    <string name="show_hw_overdraw">Show GPU overdraw</string>
+    <!-- UI debug setting: Show the amount of overdraw summary [CHAR LIMIT=50] -->
+    <string name="show_hw_overdraw_summary">From best to worst: blue, green, light red, red</string>
+
     <!-- UI debug setting: disable use of overlays? [CHAR LIMIT=25] -->
     <string name="disable_overlays">Disable HW overlays</string>
     <!-- UI debug setting: disable use of overlays summary [CHAR LIMIT=50] -->
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index 575f802..6a3e82b 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -111,6 +111,11 @@
             android:summary="@string/show_hw_layers_updates_summary"/>
 
         <CheckBoxPreference
+            android:key="show_hw_overdraw"
+            android:title="@string/show_hw_overdraw"
+            android:summary="@string/show_hw_overdraw_summary"/>
+
+        <CheckBoxPreference
             android:key="show_screen_updates"
             android:title="@string/show_screen_updates"
             android:summary="@string/show_screen_updates_summary"/>
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index f590ea6..159dd09 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -93,6 +93,7 @@
     private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
     private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_udpates";
     private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_udpates";
+    private static final String SHOW_HW_OVERDRAW_KEY = "show_hw_overdraw";
     private static final String DEBUG_LAYOUT_KEY = "debug_layout";
     private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
     private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
@@ -143,6 +144,7 @@
     private CheckBoxPreference mTrackFrameTime;
     private CheckBoxPreference mShowHwScreenUpdates;
     private CheckBoxPreference mShowHwLayersUpdates;
+    private CheckBoxPreference mShowHwOverdraw;
     private CheckBoxPreference mDebugLayout;
     private CheckBoxPreference mDisplayMangificationAutoUpdate;
     private ListPreference mWindowAnimationScale;
@@ -199,6 +201,7 @@
         mTrackFrameTime = findAndInitCheckboxPref(TRACK_FRAME_TIME_KEY);
         mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY);
         mShowHwLayersUpdates = findAndInitCheckboxPref(SHOW_HW_LAYERS_UPDATES_KEY);
+        mShowHwOverdraw = findAndInitCheckboxPref(SHOW_HW_OVERDRAW_KEY);
         mDebugLayout = findAndInitCheckboxPref(DEBUG_LAYOUT_KEY);
         mWindowAnimationScale = (ListPreference) findPreference(WINDOW_ANIMATION_SCALE_KEY);
         mAllPrefs.add(mWindowAnimationScale);
@@ -369,6 +372,7 @@
         updateTrackFrameTimeOptions();
         updateShowHwScreenUpdatesOptions();
         updateShowHwLayersUpdatesOptions();
+        updateShowHwOverdrawOptions();
         updateDebugLayoutOptions();
         updateAnimationScaleOptions();
         updateOverlayDisplayDevicesOptions();
@@ -619,6 +623,17 @@
         pokeSystemProperties();
     }
 
+    private void updateShowHwOverdrawOptions() {
+        updateCheckBox(mShowHwOverdraw, SystemProperties.getBoolean(
+                HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY, false));
+    }
+
+    private void writeShowHwOverdrawOptions() {
+        SystemProperties.set(HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY,
+                mShowHwOverdraw.isChecked() ? "true" : null);
+        pokeSystemProperties();
+    }
+
     private void updateDebugLayoutOptions() {
         updateCheckBox(mDebugLayout,
                 SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
@@ -926,6 +941,8 @@
             writeShowHwScreenUpdatesOptions();
         } else if (preference == mShowHwLayersUpdates) {
             writeShowHwLayersUpdatesOptions();
+        } else if (preference == mShowHwOverdraw) {
+            writeShowHwOverdrawOptions();
         } else if (preference == mDebugLayout) {
             writeDebugLayoutOptions();
         } else if (preference == mDisplayMangificationAutoUpdate) {