@@ -109,8 +109,12 @@ public abstract class HardwareRenderer {
109109
110110 /**
111111 * Turn on to draw dirty regions every other frame.
112+ *
113+ * Possible values:
114+ * "true", to enable dirty regions debugging
115+ * "false", to disable dirty regions debugging
112116 */
113- private static final boolean DEBUG_DIRTY_REGION = false ;
117+ static final String DEBUG_DIRTY_REGIONS_PROPERTY = "hwui.debug_dirty_regions" ;
114118
115119 /**
116120 * A process can set this flag to false to prevent the use of hardware
@@ -491,6 +495,8 @@ static abstract class GlRenderer extends HardwareRenderer {
491495 final boolean mProfileEnabled ;
492496 final float [] mProfileData ;
493497 int mProfileCurrentFrame = -PROFILE_FRAME_DATA_COUNT ;
498+
499+ final boolean mDebugDirtyRegions ;
494500
495501 final int mGlVersion ;
496502 final boolean mTranslucent ;
@@ -502,17 +508,19 @@ static abstract class GlRenderer extends HardwareRenderer {
502508 GlRenderer (int glVersion , boolean translucent ) {
503509 mGlVersion = glVersion ;
504510 mTranslucent = translucent ;
511+
512+ String property ;
505513
506- final String vsyncProperty = SystemProperties .get (DISABLE_VSYNC_PROPERTY , "false" );
507- mVsyncDisabled = "true" .equalsIgnoreCase (vsyncProperty );
514+ property = SystemProperties .get (DISABLE_VSYNC_PROPERTY , "false" );
515+ mVsyncDisabled = "true" .equalsIgnoreCase (property );
508516 if (mVsyncDisabled ) {
509517 Log .d (LOG_TAG , "Disabling v-sync" );
510518 }
511519
512520 //noinspection PointlessBooleanExpression,ConstantConditions
513521 if (!ViewDebug .DEBUG_LATENCY ) {
514- final String profileProperty = SystemProperties .get (PROFILE_PROPERTY , "false" );
515- mProfileEnabled = "true" .equalsIgnoreCase (profileProperty );
522+ property = SystemProperties .get (PROFILE_PROPERTY , "false" );
523+ mProfileEnabled = "true" .equalsIgnoreCase (property );
516524 if (mProfileEnabled ) {
517525 Log .d (LOG_TAG , "Profiling hardware renderer" );
518526 }
@@ -525,6 +533,12 @@ static abstract class GlRenderer extends HardwareRenderer {
525533 } else {
526534 mProfileData = null ;
527535 }
536+
537+ property = SystemProperties .get (DEBUG_DIRTY_REGIONS_PROPERTY , "false" );
538+ mDebugDirtyRegions = "true" .equalsIgnoreCase (property );
539+ if (mDebugDirtyRegions ) {
540+ Log .d (LOG_TAG , "Debugging dirty regions" );
541+ }
528542 }
529543
530544 @ Override
@@ -981,8 +995,12 @@ boolean draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callba
981995 // Shouldn't reach here
982996 view .draw (canvas );
983997 }
998+ } finally {
999+ callbacks .onHardwarePostDraw (canvas );
1000+ canvas .restoreToCount (saveCount );
1001+ view .mRecreateDisplayList = false ;
9841002
985- if (DEBUG_DIRTY_REGION ) {
1003+ if (mDebugDirtyRegions ) {
9861004 if (mDebugPaint == null ) {
9871005 mDebugPaint = new Paint ();
9881006 mDebugPaint .setColor (0x7fff0000 );
@@ -991,10 +1009,6 @@ boolean draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callba
9911009 canvas .drawRect (dirty , mDebugPaint );
9921010 }
9931011 }
994- } finally {
995- callbacks .onHardwarePostDraw (canvas );
996- canvas .restoreToCount (saveCount );
997- view .mRecreateDisplayList = false ;
9981012 }
9991013
10001014 onPostDraw ();
0 commit comments