summaryrefslogtreecommitdiffstats
path: root/libs/hwui/tests
diff options
context:
space:
mode:
authorRob Tsuk <robtsuk@google.com>2015-01-15 18:21:33 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-01-15 18:21:35 +0000
commitf28f5cec5644ed175c8ad7a59b5d20b33ee89bc8 (patch)
tree131a045645ffd3596cfe47583b804a8fb3165629 /libs/hwui/tests
parent45a669e5e9aba0feeca4f768a09299a2f88a2d3f (diff)
parent487a92caef2eb90a62e8f8d7a6fe6315f1c1d8d8 (diff)
downloadframeworks_base-f28f5cec5644ed175c8ad7a59b5d20b33ee89bc8.zip
frameworks_base-f28f5cec5644ed175c8ad7a59b5d20b33ee89bc8.tar.gz
frameworks_base-f28f5cec5644ed175c8ad7a59b5d20b33ee89bc8.tar.bz2
Merge "Clipping performance improvements"
Diffstat (limited to 'libs/hwui/tests')
-rw-r--r--libs/hwui/tests/Android.mk13
-rw-r--r--libs/hwui/tests/ClipAreaTests.cpp116
2 files changed, 129 insertions, 0 deletions
diff --git a/libs/hwui/tests/Android.mk b/libs/hwui/tests/Android.mk
index 2fff07d..a69f3fb 100644
--- a/libs/hwui/tests/Android.mk
+++ b/libs/hwui/tests/Android.mk
@@ -32,3 +32,16 @@ LOCAL_SRC_FILES += \
tests/main.cpp
include $(BUILD_EXECUTABLE)
+
+include $(CLEAR_VARS)
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.common.mk
+LOCAL_MODULE := hwui_unit_tests
+LOCAL_MODULE_TAGS := tests
+
+include $(LOCAL_PATH)/Android.common.mk
+
+LOCAL_SRC_FILES += \
+ tests/ClipAreaTests.cpp \
+
+include $(BUILD_NATIVE_TEST)
diff --git a/libs/hwui/tests/ClipAreaTests.cpp b/libs/hwui/tests/ClipAreaTests.cpp
new file mode 100644
index 0000000..166d5b6
--- /dev/null
+++ b/libs/hwui/tests/ClipAreaTests.cpp
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+#include <SkPath.h>
+#include <SkRegion.h>
+
+#include "ClipArea.h"
+
+#include "Matrix.h"
+#include "Rect.h"
+#include "utils/LinearAllocator.h"
+
+namespace android {
+namespace uirenderer {
+
+static Rect kViewportBounds(0, 0, 2048, 2048);
+
+static ClipArea createClipArea() {
+ ClipArea area;
+ area.setViewportDimensions(kViewportBounds.getWidth(), kViewportBounds.getHeight());
+ return area;
+}
+
+TEST(TransformedRectangle, basics) {
+ Rect r(0, 0, 100, 100);
+ Matrix4 minus90;
+ minus90.loadRotate(-90);
+ minus90.mapRect(r);
+ Rect r2(20, 40, 120, 60);
+
+ Matrix4 m90;
+ m90.loadRotate(90);
+ TransformedRectangle tr(r, m90);
+ EXPECT_TRUE(tr.canSimplyIntersectWith(tr));
+
+ Matrix4 m0;
+ TransformedRectangle tr0(r2, m0);
+ EXPECT_FALSE(tr.canSimplyIntersectWith(tr0));
+
+ Matrix4 m45;
+ m45.loadRotate(45);
+ TransformedRectangle tr2(r, m45);
+ EXPECT_FALSE(tr2.canSimplyIntersectWith(tr));
+}
+
+TEST(RectangleList, basics) {
+ RectangleList list;
+ EXPECT_TRUE(list.isEmpty());
+
+ Rect r(0, 0, 100, 100);
+ Matrix4 m45;
+ m45.loadRotate(45);
+ list.set(r, m45);
+ EXPECT_FALSE(list.isEmpty());
+
+ Rect r2(20, 20, 200, 200);
+ list.intersectWith(r2, m45);
+ EXPECT_FALSE(list.isEmpty());
+ EXPECT_EQ(1, list.getTransformedRectanglesCount());
+
+ Rect r3(20, 20, 200, 200);
+ Matrix4 m30;
+ m30.loadRotate(30);
+ list.intersectWith(r2, m30);
+ EXPECT_FALSE(list.isEmpty());
+ EXPECT_EQ(2, list.getTransformedRectanglesCount());
+
+ SkRegion clip;
+ clip.setRect(0, 0, 2000, 2000);
+ SkRegion rgn(list.convertToRegion(clip));
+ EXPECT_FALSE(rgn.isEmpty());
+}
+
+TEST(ClipArea, basics) {
+ ClipArea area(createClipArea());
+ EXPECT_FALSE(area.isEmpty());
+}
+
+TEST(ClipArea, paths) {
+ ClipArea area(createClipArea());
+ Matrix4 transform;
+ transform.loadIdentity();
+ SkPath path;
+ SkScalar r = 100;
+ path.addCircle(r, r, r);
+ area.clipPathWithTransform(path, &transform, SkRegion::kIntersect_Op);
+ EXPECT_FALSE(area.isEmpty());
+ EXPECT_FALSE(area.isSimple());
+ EXPECT_FALSE(area.isRectangleList());
+ Rect clipRect(area.getClipRect());
+ clipRect.dump("clipRect");
+ Rect expected(0, 0, r * 2, r * 2);
+ expected.dump("expected");
+ EXPECT_EQ(expected, clipRect);
+ SkRegion clipRegion(area.getClipRegion());
+ auto skRect(clipRegion.getBounds());
+ Rect regionBounds;
+ regionBounds.set(skRect);
+ EXPECT_EQ(expected, regionBounds);
+}
+}
+}