Edit

kc3-lang/angle/src/tests/egl_tests/EGLThreadTest.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2018-05-08 13:24:15
    Hash : e95a7f07
    Message : Make EGLThreadTest cross-platform. BUG=angleproject:2464 Change-Id: Ib2a43bc8e2da467f49e8938c386a5e867c80d5bc Reviewed-on: https://chromium-review.googlesource.com/361921 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/tests/egl_tests/EGLThreadTest.cpp
  • //
    // Copyright 2018 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // EGLThreadTest.h: Tests multi-threaded uses of EGL.
    
    #include "gtest/gtest.h"
    #include "system_utils.h"
    
    #include <thread>
    
    #include <EGL/egl.h>
    #include <EGL/eglext.h>
    
    class EGLThreadTest : public testing::Test
    {
      public:
        void threadingTest();
    
      protected:
        EGLDisplay mDisplay = EGL_NO_DISPLAY;
    };
    
    void EGLThreadTest::threadingTest()
    {
        mDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
    
        EXPECT_TRUE(mDisplay != EGL_NO_DISPLAY);
    
        eglInitialize(mDisplay, nullptr, nullptr);
        eglGetCurrentContext();
    }
    
    // Test a bug in our EGL TLS implementation.
    TEST_F(EGLThreadTest, ThreadInitCrash)
    {
        std::thread runner(&EGLThreadTest::threadingTest, this);
    
        // wait for signal from thread
        runner.join();
    
        // crash, because the TLS value is NULL on main thread
        eglGetCurrentSurface(EGL_DRAW);
        eglGetCurrentContext();
    
        eglTerminate(mDisplay);
    }