1694d499662838123f474f41b31dea84ec5d563f0sergeyv/* 2694d499662838123f474f41b31dea84ec5d563f0sergeyv * Copyright (C) 2015 The Android Open Source Project 3694d499662838123f474f41b31dea84ec5d563f0sergeyv * 4694d499662838123f474f41b31dea84ec5d563f0sergeyv * Licensed under the Apache License, Version 2.0 (the "License"); 5694d499662838123f474f41b31dea84ec5d563f0sergeyv * you may not use this file except in compliance with the License. 6694d499662838123f474f41b31dea84ec5d563f0sergeyv * You may obtain a copy of the License at 7694d499662838123f474f41b31dea84ec5d563f0sergeyv * 8694d499662838123f474f41b31dea84ec5d563f0sergeyv * http://www.apache.org/licenses/LICENSE-2.0 9694d499662838123f474f41b31dea84ec5d563f0sergeyv * 10694d499662838123f474f41b31dea84ec5d563f0sergeyv * Unless required by applicable law or agreed to in writing, software 11694d499662838123f474f41b31dea84ec5d563f0sergeyv * distributed under the License is distributed on an "AS IS" BASIS, 12694d499662838123f474f41b31dea84ec5d563f0sergeyv * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13694d499662838123f474f41b31dea84ec5d563f0sergeyv * See the License for the specific language governing permissions and 14694d499662838123f474f41b31dea84ec5d563f0sergeyv * limitations under the License. 15694d499662838123f474f41b31dea84ec5d563f0sergeyv */ 16694d499662838123f474f41b31dea84ec5d563f0sergeyv 17694d499662838123f474f41b31dea84ec5d563f0sergeyv#pragma once 18694d499662838123f474f41b31dea84ec5d563f0sergeyv 19694d499662838123f474f41b31dea84ec5d563f0sergeyv#include "TestScene.h" 20694d499662838123f474f41b31dea84ec5d563f0sergeyv 21694d499662838123f474f41b31dea84ec5d563f0sergeyv#include <SkBitmap.h> 22694d499662838123f474f41b31dea84ec5d563f0sergeyv#include <string> 23694d499662838123f474f41b31dea84ec5d563f0sergeyv 24694d499662838123f474f41b31dea84ec5d563f0sergeyvnamespace android { 25694d499662838123f474f41b31dea84ec5d563f0sergeyvnamespace uirenderer { 26694d499662838123f474f41b31dea84ec5d563f0sergeyvnamespace test { 27694d499662838123f474f41b31dea84ec5d563f0sergeyv 28694d499662838123f474f41b31dea84ec5d563f0sergeyvclass BitmapAllocationTestUtils { 29694d499662838123f474f41b31dea84ec5d563f0sergeyvpublic: 30694d499662838123f474f41b31dea84ec5d563f0sergeyv static sk_sp<Bitmap> allocateHeapBitmap(int width, int height, 31694d499662838123f474f41b31dea84ec5d563f0sergeyv SkColorType colorType, std::function<void(SkBitmap& bitmap)> setup) { 32694d499662838123f474f41b31dea84ec5d563f0sergeyv sk_sp<Bitmap> bitmap = TestUtils::createBitmap(width, height, colorType); 33694d499662838123f474f41b31dea84ec5d563f0sergeyv SkBitmap skBitmap; 34694d499662838123f474f41b31dea84ec5d563f0sergeyv bitmap->getSkBitmap(&skBitmap); 35694d499662838123f474f41b31dea84ec5d563f0sergeyv setup(skBitmap); 36694d499662838123f474f41b31dea84ec5d563f0sergeyv return bitmap; 37694d499662838123f474f41b31dea84ec5d563f0sergeyv } 38694d499662838123f474f41b31dea84ec5d563f0sergeyv 39694d499662838123f474f41b31dea84ec5d563f0sergeyv static sk_sp<Bitmap> allocateHardwareBitmap(int width, int height, 40694d499662838123f474f41b31dea84ec5d563f0sergeyv SkColorType colorType, std::function<void(SkBitmap& bitmap)> setup) { 41694d499662838123f474f41b31dea84ec5d563f0sergeyv SkBitmap skBitmap; 4291d6354cde90b6625d4af6a5d909d886bf602a49sergeyv SkImageInfo info = SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType); 4391d6354cde90b6625d4af6a5d909d886bf602a49sergeyv skBitmap.setInfo(info); 4491d6354cde90b6625d4af6a5d909d886bf602a49sergeyv sk_sp<Bitmap> heapBitmap(Bitmap::allocateHeapBitmap(&skBitmap, nullptr)); 45694d499662838123f474f41b31dea84ec5d563f0sergeyv setup(skBitmap); 46694d499662838123f474f41b31dea84ec5d563f0sergeyv return Bitmap::allocateHardwareBitmap(skBitmap); 47694d499662838123f474f41b31dea84ec5d563f0sergeyv } 48694d499662838123f474f41b31dea84ec5d563f0sergeyv 49694d499662838123f474f41b31dea84ec5d563f0sergeyv typedef sk_sp<Bitmap> (*BitmapAllocator) (int, int, SkColorType, 50694d499662838123f474f41b31dea84ec5d563f0sergeyv std::function<void(SkBitmap& bitmap)> setup); 51694d499662838123f474f41b31dea84ec5d563f0sergeyv 52694d499662838123f474f41b31dea84ec5d563f0sergeyv template <class T, BitmapAllocator allocator> 53694d499662838123f474f41b31dea84ec5d563f0sergeyv static test::TestScene* createBitmapAllocationScene(const TestScene::Options&) { 54694d499662838123f474f41b31dea84ec5d563f0sergeyv return new T(allocator); 55694d499662838123f474f41b31dea84ec5d563f0sergeyv } 56694d499662838123f474f41b31dea84ec5d563f0sergeyv 57694d499662838123f474f41b31dea84ec5d563f0sergeyv template <class BaseScene> 58694d499662838123f474f41b31dea84ec5d563f0sergeyv static bool registerBitmapAllocationScene(std::string name, std::string description) { 59694d499662838123f474f41b31dea84ec5d563f0sergeyv TestScene::registerScene({ 60694d499662838123f474f41b31dea84ec5d563f0sergeyv name + "GlTex", 61694d499662838123f474f41b31dea84ec5d563f0sergeyv description + " (GlTex version).", 62694d499662838123f474f41b31dea84ec5d563f0sergeyv createBitmapAllocationScene<BaseScene, &allocateHeapBitmap> 63694d499662838123f474f41b31dea84ec5d563f0sergeyv }); 64694d499662838123f474f41b31dea84ec5d563f0sergeyv 65694d499662838123f474f41b31dea84ec5d563f0sergeyv TestScene::registerScene({ 66694d499662838123f474f41b31dea84ec5d563f0sergeyv name + "EglImage", 67694d499662838123f474f41b31dea84ec5d563f0sergeyv description + " (EglImage version).", 68694d499662838123f474f41b31dea84ec5d563f0sergeyv createBitmapAllocationScene<BaseScene, &allocateHardwareBitmap> 69694d499662838123f474f41b31dea84ec5d563f0sergeyv }); 70694d499662838123f474f41b31dea84ec5d563f0sergeyv return true; 71694d499662838123f474f41b31dea84ec5d563f0sergeyv } 72694d499662838123f474f41b31dea84ec5d563f0sergeyv}; 73694d499662838123f474f41b31dea84ec5d563f0sergeyv 74694d499662838123f474f41b31dea84ec5d563f0sergeyv} // namespace test 75694d499662838123f474f41b31dea84ec5d563f0sergeyv} // namespace uirenderer 76694d499662838123f474f41b31dea84ec5d563f0sergeyv} // namespace android