The invalidating the layout by using requestLayout() method both the layout and min/pref caches are invalidated. In case the cache is validated before the actual layout pass (e.g. by calling prefWidth(-1)), the cache is not invalidated again and subsequent changes (before the layout pass) are not included in the cached value. Currently, this works only due to bug RT-30363 and 2 layout passes, because it clears the caches on the first pass, fixing the layout on the second pass.
I propose to add method like invalidateSizeHints to Parent that would handle the invalidation of the caches independently.