102806288d1c56475413888a934c796e6e4eb11c5Chris Craik/*
202806288d1c56475413888a934c796e6e4eb11c5Chris Craik * Copyright (C) 2016 The Android Open Source Project
302806288d1c56475413888a934c796e6e4eb11c5Chris Craik *
402806288d1c56475413888a934c796e6e4eb11c5Chris Craik * Licensed under the Apache License, Version 2.0 (the "License");
502806288d1c56475413888a934c796e6e4eb11c5Chris Craik * you may not use this file except in compliance with the License.
602806288d1c56475413888a934c796e6e4eb11c5Chris Craik * You may obtain a copy of the License at
702806288d1c56475413888a934c796e6e4eb11c5Chris Craik *
802806288d1c56475413888a934c796e6e4eb11c5Chris Craik *      http://www.apache.org/licenses/LICENSE-2.0
902806288d1c56475413888a934c796e6e4eb11c5Chris Craik *
1002806288d1c56475413888a934c796e6e4eb11c5Chris Craik * Unless required by applicable law or agreed to in writing, software
1102806288d1c56475413888a934c796e6e4eb11c5Chris Craik * distributed under the License is distributed on an "AS IS" BASIS,
1202806288d1c56475413888a934c796e6e4eb11c5Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1302806288d1c56475413888a934c796e6e4eb11c5Chris Craik * See the License for the specific language governing permissions and
1402806288d1c56475413888a934c796e6e4eb11c5Chris Craik * limitations under the License.
1502806288d1c56475413888a934c796e6e4eb11c5Chris Craik */
1602806288d1c56475413888a934c796e6e4eb11c5Chris Craik
1702806288d1c56475413888a934c796e6e4eb11c5Chris Craik#include <gtest/gtest.h>
1802806288d1c56475413888a934c796e6e4eb11c5Chris Craik
1902806288d1c56475413888a934c796e6e4eb11c5Chris Craik#include <BakedOpRenderer.h>
2002806288d1c56475413888a934c796e6e4eb11c5Chris Craik#include <tests/common/TestUtils.h>
2102806288d1c56475413888a934c796e6e4eb11c5Chris Craik
2202806288d1c56475413888a934c796e6e4eb11c5Chris Craikusing namespace android::uirenderer;
2302806288d1c56475413888a934c796e6e4eb11c5Chris Craik
2402806288d1c56475413888a934c796e6e4eb11c5Chris Craikconst BakedOpRenderer::LightInfo sLightInfo = { 128, 128 };
2502806288d1c56475413888a934c796e6e4eb11c5Chris Craik
2602806288d1c56475413888a934c796e6e4eb11c5Chris CraikRENDERTHREAD_TEST(BakedOpRenderer, startRepaintLayer_clear) {
2702806288d1c56475413888a934c796e6e4eb11c5Chris Craik    BakedOpRenderer renderer(Caches::getInstance(), renderThread.renderState(), true, sLightInfo);
2802806288d1c56475413888a934c796e6e4eb11c5Chris Craik    OffscreenBuffer layer(renderThread.renderState(), Caches::getInstance(), 200u, 200u);
2902806288d1c56475413888a934c796e6e4eb11c5Chris Craik
3002806288d1c56475413888a934c796e6e4eb11c5Chris Craik    layer.dirty(Rect(200, 200));
3102806288d1c56475413888a934c796e6e4eb11c5Chris Craik    {
3202806288d1c56475413888a934c796e6e4eb11c5Chris Craik        renderer.startRepaintLayer(&layer, Rect(200, 200));
3302806288d1c56475413888a934c796e6e4eb11c5Chris Craik        EXPECT_TRUE(layer.region.isEmpty()) << "Repaint full layer should clear region";
3402806288d1c56475413888a934c796e6e4eb11c5Chris Craik        renderer.endLayer();
3502806288d1c56475413888a934c796e6e4eb11c5Chris Craik    }
3602806288d1c56475413888a934c796e6e4eb11c5Chris Craik
3702806288d1c56475413888a934c796e6e4eb11c5Chris Craik    layer.dirty(Rect(200, 200));
3802806288d1c56475413888a934c796e6e4eb11c5Chris Craik    {
3902806288d1c56475413888a934c796e6e4eb11c5Chris Craik        renderer.startRepaintLayer(&layer, Rect(100, 200)); // repainting left side
4002806288d1c56475413888a934c796e6e4eb11c5Chris Craik        EXPECT_TRUE(layer.region.isRect());
4102806288d1c56475413888a934c796e6e4eb11c5Chris Craik        //ALOGD("bounds %d %d %d %d", RECT_ARGS(layer.region.getBounds()));
4202806288d1c56475413888a934c796e6e4eb11c5Chris Craik        EXPECT_EQ(android::Rect(100, 0, 200, 200), layer.region.getBounds())
4302806288d1c56475413888a934c796e6e4eb11c5Chris Craik                << "Left side being repainted, so right side should be clear";
4402806288d1c56475413888a934c796e6e4eb11c5Chris Craik        renderer.endLayer();
4502806288d1c56475413888a934c796e6e4eb11c5Chris Craik    }
4602806288d1c56475413888a934c796e6e4eb11c5Chris Craik
4702806288d1c56475413888a934c796e6e4eb11c5Chris Craik    // right side is now only dirty portion
4802806288d1c56475413888a934c796e6e4eb11c5Chris Craik    {
4902806288d1c56475413888a934c796e6e4eb11c5Chris Craik        renderer.startRepaintLayer(&layer, Rect(100, 0, 200, 200)); // repainting right side
5002806288d1c56475413888a934c796e6e4eb11c5Chris Craik        EXPECT_TRUE(layer.region.isEmpty())
5102806288d1c56475413888a934c796e6e4eb11c5Chris Craik                << "Now right side being repainted, so region should be entirely clear";
5202806288d1c56475413888a934c796e6e4eb11c5Chris Craik        renderer.endLayer();
5302806288d1c56475413888a934c796e6e4eb11c5Chris Craik    }
5402806288d1c56475413888a934c796e6e4eb11c5Chris Craik}
55