diff --git a/gfx/layers/basic/BasicLayerManager.cpp b/gfx/layers/basic/BasicLayerManager.cpp index 3d6f28050bc3..2388af5a8116 100644 --- a/gfx/layers/basic/BasicLayerManager.cpp +++ b/gfx/layers/basic/BasicLayerManager.cpp @@ -21,6 +21,7 @@ #include "BasicLayersImpl.h" #include "BasicThebesLayer.h" #include "BasicContainerLayer.h" +#include "mozilla/Preferences.h" using namespace mozilla::gfx; @@ -434,6 +435,9 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, } PaintLayer(mTarget, mRoot, aCallback, aCallbackData, nsnull); + if (mWidget) { + FlashWidgetUpdateArea(mTarget); + } if (!mTransactionIncomplete) { // Clear out target if we have a complete transaction. @@ -466,6 +470,27 @@ BasicLayerManager::EndTransactionInternal(DrawThebesLayerCallback aCallback, return !mTransactionIncomplete; } +void +BasicLayerManager::FlashWidgetUpdateArea(gfxContext *aContext) +{ + static bool sWidgetFlashingEnabled; + static bool sWidgetFlashingPrefCached = false; + + if (!sWidgetFlashingPrefCached) { + sWidgetFlashingPrefCached = true; + mozilla::Preferences::AddBoolVarCache(&sWidgetFlashingEnabled, + "nglayout.debug.widget_update_flashing"); + } + + if (sWidgetFlashingEnabled) { + float r = float(rand()) / RAND_MAX; + float g = float(rand()) / RAND_MAX; + float b = float(rand()) / RAND_MAX; + aContext->SetColor(gfxRGBA(r, g, b, 0.2)); + aContext->Paint(); + } +} + bool BasicLayerManager::EndEmptyTransaction() { diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index b8d4e0b38777..ed64021b3678 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -172,6 +172,8 @@ protected: void* aCallbackData, EndTransactionFlags aFlags = END_DEFAULT); + void FlashWidgetUpdateArea(gfxContext* aContext); + // Widget whose surface should be used as the basis for ThebesLayer // buffers. nsIWidget* mWidget; diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js index b8dc82e27100..5dc1f23bbd0a 100644 --- a/modules/libpref/src/init/all.js +++ b/modules/libpref/src/init/all.js @@ -353,6 +353,10 @@ pref("nglayout.enable_drag_images", true); // enable/disable paint flashing --- useful for debugging pref("nglayout.debug.paint_flashing", false); +// enable/disable widget update area flashing --- only supported with +// BasicLayers (other layer managers always update the entire widget area) +pref("nglayout.debug.widget_update_flashing", false); + // scrollbar snapping region // 0 - off // 1 and higher - slider thickness multiple