1694d499662838123f474f41b31dea84ec5d563f0sergeyv/* 2694d499662838123f474f41b31dea84ec5d563f0sergeyv * Copyright (C) 2016 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#include "TestSceneBase.h" 18694d499662838123f474f41b31dea84ec5d563f0sergeyv#include "tests/common/BitmapAllocationTestUtils.h" 19694d499662838123f474f41b31dea84ec5d563f0sergeyv#include "utils/Color.h" 20694d499662838123f474f41b31dea84ec5d563f0sergeyv 21694d499662838123f474f41b31dea84ec5d563f0sergeyv#include <SkBitmap.h> 22694d499662838123f474f41b31dea84ec5d563f0sergeyv 23694d499662838123f474f41b31dea84ec5d563f0sergeyvusing namespace android; 24694d499662838123f474f41b31dea84ec5d563f0sergeyvusing namespace android::uirenderer; 25694d499662838123f474f41b31dea84ec5d563f0sergeyv 26694d499662838123f474f41b31dea84ec5d563f0sergeyvclass BitmapFillrate; 27694d499662838123f474f41b31dea84ec5d563f0sergeyv 28694d499662838123f474f41b31dea84ec5d563f0sergeyvstatic bool _BitmapFillrate( 29694d499662838123f474f41b31dea84ec5d563f0sergeyv BitmapAllocationTestUtils::registerBitmapAllocationScene<BitmapFillrate>( 30694d499662838123f474f41b31dea84ec5d563f0sergeyv "bitmapFillrate", "Draws multiple large half transparent bitmaps.")); 31694d499662838123f474f41b31dea84ec5d563f0sergeyv 32694d499662838123f474f41b31dea84ec5d563f0sergeyvclass BitmapFillrate : public TestScene { 33694d499662838123f474f41b31dea84ec5d563f0sergeyvpublic: 34694d499662838123f474f41b31dea84ec5d563f0sergeyv BitmapFillrate(BitmapAllocationTestUtils::BitmapAllocator allocator) 35694d499662838123f474f41b31dea84ec5d563f0sergeyv : TestScene() 36694d499662838123f474f41b31dea84ec5d563f0sergeyv , mAllocator(allocator) { } 37694d499662838123f474f41b31dea84ec5d563f0sergeyv 38694d499662838123f474f41b31dea84ec5d563f0sergeyv void createContent(int width, int height, Canvas& canvas) override { 39694d499662838123f474f41b31dea84ec5d563f0sergeyv canvas.drawColor(Color::White, SkBlendMode::kSrcOver); 40694d499662838123f474f41b31dea84ec5d563f0sergeyv createNode(canvas, 0x909C27B0, 0, 0, width, height); 41694d499662838123f474f41b31dea84ec5d563f0sergeyv createNode(canvas, 0xA0CDDC39, width / 3, height / 3, width, height); 42694d499662838123f474f41b31dea84ec5d563f0sergeyv createNode(canvas, 0x90009688, width / 3, 0, width, height); 43694d499662838123f474f41b31dea84ec5d563f0sergeyv createNode(canvas, 0xA0FF5722, 0, height / 3, width, height); 44694d499662838123f474f41b31dea84ec5d563f0sergeyv createNode(canvas, 0x9000796B, width / 6, height/6, width, height); 45694d499662838123f474f41b31dea84ec5d563f0sergeyv createNode(canvas, 0xA0FFC107, width / 6, 0, width, height); 46694d499662838123f474f41b31dea84ec5d563f0sergeyv } 47694d499662838123f474f41b31dea84ec5d563f0sergeyv 48694d499662838123f474f41b31dea84ec5d563f0sergeyv void doFrame(int frameNr) override { 49694d499662838123f474f41b31dea84ec5d563f0sergeyv for (size_t ci = 0; ci < mNodes.size(); ci++) { 50694d499662838123f474f41b31dea84ec5d563f0sergeyv mNodes[ci]->mutateStagingProperties().setTranslationX(frameNr % 200); 51694d499662838123f474f41b31dea84ec5d563f0sergeyv mNodes[ci]->mutateStagingProperties().setTranslationY(frameNr % 200); 52694d499662838123f474f41b31dea84ec5d563f0sergeyv mNodes[ci]->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y); 53694d499662838123f474f41b31dea84ec5d563f0sergeyv } 54694d499662838123f474f41b31dea84ec5d563f0sergeyv } 55694d499662838123f474f41b31dea84ec5d563f0sergeyvprivate: 56694d499662838123f474f41b31dea84ec5d563f0sergeyv void createNode(Canvas& canvas, SkColor color, int left, int top, 57694d499662838123f474f41b31dea84ec5d563f0sergeyv int width, int height) { 58694d499662838123f474f41b31dea84ec5d563f0sergeyv int itemWidth = 2 * width / 3; 59694d499662838123f474f41b31dea84ec5d563f0sergeyv int itemHeight = 2 * height / 3; 60694d499662838123f474f41b31dea84ec5d563f0sergeyv auto card = TestUtils::createNode(left, top, left + itemWidth , top + itemHeight, 61694d499662838123f474f41b31dea84ec5d563f0sergeyv [this, itemWidth, itemHeight, color](RenderProperties& props, Canvas& canvas) { 62694d499662838123f474f41b31dea84ec5d563f0sergeyv sk_sp<Bitmap> bitmap = mAllocator(itemWidth, itemHeight, kRGBA_8888_SkColorType, 63694d499662838123f474f41b31dea84ec5d563f0sergeyv [color](SkBitmap& skBitmap) { 64694d499662838123f474f41b31dea84ec5d563f0sergeyv skBitmap.eraseColor(color); 65694d499662838123f474f41b31dea84ec5d563f0sergeyv }); 66694d499662838123f474f41b31dea84ec5d563f0sergeyv canvas.drawBitmap(*bitmap, 0, 0, nullptr); 67694d499662838123f474f41b31dea84ec5d563f0sergeyv }); 68694d499662838123f474f41b31dea84ec5d563f0sergeyv canvas.drawRenderNode(card.get()); 69694d499662838123f474f41b31dea84ec5d563f0sergeyv mNodes.push_back(card); 70694d499662838123f474f41b31dea84ec5d563f0sergeyv } 71694d499662838123f474f41b31dea84ec5d563f0sergeyv 72694d499662838123f474f41b31dea84ec5d563f0sergeyv BitmapAllocationTestUtils::BitmapAllocator mAllocator; 73694d499662838123f474f41b31dea84ec5d563f0sergeyv std::vector< sp<RenderNode> > mNodes; 74694d499662838123f474f41b31dea84ec5d563f0sergeyv};