[RoundedCorner] Use the correct source bounds and crop.

Previously we call getBounds to calculate the rounded corner, but that's wrong.
For an app layer, what we really need is the source bounds of the layer, and
the actual crop with transformation but without any parent bounds and display
bounds. However, only the root view has the correct crop information. And thus
this patch passes the correct bounds up to the root, and use the crop from the
root to calculate the rounded corner bounds.

BUG: 125916918
Test: Build, flash and boot. Verify with window transition.
Change-Id: I6c1b92a2c684da956b284b190e8b8a1b45494140
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 16e69b9..a1150a7 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -1768,9 +1768,13 @@
 }
 
 Layer::RoundedCornerState Layer::getRoundedCornerState() const {
+    return getRoundedCornerStateInternal(mSourceBounds);
+}
+
+Layer::RoundedCornerState Layer::getRoundedCornerStateInternal(const FloatRect bounds) const {
     const auto& p = mDrawingParent.promote();
     if (p != nullptr) {
-        RoundedCornerState parentState = p->getRoundedCornerState();
+        RoundedCornerState parentState = p->getRoundedCornerStateInternal(bounds);
         if (parentState.radius > 0) {
             ui::Transform t = getActiveTransform(getDrawingState());
             t = t.inverse();
@@ -1784,7 +1788,9 @@
         }
     }
     const float radius = getDrawingState().cornerRadius;
-    return radius > 0 ? RoundedCornerState(getBounds(), radius) : RoundedCornerState();
+    return radius > 0
+            ? RoundedCornerState(bounds.intersect(getCrop(getDrawingState()).toFloatRect()), radius)
+            : RoundedCornerState();
 }
 
 void Layer::commitChildList() {