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

Commit a8010f4b authored by Selim Cinek's avatar Selim Cinek Committed by android-build-merger
Browse files

Merge "EglDisplay may be null and cause Null point exception" into qt-r1-dev

am: aec6b618

Change-Id: Ief335b85b37c41b128cd67727acd354c9a6642d2
parents 246790ab aec6b618
Loading
Loading
Loading
Loading
+25 −3
Original line number Original line Diff line number Diff line
@@ -146,7 +146,13 @@ public class EglHelper {
     * @return true if EglSurface is ready.
     * @return true if EglSurface is ready.
     */
     */
    public boolean createEglSurface(SurfaceHolder surfaceHolder) {
    public boolean createEglSurface(SurfaceHolder surfaceHolder) {
        if (hasEglDisplay()) {
            mEglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, surfaceHolder, null, 0);
            mEglSurface = eglCreateWindowSurface(mEglDisplay, mEglConfig, surfaceHolder, null, 0);
        } else {
            Log.w(TAG, "mEglDisplay is null");
            return false;
        }

        if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) {
        if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) {
            Log.w(TAG, "createWindowSurface failed: " + GLUtils.getEGLErrorString(eglGetError()));
            Log.w(TAG, "createWindowSurface failed: " + GLUtils.getEGLErrorString(eglGetError()));
            return false;
            return false;
@@ -186,7 +192,13 @@ public class EglHelper {
    public boolean createEglContext() {
    public boolean createEglContext() {
        int[] attrib_list = new int[] {EGL_CONTEXT_CLIENT_VERSION, 2,
        int[] attrib_list = new int[] {EGL_CONTEXT_CLIENT_VERSION, 2,
                EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_LOW_IMG, EGL_NONE};
                EGL_CONTEXT_PRIORITY_LEVEL_IMG, EGL_CONTEXT_PRIORITY_LOW_IMG, EGL_NONE};
        if (hasEglDisplay()) {
            mEglContext = eglCreateContext(mEglDisplay, mEglConfig, EGL_NO_CONTEXT, attrib_list, 0);
            mEglContext = eglCreateContext(mEglDisplay, mEglConfig, EGL_NO_CONTEXT, attrib_list, 0);
        } else {
            Log.w(TAG, "mEglDisplay is null");
            return false;
        }

        if (mEglContext == EGL_NO_CONTEXT) {
        if (mEglContext == EGL_NO_CONTEXT) {
            Log.w(TAG, "eglCreateContext failed: " + GLUtils.getEGLErrorString(eglGetError()));
            Log.w(TAG, "eglCreateContext failed: " + GLUtils.getEGLErrorString(eglGetError()));
            return false;
            return false;
@@ -212,6 +224,14 @@ public class EglHelper {
        return mEglContext != null;
        return mEglContext != null;
    }
    }


    /**
     * Check if we have EglDisplay.
     * @return true if EglDisplay is ready.
     */
    public boolean hasEglDisplay() {
        return mEglDisplay != null;
    }

    /**
    /**
     * Swap buffer to display.
     * Swap buffer to display.
     * @return true if swap successfully.
     * @return true if swap successfully.
@@ -235,7 +255,9 @@ public class EglHelper {
        if (hasEglContext()) {
        if (hasEglContext()) {
            destroyEglContext();
            destroyEglContext();
        }
        }
        if (hasEglDisplay()) {
            eglTerminate(mEglDisplay);
            eglTerminate(mEglDisplay);
        }
        mEglReady = false;
        mEglReady = false;
    }
    }


+67 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2019 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.
 */

package com.android.systemui.glwallpaper;

import static org.junit.Assert.*;
import static org.mockito.Mockito.RETURNS_DEFAULTS;
import static org.mockito.Mockito.mock;

import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.view.SurfaceHolder;

import androidx.test.filters.SmallTest;

import com.android.systemui.SysuiTestCase;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;


@SmallTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class EglHelperTest extends SysuiTestCase {

    @Mock
    private EglHelper mEglHelper;
    @Mock
    private SurfaceHolder mSurfaceHolder;

    @Before
    public void setUp() throws Exception {
        mEglHelper = mock(EglHelper.class, RETURNS_DEFAULTS);
        mSurfaceHolder = mock(SurfaceHolder.class, RETURNS_DEFAULTS);
    }

    @Test
    public void testInit_finish() {
        mEglHelper.init(mSurfaceHolder);
        mEglHelper.finish();
    }

    @Test
    public void testFinish_shouldNotCrash() {
        assertFalse(mEglHelper.hasEglDisplay());
        assertFalse(mEglHelper.hasEglSurface());
        assertFalse(mEglHelper.hasEglContext());

        mEglHelper.finish();
    }
}