67 lines
2.7 KiB
C++
67 lines
2.7 KiB
C++
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <hwui/Paint.h>
|
|
#include <minikin/Layout.h>
|
|
#include <string>
|
|
#include "TestSceneBase.h"
|
|
|
|
class SaveLayer2Animation;
|
|
|
|
static TestScene::Registrar _SaveLayer(TestScene::Info{
|
|
"savelayer2",
|
|
"Interleaving 20 drawText/drawRect ops with saveLayer"
|
|
"Tests the clipped saveLayer performance and FBO switching overhead.",
|
|
TestScene::simpleCreateScene<SaveLayer2Animation>});
|
|
|
|
class SaveLayer2Animation : public TestScene {
|
|
public:
|
|
Paint mBluePaint;
|
|
Paint mGreenPaint;
|
|
|
|
void createContent(int width, int height, Canvas& canvas) override {
|
|
canvas.drawColor(SkColorSetARGB(255, 255, 0, 0), SkBlendMode::kSrcOver);
|
|
SkIRect bounds = SkIRect::MakeWH(width, height);
|
|
int regions = 20;
|
|
int smallRectHeight = (bounds.height() / regions);
|
|
int padding = smallRectHeight / 4;
|
|
int top = bounds.fTop;
|
|
|
|
mBluePaint.setColor(SkColorSetARGB(255, 0, 0, 255));
|
|
mBluePaint.getSkFont().setSize(padding);
|
|
mGreenPaint.setColor(SkColorSetARGB(255, 0, 255, 0));
|
|
mGreenPaint.getSkFont().setSize(padding);
|
|
|
|
// interleave drawText and drawRect with saveLayer ops
|
|
for (int i = 0; i < regions; i++, top += smallRectHeight) {
|
|
canvas.saveLayer(bounds.fLeft, top, bounds.fRight, top + padding, &mBluePaint);
|
|
canvas.drawColor(SkColorSetARGB(255, 255, 255, 0), SkBlendMode::kSrcOver);
|
|
std::string stri = std::to_string(i);
|
|
std::string offscreen = "offscreen line " + stri;
|
|
TestUtils::drawUtf8ToCanvas(&canvas, offscreen.c_str(), mBluePaint, bounds.fLeft,
|
|
top + padding);
|
|
canvas.restore();
|
|
|
|
canvas.drawRect(bounds.fLeft, top + padding, bounds.fRight,
|
|
top + smallRectHeight - padding, mBluePaint);
|
|
std::string onscreen = "onscreen line " + stri;
|
|
TestUtils::drawUtf8ToCanvas(&canvas, onscreen.c_str(), mGreenPaint, bounds.fLeft,
|
|
top + smallRectHeight - padding);
|
|
}
|
|
}
|
|
void doFrame(int frameNr) override {}
|
|
};
|