TreeInfo.h revision a5dda645da738da7b4ae15e28fa7d93d3b04b94f
1/*
2 * Copyright (C) 2014 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#ifndef TREEINFO_H
17#define TREEINFO_H
18
19#include <utils/Timers.h>
20
21namespace android {
22namespace uirenderer {
23
24class BaseRenderNodeAnimator;
25class AnimationListener;
26
27class AnimationHook {
28public:
29    virtual void callOnFinished(BaseRenderNodeAnimator* animator, AnimationListener* listener) = 0;
30protected:
31    ~AnimationHook() {}
32};
33
34struct TreeInfo {
35    // The defaults here should be safe for everyone but DrawFrameTask to use as-is.
36    TreeInfo()
37        : frameTimeMs(0)
38        , animationHook(NULL)
39        , prepareTextures(false)
40        , performStagingPush(true)
41        , evaluateAnimations(false)
42    {}
43
44    nsecs_t frameTimeMs;
45    AnimationHook* animationHook;
46    bool prepareTextures;
47    bool performStagingPush;
48    bool evaluateAnimations;
49
50    struct Out {
51        Out()
52            : hasFunctors(false)
53            , hasAnimations(false)
54            , requiresUiRedraw(false)
55            , canDrawThisFrame(true)
56        {}
57        bool hasFunctors;
58        // This is only updated if evaluateAnimations is true
59        bool hasAnimations;
60        // This is set to true if there is an animation that RenderThread cannot
61        // animate itself, such as if hasFunctors is true
62        // This is only set if hasAnimations is true
63        bool requiresUiRedraw;
64        // This is set to true if draw() can be called this frame
65        // false means that we must delay until the next vsync pulse as frame
66        // production is outrunning consumption
67        // NOTE that if this is false CanvasContext will set either requiresUiRedraw
68        // *OR* will post itself for the next vsync automatically, use this
69        // only to avoid calling draw()
70        bool canDrawThisFrame;
71    } out;
72
73    // TODO: Damage calculations
74};
75
76} /* namespace uirenderer */
77} /* namespace android */
78
79#endif /* TREEINFO_H */
80