am 5b8efc47: Merge "Add overdraw debugging that accounts for Deuteranomaly" into klp-dev

* commit '5b8efc47e95f8b6252f6d879b682c33eceb12500':
  Add overdraw debugging that accounts for Deuteranomaly
This commit is contained in:
Romain Guy
2013-08-21 12:00:08 -07:00
committed by Android Git Automerger
4 changed files with 52 additions and 9 deletions

View File

@ -166,11 +166,16 @@ bool Caches::initProperties() {
debugLayersUpdates = false; debugLayersUpdates = false;
} }
debugOverdraw = false;
if (property_get(PROPERTY_DEBUG_OVERDRAW, property, NULL) > 0) { if (property_get(PROPERTY_DEBUG_OVERDRAW, property, NULL) > 0) {
INIT_LOGD(" Overdraw debug enabled: %s", property); INIT_LOGD(" Overdraw debug enabled: %s", property);
debugOverdraw = !strcmp(property, "show"); if (!strcmp(property, "show")) {
} else { debugOverdraw = true;
debugOverdraw = false; mOverdrawDebugColorSet = kColorSet_Default;
} else if (!strcmp(property, "show_deuteranomaly")) {
debugOverdraw = true;
mOverdrawDebugColorSet = kColorSet_Deuteranomaly;
}
} }
// See Properties.h for valid values // See Properties.h for valid values
@ -235,6 +240,16 @@ void Caches::terminate() {
// Debug // 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() { void Caches::dumpMemoryUsage() {
String8 stringLog; String8 stringLog;
dumpMemoryUsage(stringLog); dumpMemoryUsage(stringLog);

View File

@ -149,6 +149,12 @@ public:
return mDebugLevel; return mDebugLevel;
} }
/**
* 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 * Call this on each frame to ensure that garbage is deleted from
* GPU memory. * GPU memory.
@ -348,6 +354,11 @@ public:
PFNGLGETOBJECTLABELEXTPROC getLabel; PFNGLGETOBJECTLABELEXTPROC getLabel;
private: private:
enum OverdrawColorSet {
kColorSet_Default = 0,
kColorSet_Deuteranomaly
};
void initFont(); void initFont();
void initExtensions(); void initExtensions();
void initConstraints(); void initConstraints();
@ -400,6 +411,8 @@ private:
uint32_t mFunctorsCount; uint32_t mFunctorsCount;
GLuint mBoundTextures[REQUIRED_TEXTURE_UNITS_COUNT]; GLuint mBoundTextures[REQUIRED_TEXTURE_UNITS_COUNT];
OverdrawColorSet mOverdrawDebugColorSet;
}; // class Caches }; // class Caches
}; // namespace uirenderer }; // namespace uirenderer

View File

@ -530,14 +530,22 @@ void OpenGLRenderer::renderOverdraw() {
mCaches.setScissor(clip->left, mFirstSnapshot->height - clip->bottom, mCaches.setScissor(clip->left, mFirstSnapshot->height - clip->bottom,
clip->right - clip->left, clip->bottom - clip->top); clip->right - clip->left, clip->bottom - clip->top);
// 1x overdraw
mCaches.stencil.enableDebugTest(2); mCaches.stencil.enableDebugTest(2);
drawColor(0x2f0000ff, SkXfermode::kSrcOver_Mode); drawColor(mCaches.getOverdrawColor(1), SkXfermode::kSrcOver_Mode);
// 2x overdraw
mCaches.stencil.enableDebugTest(3); mCaches.stencil.enableDebugTest(3);
drawColor(0x2f00ff00, SkXfermode::kSrcOver_Mode); drawColor(mCaches.getOverdrawColor(2), SkXfermode::kSrcOver_Mode);
// 3x overdraw
mCaches.stencil.enableDebugTest(4); 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); mCaches.stencil.enableDebugTest(4, true);
drawColor(0x7fff0000, SkXfermode::kSrcOver_Mode); drawColor(mCaches.getOverdrawColor(4), SkXfermode::kSrcOver_Mode);
mCaches.stencil.disable(); mCaches.stencil.disable();
} }
} }

View File

@ -70,8 +70,15 @@ enum DebugLevel {
#define PROPERTY_DEBUG_LAYERS_UPDATES "debug.hwui.show_layers_updates" #define PROPERTY_DEBUG_LAYERS_UPDATES "debug.hwui.show_layers_updates"
/** /**
* Used to enable/disable overdraw debugging. The accepted values are * Used to enable/disable overdraw debugging.
* "show", "count" and "false". The default value is "false". *
* 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" #define PROPERTY_DEBUG_OVERDRAW "debug.hwui.overdraw"