Program: 2686
Project: 2686
Buggy source:
private void performLayout(WindowManager.LayoutParams lp,int desiredWindowWidth,int desiredWindowHeight){
  mLayoutRequested=false;
  mScrollMayChange=true;
  mInLayout=true;
  final View host=mView;
  if (DEBUG_ORIENTATION || DEBUG_LAYOUT) {
    Log.v(TAG,"String_Node_Str" + host + "String_Node_Str"+ host.getMeasuredWidth()+ "String_Node_Str"+ host.getMeasuredHeight()+ "String_Node_Str");
  }
  Trace.traceBegin(Trace.TRACE_TAG_VIEW,"String_Node_Str");
  try {
    host.layout(0,0,host.getMeasuredWidth(),host.getMeasuredHeight());
    mInLayout=false;
    int numViewsRequestingLayout=mLayoutRequesters.size();
    if (numViewsRequestingLayout > 0) {
      ArrayList<View> mValidLayoutRequesters=null;
      for (int i=0; i < numViewsRequestingLayout; ++i) {
        View view=mLayoutRequesters.get(i);
        if ((view.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) == View.PFLAG_FORCE_LAYOUT) {
          while (view != null && view.mAttachInfo != null && view.mParent != null && (view.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) != 0) {
            if ((view.mViewFlags & View.VISIBILITY_MASK) != View.GONE) {
              Log.w(TAG,"String_Node_Str" + "String_Node_Str" + view);
              if (mValidLayoutRequesters == null) {
                mValidLayoutRequesters=new ArrayList<View>();
              }
              mValidLayoutRequesters.add(view);
              break;
            }
            if (view.mParent instanceof View) {
              view=(View)view.mParent;
            }
 else {
              view=null;
            }
          }
        }
      }
      if (mValidLayoutRequesters != null) {
        for (int i=0; i < numViewsRequestingLayout; ++i) {
          View view=mLayoutRequesters.get(i);
          while (view != null && (view.mPrivateFlags & View.PFLAG_FORCE_LAYOUT) != 0) {
            view.mPrivateFlags&=~View.PFLAG_FORCE_LAYOUT;
            if (view.mParent instanceof View) {
              view=(View)view.mParent;
            }
 else {
              view=null;
            }
          }
        }
        mHandlingLayoutInLayoutRequest=true;
        int numValidRequests=mValidLayoutRequesters.size();
        for (int i=0; i < numValidRequests; ++i) {
          mValidLayoutRequesters.get(i).requestLayout();
        }
        measureHierarchy(host,lp,mView.getContext().getResources(),desiredWindowWidth,desiredWindowHeight);
        mInLayout=true;
        host.layout(0,0,host.getMeasuredWidth(),host.getMeasuredHeight());
        mHandlingLayoutInLayoutRequest=false;
      }
      mLayoutRequesters.clear();
    }
  }
  finally {
    Trace.traceEnd(Trace.TRACE_TAG_VIEW);
  }
  mInLayout=false;
}

Fixed version (ground truth):
private void performLayout(WindowManager.LayoutParams lp,int desiredWindowWidth,int desiredWindowHeight){
  mLayoutRequested=false;
  mScrollMayChange=true;
  mInLayout=true;
  final View host=mView;
  if (DEBUG_ORIENTATION || DEBUG_LAYOUT) {
    Log.v(TAG,"String_Node_Str" + host + "String_Node_Str"+ host.getMeasuredWidth()+ "String_Node_Str"+ host.getMeasuredHeight()+ "String_Node_Str");
  }
  Trace.traceBegin(Trace.TRACE_TAG_VIEW,"String_Node_Str");
  try {
    host.layout(0,0,host.getMeasuredWidth(),host.getMeasuredHeight());
    mInLayout=false;
    int numViewsRequestingLayout=mLayoutRequesters.size();
    if (numViewsRequestingLayout > 0) {
      ArrayList<View> validLayoutRequesters=getValidLayoutRequesters(mLayoutRequesters,false);
      if (validLayoutRequesters != null) {
        mHandlingLayoutInLayoutRequest=true;
        int numValidRequests=validLayoutRequesters.size();
        for (int i=0; i < numValidRequests; ++i) {
          final View view=validLayoutRequesters.get(i);
          Log.w("String_Node_Str","String_Node_Str" + view + "String_Node_Str");
          view.requestLayout();
        }
        measureHierarchy(host,lp,mView.getContext().getResources(),desiredWindowWidth,desiredWindowHeight);
        mInLayout=true;
        host.layout(0,0,host.getMeasuredWidth(),host.getMeasuredHeight());
        mHandlingLayoutInLayoutRequest=false;
        validLayoutRequesters=getValidLayoutRequesters(mLayoutRequesters,true);
        if (validLayoutRequesters != null) {
          final ArrayList<View> finalRequesters=validLayoutRequesters;
          getRunQueue().post(new Runnable(){
            @Override public void run(){
              int numValidRequests=finalRequesters.size();
              for (int i=0; i < numValidRequests; ++i) {
                final View view=finalRequesters.get(i);
                Log.w("String_Node_Str","String_Node_Str" + view + "String_Node_Str");
                view.requestLayout();
              }
            }
          }
);
        }
      }
    }
  }
  finally {
    Trace.traceEnd(Trace.TRACE_TAG_VIEW);
  }
  mInLayout=false;
}