104d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik/*
204d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * Copyright (C) 2016 The Android Open Source Project
304d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik *
404d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * Licensed under the Apache License, Version 2.0 (the "License");
504d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * you may not use this file except in compliance with the License.
604d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * You may obtain a copy of the License at
704d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik *
804d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik *      http://www.apache.org/licenses/LICENSE-2.0
904d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik *
1004d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * Unless required by applicable law or agreed to in writing, software
1104d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * distributed under the License is distributed on an "AS IS" BASIS,
1204d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1304d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * See the License for the specific language governing permissions and
1404d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik * limitations under the License.
1504d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik */
1604d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
1704d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik#include <gtest/gtest.h>
1804d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
1904d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik#include <Snapshot.h>
2004d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
2104d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik#include <tests/common/TestUtils.h>
2204d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
2304d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craikusing namespace android::uirenderer;
2404d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
2504d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris CraikTEST(Snapshot, serializeIntersectedClip) {
2604d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    auto actualRoot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(0, 0, 100, 100));
2704d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    auto root = TestUtils::makeSnapshot(Matrix4::identity(), Rect(10, 10, 90, 90));
2804d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    auto child = TestUtils::makeSnapshot(Matrix4::identity(), Rect(50, 50, 90, 90));
2904d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    root->previous = actualRoot.get();
3004d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    child->previous = root.get();
3104d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
3204d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    LinearAllocator allocator;
3304d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    ClipRect rect(Rect(0, 0, 75, 75));
3404d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    {
3504d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        auto intersectWithChild = child->serializeIntersectedClip(allocator,
3604d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik                &rect, Matrix4::identity());
3704d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        ASSERT_NE(nullptr, intersectWithChild);
3804d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        EXPECT_EQ(Rect(50, 50, 75, 75), intersectWithChild->rect) << "Expect intersect with child";
3904d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    }
4004d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
4104d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    rect.intersectWithRoot = true;
4204d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    {
4304d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        auto intersectWithRoot = child->serializeIntersectedClip(allocator,
4404d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik                &rect, Matrix4::identity());
4504d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        ASSERT_NE(nullptr, intersectWithRoot);
4604d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        EXPECT_EQ(Rect(10, 10, 75, 75), intersectWithRoot->rect) << "Expect intersect with root";
4704d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    }
4804d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik}
4904d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
5004d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris CraikTEST(Snapshot, applyClip) {
5104d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    auto actualRoot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(0, 0, 100, 100));
5204d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    auto root = TestUtils::makeSnapshot(Matrix4::identity(), Rect(10, 10, 90, 90));
5304d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    root->previous = actualRoot.get();
5404d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
5504d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    ClipRect rect(Rect(0, 0, 75, 75));
5604d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    {
5704d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        auto child = TestUtils::makeSnapshot(Matrix4::identity(), Rect(50, 50, 90, 90));
5804d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        child->previous = root.get();
5904d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        child->applyClip(&rect, Matrix4::identity());
6004d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
6104d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        EXPECT_TRUE(child->getClipArea().isSimple());
6204d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        EXPECT_EQ(Rect(50, 50, 75, 75), child->getRenderTargetClip());
6304d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    }
6404d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
6504d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    {
6604d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        rect.intersectWithRoot = true;
6704d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        auto child = TestUtils::makeSnapshot(Matrix4::identity(), Rect(50, 50, 90, 90));
6804d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        child->previous = root.get();
6904d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        child->applyClip(&rect, Matrix4::identity());
7004d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik
7104d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        EXPECT_TRUE(child->getClipArea().isSimple());
7204d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik        EXPECT_EQ(Rect(10, 10, 75, 75), child->getRenderTargetClip());
7304d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik    }
7404d46eb69fb4f4c4c332c36c6ae845da3b2ae848Chris Craik}
75