diff options
author | Romain Guy <romainguy@google.com> | 2013-08-21 11:53:18 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2013-08-21 11:53:18 -0700 |
commit | 627c6fd91377ead85f74a365438e25610ef1e2ee (patch) | |
tree | 3fad6c0a8a6fb3e4c88702b6a407a0fdd75be065 /libs/hwui | |
parent | 906da6bfe4092fda1daff63e00e9f2ce1daac00b (diff) | |
download | frameworks_base-627c6fd91377ead85f74a365438e25610ef1e2ee.zip frameworks_base-627c6fd91377ead85f74a365438e25610ef1e2ee.tar.gz frameworks_base-627c6fd91377ead85f74a365438e25610ef1e2ee.tar.bz2 |
Add overdraw debugging that accounts for Deuteranomaly
Change-Id: I31f68a07aa7cf0490d2572e24e4c5ac2066a1151
Diffstat (limited to 'libs/hwui')
-rw-r--r-- | libs/hwui/Caches.cpp | 21 | ||||
-rw-r--r-- | libs/hwui/Caches.h | 13 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 16 | ||||
-rw-r--r-- | libs/hwui/Properties.h | 11 |
4 files changed, 52 insertions, 9 deletions
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp index c0b3bfc..f8d3589 100644 --- a/libs/hwui/Caches.cpp +++ b/libs/hwui/Caches.cpp @@ -166,11 +166,16 @@ bool Caches::initProperties() { debugLayersUpdates = false; } + debugOverdraw = false; if (property_get(PROPERTY_DEBUG_OVERDRAW, property, NULL) > 0) { INIT_LOGD(" Overdraw debug enabled: %s", property); - debugOverdraw = !strcmp(property, "show"); - } else { - debugOverdraw = false; + if (!strcmp(property, "show")) { + debugOverdraw = true; + mOverdrawDebugColorSet = kColorSet_Default; + } else if (!strcmp(property, "show_deuteranomaly")) { + debugOverdraw = true; + mOverdrawDebugColorSet = kColorSet_Deuteranomaly; + } } // See Properties.h for valid values @@ -235,6 +240,16 @@ void Caches::terminate() { // Debug /////////////////////////////////////////////////////////////////////////////// +uint32_t Caches::getOverdrawColor(uint32_t amount) const { + static uint32_t sOverdrawColors[2][4] = { + { 0x2f0000ff, 0x2f00ff00, 0x3fff0000, 0x7fff0000 }, + { 0x2f0000ff, 0x4fffff00, 0x5fff8ad8, 0x7fff0000 } + }; + if (amount < 1) amount = 1; + if (amount > 4) amount = 4; + return sOverdrawColors[mOverdrawDebugColorSet][amount - 1]; +} + void Caches::dumpMemoryUsage() { String8 stringLog; dumpMemoryUsage(stringLog); diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h index f8b1e17..282aee9 100644 --- a/libs/hwui/Caches.h +++ b/libs/hwui/Caches.h @@ -150,6 +150,12 @@ public: } /** + * Returns a non-premultiplied ARGB color for the specified + * amount of overdraw (1 for 1x, 2 for 2x, etc.) + */ + uint32_t getOverdrawColor(uint32_t amount) const; + + /** * Call this on each frame to ensure that garbage is deleted from * GPU memory. */ @@ -348,6 +354,11 @@ public: PFNGLGETOBJECTLABELEXTPROC getLabel; private: + enum OverdrawColorSet { + kColorSet_Default = 0, + kColorSet_Deuteranomaly + }; + void initFont(); void initExtensions(); void initConstraints(); @@ -400,6 +411,8 @@ private: uint32_t mFunctorsCount; GLuint mBoundTextures[REQUIRED_TEXTURE_UNITS_COUNT]; + + OverdrawColorSet mOverdrawDebugColorSet; }; // class Caches }; // namespace uirenderer diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 707f662..f2352bb 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -530,14 +530,22 @@ void OpenGLRenderer::renderOverdraw() { mCaches.setScissor(clip->left, mFirstSnapshot->height - clip->bottom, clip->right - clip->left, clip->bottom - clip->top); + // 1x overdraw mCaches.stencil.enableDebugTest(2); - drawColor(0x2f0000ff, SkXfermode::kSrcOver_Mode); + drawColor(mCaches.getOverdrawColor(1), SkXfermode::kSrcOver_Mode); + + // 2x overdraw mCaches.stencil.enableDebugTest(3); - drawColor(0x2f00ff00, SkXfermode::kSrcOver_Mode); + drawColor(mCaches.getOverdrawColor(2), SkXfermode::kSrcOver_Mode); + + // 3x overdraw mCaches.stencil.enableDebugTest(4); - drawColor(0x3fff0000, SkXfermode::kSrcOver_Mode); + drawColor(mCaches.getOverdrawColor(3), SkXfermode::kSrcOver_Mode); + + // 4x overdraw and higher mCaches.stencil.enableDebugTest(4, true); - drawColor(0x7fff0000, SkXfermode::kSrcOver_Mode); + drawColor(mCaches.getOverdrawColor(4), SkXfermode::kSrcOver_Mode); + mCaches.stencil.disable(); } } diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h index 86b0aa2..20b8f2f 100644 --- a/libs/hwui/Properties.h +++ b/libs/hwui/Properties.h @@ -70,8 +70,15 @@ enum DebugLevel { #define PROPERTY_DEBUG_LAYERS_UPDATES "debug.hwui.show_layers_updates" /** - * Used to enable/disable overdraw debugging. The accepted values are - * "show", "count" and "false". The default value is "false". + * Used to enable/disable overdraw debugging. + * + * The accepted values are + * "show", to show overdraw + * "show_deuteranomaly", to show overdraw if you suffer from Deuteranomaly + * "count", to show an overdraw counter + * "false", to disable overdraw debugging + * + * The default value is "false". */ #define PROPERTY_DEBUG_OVERDRAW "debug.hwui.overdraw" |