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: 301bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck static sk_sp<Bitmap> allocateHeapBitmap(int width, int height, SkColorType colorType, 311bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck std::function<void(SkBitmap& bitmap)> setup) { 321bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck sk_sp<Bitmap> bitmap = TestUtils::createBitmap(width, height, colorType); 331bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck SkBitmap skBitmap; 341bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck bitmap->getSkBitmap(&skBitmap); 351bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck setup(skBitmap); 361bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck return bitmap; 37694d499662838123f474f41b31dea84ec5d563f0sergeyv } 38694d499662838123f474f41b31dea84ec5d563f0sergeyv 391bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck static sk_sp<Bitmap> allocateHardwareBitmap(int width, int height, SkColorType colorType, 401bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck std::function<void(SkBitmap& bitmap)> setup) { 41694d499662838123f474f41b31dea84ec5d563f0sergeyv SkBitmap skBitmap; 4291d6354cde90b6625d4af6a5d909d886bf602a49sergeyv SkImageInfo info = SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType); 4391d6354cde90b6625d4af6a5d909d886bf602a49sergeyv skBitmap.setInfo(info); 44f51a80d2b074d1971b11b19e890c936af5aa57a3Leon Scroggins III sk_sp<Bitmap> heapBitmap(Bitmap::allocateHeapBitmap(&skBitmap)); 45694d499662838123f474f41b31dea84ec5d563f0sergeyv setup(skBitmap); 46694d499662838123f474f41b31dea84ec5d563f0sergeyv return Bitmap::allocateHardwareBitmap(skBitmap); 47694d499662838123f474f41b31dea84ec5d563f0sergeyv } 48694d499662838123f474f41b31dea84ec5d563f0sergeyv 491bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck typedef sk_sp<Bitmap> (*BitmapAllocator)(int, int, SkColorType, 501bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck 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> 581bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck static bool registerBitmapAllocationScene(std::string name, std::string description) { 591bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck TestScene::registerScene({name + "GlTex", description + " (GlTex version).", 601bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck createBitmapAllocationScene<BaseScene, &allocateHeapBitmap>}); 61694d499662838123f474f41b31dea84ec5d563f0sergeyv 621bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck TestScene::registerScene({name + "EglImage", description + " (EglImage version).", 631bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck createBitmapAllocationScene<BaseScene, &allocateHardwareBitmap>}); 64694d499662838123f474f41b31dea84ec5d563f0sergeyv return true; 65694d499662838123f474f41b31dea84ec5d563f0sergeyv } 66694d499662838123f474f41b31dea84ec5d563f0sergeyv}; 67694d499662838123f474f41b31dea84ec5d563f0sergeyv 681bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck} // namespace test 691bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck} // namespace uirenderer 701bcacfdcab0eaa0cee92bd7f5a1b5e271dd68e52John Reck} // namespace android 71