fix Layer croping in SurfaceFlinger

Bug: 7224628
Change-Id: I9421f0a06b9a27fe00eefaa1dfab8c4309c380c9
diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp
index 5ae0ee0..d75dddd 100644
--- a/services/surfaceflinger/LayerBase.cpp
+++ b/services/surfaceflinger/LayerBase.cpp
@@ -232,10 +232,9 @@
     const Layer::State& s(drawingState());
     const Transform tr(hw->getTransform() * s.transform);
     const uint32_t hw_h = hw->getHeight();
-    const Rect& crop(s.active.crop);
     Rect win(s.active.w, s.active.h);
-    if (!crop.isEmpty()) {
-        win.intersect(crop, &win);
+    if (!s.active.crop.isEmpty()) {
+        win.intersect(s.active.crop, &win);
     }
     if (mesh) {
         tr.transform(mesh->mVertices[0], win.left,  win.top);
@@ -250,10 +249,9 @@
 
 Rect LayerBase::computeBounds() const {
     const Layer::State& s(drawingState());
-    const Rect& crop(s.active.crop);
     Rect win(s.active.w, s.active.h);
-    if (!crop.isEmpty()) {
-        win.intersect(crop, &win);
+    if (!s.active.crop.isEmpty()) {
+        win.intersect(s.active.crop, &win);
     }
     return s.transform.transform(win);
 }
@@ -400,14 +398,15 @@
         GLfloat v;
     };
 
-    Rect crop(s.active.w, s.active.h);
+    Rect win(s.active.w, s.active.h);
     if (!s.active.crop.isEmpty()) {
-        crop = s.active.crop;
+        win.intersect(s.active.crop, &win);
     }
-    GLfloat left   = GLfloat(crop.left)   / GLfloat(s.active.w);
-    GLfloat top    = GLfloat(crop.top)    / GLfloat(s.active.h);
-    GLfloat right  = GLfloat(crop.right)  / GLfloat(s.active.w);
-    GLfloat bottom = GLfloat(crop.bottom) / GLfloat(s.active.h);
+
+    GLfloat left   = GLfloat(win.left)   / GLfloat(s.active.w);
+    GLfloat top    = GLfloat(win.top)    / GLfloat(s.active.h);
+    GLfloat right  = GLfloat(win.right)  / GLfloat(s.active.w);
+    GLfloat bottom = GLfloat(win.bottom) / GLfloat(s.active.h);
 
     TexCoords texCoords[4];
     texCoords[0].u = left;