Remove Path based outline clipping

Change-Id: Ic5ccd98a7517b46e768e53d6b0c8fdcda305fb2c
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
index 9902ff1..fba482d 100644
--- a/libs/hwui/RenderNode.cpp
+++ b/libs/hwui/RenderNode.cpp
@@ -238,9 +238,8 @@
     }
 
     if (CC_UNLIKELY(properties().hasClippingPath())) {
-        // TODO: optimize for round rect/circle clipping
-        const SkPath* path = properties().getClippingPath();
-        ClipPathOp* op = new (handler.allocator()) ClipPathOp(path, SkRegion::kIntersect_Op);
+        ClipPathOp* op = new (handler.allocator()) ClipPathOp(
+                properties().getClippingPath(), properties().getClippingPathOp());
         handler(op, PROPERTY_SAVECOUNT, properties().getClipToBounds());
     }
 }
diff --git a/libs/hwui/RenderProperties.cpp b/libs/hwui/RenderProperties.cpp
index 99de1fc..5f7d4e3 100644
--- a/libs/hwui/RenderProperties.cpp
+++ b/libs/hwui/RenderProperties.cpp
@@ -50,14 +50,11 @@
 }
 
 RenderProperties::ComputedFields::ComputedFields()
-        : mTransformMatrix(NULL)
-        , mClipPath(NULL)
-        , mClipPathOp(SkRegion::kIntersect_Op) {
+        : mTransformMatrix(NULL) {
 }
 
 RenderProperties::ComputedFields::~ComputedFields() {
     delete mTransformMatrix;
-    delete mClipPath;
 }
 
 RenderProperties::RenderProperties()
@@ -77,9 +74,6 @@
         setAnimationMatrix(other.getAnimationMatrix());
         setCameraDistance(other.getCameraDistance());
 
-        // Update the computed clip path
-        updateClipPath();
-
         // Force recalculation of the matrix, since other's dirty bit may be clear
         mPrimitiveFields.mMatrixOrPivotDirty = true;
         updateMatrix();
@@ -166,39 +160,5 @@
     }
 }
 
-void RenderProperties::updateClipPath() {
-    const SkPath* outlineClipPath = mPrimitiveFields.mOutline.willClip()
-            ? mPrimitiveFields.mOutline.getPath() : NULL;
-    const SkPath* revealClipPath = mPrimitiveFields.mRevealClip.getPath();
-
-    if (!outlineClipPath && !revealClipPath) {
-        // mComputedFields.mClipPath doesn't need to be updated, since it won't be used
-        return;
-    }
-
-    if (mComputedFields.mClipPath == NULL) {
-        mComputedFields.mClipPath = new SkPath();
-    }
-    SkPath* clipPath = mComputedFields.mClipPath;
-    mComputedFields.mClipPathOp = SkRegion::kIntersect_Op;
-
-    if (outlineClipPath && revealClipPath) {
-        SkPathOp op = kIntersect_PathOp;
-        if (mPrimitiveFields.mRevealClip.isInverseClip()) {
-            op = kDifference_PathOp; // apply difference step in the Op below, instead of draw time
-        }
-
-        Op(*outlineClipPath, *revealClipPath, op, clipPath);
-    } else if (outlineClipPath) {
-        *clipPath = *outlineClipPath;
-    } else {
-        *clipPath = *revealClipPath;
-        if (mPrimitiveFields.mRevealClip.isInverseClip()) {
-            // apply difference step at draw time
-            mComputedFields.mClipPathOp = SkRegion::kDifference_Op;
-        }
-    }
-}
-
 } /* namespace uirenderer */
 } /* namespace android */
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h
index 6fc8bce..c0e3ce7 100644
--- a/libs/hwui/RenderProperties.h
+++ b/libs/hwui/RenderProperties.h
@@ -437,19 +437,17 @@
 
     ANDROID_API void updateMatrix();
 
-    ANDROID_API void updateClipPath();
-
-    // signals that mComputedFields.mClipPath is up to date, and should be used for clipping
     bool hasClippingPath() const {
-        return mPrimitiveFields.mOutline.willClip() || mPrimitiveFields.mRevealClip.willClip();
+        return mPrimitiveFields.mRevealClip.willClip();
     }
 
     const SkPath* getClippingPath() const {
-        return hasClippingPath() ? mComputedFields.mClipPath : NULL;
+        return mPrimitiveFields.mRevealClip.getPath();
     }
 
     SkRegion::Op getClippingPathOp() const {
-        return mComputedFields.mClipPathOp;
+        return mPrimitiveFields.mRevealClip.isInverseClip()
+                ? SkRegion::kDifference_Op : SkRegion::kIntersect_Op;
     }
 
     Outline& mutableOutline() {
@@ -505,8 +503,6 @@
         SkMatrix* mTransformMatrix;
 
         Sk3DView mTransformCamera;
-        SkPath* mClipPath; // TODO: remove this, create new ops for efficient/special case clipping
-        SkRegion::Op mClipPathOp;
     } mComputedFields;
 };