SkiaBehaviorTests.cpp revision ab12c1fe73734a18ac19a06b97f276528f6d027a
1/* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include "tests/common/TestUtils.h" 18 19#include <gtest/gtest.h> 20#include <SkColorMatrixFilter.h> 21#include <SkColorSpace.h> 22#include <SkImagePriv.h> 23#include <SkShader.h> 24 25using namespace android; 26using namespace android::uirenderer; 27 28SkBitmap createSkBitmap(int width, int height) { 29 SkBitmap bitmap; 30 SkImageInfo info = SkImageInfo::Make(width, height, kN32_SkColorType, kPremul_SkAlphaType); 31 bitmap.setInfo(info); 32 bitmap.allocPixels(info); 33 return bitmap; 34} 35 36/** 37 * 1x1 bitmaps must not be optimized into solid color shaders, since HWUI can't 38 * compose/render color shaders 39 */ 40TEST(SkiaBehavior, CreateBitmapShader1x1) { 41 SkBitmap origBitmap = createSkBitmap(1, 1); 42 sk_sp<SkShader> s = SkMakeBitmapShader( 43 origBitmap, 44 SkShader::kClamp_TileMode, 45 SkShader::kRepeat_TileMode, 46 nullptr, 47 kNever_SkCopyPixelsMode, 48 nullptr); 49 50 SkBitmap bitmap; 51 SkShader::TileMode xy[2]; 52 ASSERT_TRUE(s->isABitmap(&bitmap, nullptr, xy)) 53 << "1x1 bitmap shader must query as bitmap shader"; 54 EXPECT_EQ(SkShader::kClamp_TileMode, xy[0]); 55 EXPECT_EQ(SkShader::kRepeat_TileMode, xy[1]); 56 EXPECT_EQ(origBitmap.pixelRef(), bitmap.pixelRef()); 57} 58 59TEST(SkiaBehavior, genIds) { 60 SkBitmap bitmap = createSkBitmap(100, 100); 61 uint32_t genId = bitmap.getGenerationID(); 62 bitmap.notifyPixelsChanged(); 63 EXPECT_NE(genId, bitmap.getGenerationID()); 64} 65 66TEST(SkiaBehavior, lightingColorFilter_simplify) { 67 { 68 sk_sp<SkColorFilter> filter( 69 SkColorMatrixFilter::MakeLightingFilter(0x11223344, 0)); 70 71 SkColor observedColor; 72 SkBlendMode observedMode; 73 ASSERT_TRUE(filter->asColorMode(&observedColor, &observedMode)); 74 EXPECT_EQ(0xFF223344, observedColor); 75 EXPECT_EQ(SkBlendMode::kModulate, observedMode); 76 } 77 78 { 79 sk_sp<SkColorFilter> failFilter( 80 SkColorMatrixFilter::MakeLightingFilter(0x11223344, 0x1)); 81 EXPECT_FALSE(failFilter->asColorMode(nullptr, nullptr)); 82 } 83} 84 85TEST(SkiaBehavior, porterDuffCreateIsCached) { 86 SkPaint paint; 87 paint.setBlendMode(SkBlendMode::kOverlay); 88 auto expected = paint.getBlendMode(); 89 paint.setBlendMode(SkBlendMode::kClear); 90 ASSERT_NE(expected, paint.getBlendMode()); 91 paint.setBlendMode(SkBlendMode::kOverlay); 92 ASSERT_EQ(expected, paint.getBlendMode()); 93} 94 95TEST(SkiaBehavior, srgbColorSpaceIsSingleton) { 96 sk_sp<SkColorSpace> sRGB1 = SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named); 97 sk_sp<SkColorSpace> sRGB2 = SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named); 98 ASSERT_EQ(sRGB1.get(), sRGB2.get()); 99} 100