Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca93f69c authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Have an actual fallback if the surface is lost" into lmp-mr1-dev

parents 3eed90f3 aa95a883
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -66,6 +66,8 @@ public class ThreadedRenderer extends HardwareRenderer {
    private static final int SYNC_OK = 0;
    // Needs a ViewRoot invalidate
    private static final int SYNC_INVALIDATE_REQUIRED = 1 << 0;
    // Spoiler: the reward is GPU-accelerated drawing, better find that Surface!
    private static final int SYNC_LOST_SURFACE_REWARD_IF_FOUND = 1 << 1;

    private static final String[] VISUALIZERS = {
        PROFILE_PROPERTY_VISUALIZE_BARS,
@@ -336,6 +338,12 @@ public class ThreadedRenderer extends HardwareRenderer {

        int syncResult = nSyncAndDrawFrame(mNativeProxy, frameTimeNanos,
                recordDuration, view.getResources().getDisplayMetrics().density);
        if ((syncResult & SYNC_LOST_SURFACE_REWARD_IF_FOUND) != 0) {
            setEnabled(false);
            // Invalidate since we failed to draw. This should fetch a Surface
            // if it is still needed or do nothing if we are no longer drawing
            attachInfo.mViewRootImpl.invalidate();
        }
        if ((syncResult & SYNC_INVALIDATE_REQUIRED) != 0) {
            attachInfo.mViewRootImpl.invalidate();
        }
+5 −0
Original line number Diff line number Diff line
@@ -166,6 +166,11 @@ void CanvasContext::prepareTree(TreeInfo& info) {
        freePrefetechedLayers();
    }

    if (CC_UNLIKELY(!mNativeWindow.get())) {
        info.out.canDrawThisFrame = false;
        return;
    }

    int runningBehind = 0;
    // TODO: This query is moderately expensive, investigate adding some sort
    // of fast-path based off when we last called eglSwapBuffers() as well as
+2 −0
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ public:
    bool initialize(ANativeWindow* window);
    void updateSurface(ANativeWindow* window);
    void pauseSurface(ANativeWindow* window);
    bool hasSurface() { return mNativeWindow.get(); }

    void setup(int width, int height, const Vector3& lightCenter, float lightRadius,
            uint8_t ambientShadowAlpha, uint8_t spotShadowAlpha);
    void setOpaque(bool opaque);
+6 −0
Original line number Diff line number Diff line
@@ -132,6 +132,12 @@ bool DrawFrameTask::syncFrameState(TreeInfo& info) {
    mLayers.clear();
    mContext->prepareTree(info);

    // This is after the prepareTree so that any pending operations
    // (RenderNode tree state, prefetched layers, etc...) will be flushed.
    if (CC_UNLIKELY(!mContext->hasSurface())) {
        mSyncResult |= kSync_LostSurfaceRewardIfFound;
    }

    if (info.out.hasAnimations) {
        if (info.out.requiresUiRedraw) {
            mSyncResult |= kSync_UIRedrawRequired;
+1 −0
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ class RenderThread;
enum SyncResult {
    kSync_OK = 0,
    kSync_UIRedrawRequired = 1 << 0,
    kSync_LostSurfaceRewardIfFound = 1 << 1,
};

/*