public void measure(int widthSpec, int heightSpec) {
    if (widthSpec == mLastWidthSpec
        && heightSpec == mLastHeightSpec
        && (mViewFlags & FLAG_LAYOUT_REQUESTED) == 0) {
      return;
    }

    mLastWidthSpec = widthSpec;
    mLastHeightSpec = heightSpec;

    mViewFlags &= ~FLAG_SET_MEASURED_SIZE;
    onMeasure(widthSpec, heightSpec);
    if ((mViewFlags & FLAG_SET_MEASURED_SIZE) == 0) {
      throw new IllegalStateException(
          getClass().getName() + " should call setMeasuredSize() in onMeasure()");
    }
  }