107d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik/* 207d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * Copyright (C) 2015 The Android Open Source Project 307d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * 407d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 507d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * you may not use this file except in compliance with the License. 607d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * You may obtain a copy of the License at 707d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * 807d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 907d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * 1007d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * Unless required by applicable law or agreed to in writing, software 1107d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 1207d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1307d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * See the License for the specific language governing permissions and 1407d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * limitations under the License. 1507d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik */ 1607d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik 1707d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik#include "tests/common/TestUtils.h" 1807d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik 1907d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik#include <gtest/gtest.h> 2007d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik#include <SkShader.h> 2120136f31941e3b036bf25537f1dac364a58483c9Chris Craik#include <SkColorMatrixFilter.h> 2207d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik 2307d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craikusing namespace android; 2407d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craikusing namespace android::uirenderer; 2507d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik 2607d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik/** 2707d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * 1x1 bitmaps must not be optimized into solid color shaders, since HWUI can't 2807d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik * compose/render color shaders 2907d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik */ 3007d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris CraikTEST(SkiaBehavior, CreateBitmapShader1x1) { 3107d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik SkBitmap origBitmap = TestUtils::createSkBitmap(1, 1); 3220136f31941e3b036bf25537f1dac364a58483c9Chris Craik SkAutoTUnref<SkShader> s(SkShader::CreateBitmapShader( 3307d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik origBitmap, 3407d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik SkShader::kClamp_TileMode, 3507d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik SkShader::kRepeat_TileMode)); 3607d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik 3707d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik SkBitmap bitmap; 3807d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik SkShader::TileMode xy[2]; 3907d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik ASSERT_TRUE(s->isABitmap(&bitmap, nullptr, xy)) 4007d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik << "1x1 bitmap shader must query as bitmap shader"; 4107d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik EXPECT_EQ(SkShader::kClamp_TileMode, xy[0]); 4207d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik EXPECT_EQ(SkShader::kRepeat_TileMode, xy[1]); 4307d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik EXPECT_EQ(origBitmap.pixelRef(), bitmap.pixelRef()); 4407d8d59e21125fe7cba09b10e3dd7ecb9c49e8d8Chris Craik} 45bee6092dbef81ff724624c4dd630efa8657817f8Chris Craik 46bee6092dbef81ff724624c4dd630efa8657817f8Chris CraikTEST(SkiaBehavior, genIds) { 47bee6092dbef81ff724624c4dd630efa8657817f8Chris Craik SkBitmap bitmap = TestUtils::createSkBitmap(100, 100); 48bee6092dbef81ff724624c4dd630efa8657817f8Chris Craik uint32_t genId = bitmap.getGenerationID(); 49bee6092dbef81ff724624c4dd630efa8657817f8Chris Craik bitmap.notifyPixelsChanged(); 50bee6092dbef81ff724624c4dd630efa8657817f8Chris Craik EXPECT_NE(genId, bitmap.getGenerationID()); 51bee6092dbef81ff724624c4dd630efa8657817f8Chris Craik} 5220136f31941e3b036bf25537f1dac364a58483c9Chris Craik 5320136f31941e3b036bf25537f1dac364a58483c9Chris CraikTEST(SkiaBehavior, lightingColorFilter_simplify) { 5436ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik { 5536ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik SkAutoTUnref<SkColorFilter> filter( 5636ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik SkColorMatrixFilter::CreateLightingFilter(0x11223344, 0)); 5720136f31941e3b036bf25537f1dac364a58483c9Chris Craik 5836ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik SkColor observedColor; 5936ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik SkXfermode::Mode observedMode; 6036ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik ASSERT_TRUE(filter->asColorMode(&observedColor, &observedMode)); 6136ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik EXPECT_EQ(0xFF223344, observedColor); 6236ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik EXPECT_EQ(SkXfermode::Mode::kModulate_Mode, observedMode); 6336ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik } 6420136f31941e3b036bf25537f1dac364a58483c9Chris Craik 6536ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik { 6636ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik SkAutoTUnref<SkColorFilter> failFilter( 6736ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik SkColorMatrixFilter::CreateLightingFilter(0x11223344, 0x1)); 6836ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik EXPECT_FALSE(failFilter->asColorMode(nullptr, nullptr)); 6936ce80d5301664b4839ebd2f4570f062cbabf862Chris Craik } 7020136f31941e3b036bf25537f1dac364a58483c9Chris Craik} 71