blob: f5e6b317529a085cba9cdef23913d0be98214257 [file] [log] [blame]
John Reck09979fb2018-03-12 17:14:53 -07001/*
2 * Copyright (C) 2018 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 "TestSceneBase.h"
18
19#include <unistd.h>
20
21class JankyScene;
22
23static TestScene::Registrar _JankyScene(TestScene::Info{
24 "janky",
25 "A scene that intentionally janks just enough to stay in "
26 "triple buffering.",
27 TestScene::simpleCreateScene<JankyScene>});
28
29class JankyScene : public TestScene {
30public:
31 sp<RenderNode> card;
32
33 void createContent(int width, int height, Canvas& canvas) override {
34 card = TestUtils::createNode(0, 0, 200, 200, [](RenderProperties& props, Canvas& canvas) {
35 canvas.drawColor(0xFF0000FF, SkBlendMode::kSrcOver);
36 });
37 canvas.drawColor(0xFFFFFFFF, SkBlendMode::kSrcOver); // background
38 canvas.drawRenderNode(card.get());
39 }
40
41 void doFrame(int frameNr) override {
42 int curFrame = frameNr % 150;
43 if (curFrame & 1) {
44 usleep(15000);
45 }
46 // we animate left and top coordinates, which in turn animates width and
47 // height (bottom/right coordinates are fixed)
48 card->mutateStagingProperties().setLeftTop(curFrame, curFrame);
49 card->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y);
50 }
51};