Path: blob/main_old/src/tests/perf_tests/EGLMakeCurrentPerf.cpp
1693 views
//1// Copyright 2018 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//5// EGLMakeCurrentPerfTest:6// Performance test for eglMakeCurrent.7//89#include "ANGLEPerfTest.h"10#include "common/platform.h"11#include "common/system_utils.h"12#include "platform/PlatformMethods.h"13#include "test_utils/angle_test_configs.h"14#include "test_utils/angle_test_instantiate.h"1516#define ITERATIONS 201718using namespace testing;1920namespace21{22class EGLMakeCurrentPerfTest : public ANGLEPerfTest,23public WithParamInterface<angle::PlatformParameters>24{25public:26EGLMakeCurrentPerfTest();2728void step() override;29void SetUp() override;30void TearDown() override;3132private:33OSWindow *mOSWindow;34EGLDisplay mDisplay;35EGLSurface mSurface;36EGLConfig mConfig;37std::array<EGLContext, 2> mContexts;38std::unique_ptr<angle::Library> mEGLLibrary;39};4041EGLMakeCurrentPerfTest::EGLMakeCurrentPerfTest()42: ANGLEPerfTest("EGLMakeCurrent", "", "_run", ITERATIONS),43mOSWindow(nullptr),44mDisplay(EGL_NO_DISPLAY),45mSurface(EGL_NO_SURFACE),46mConfig(nullptr),47mContexts({})48{49auto platform = GetParam().eglParameters;5051std::vector<EGLint> displayAttributes;52displayAttributes.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE);53displayAttributes.push_back(platform.renderer);54displayAttributes.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE);55displayAttributes.push_back(platform.majorVersion);56displayAttributes.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE);57displayAttributes.push_back(platform.minorVersion);58displayAttributes.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE);59displayAttributes.push_back(platform.deviceType);60displayAttributes.push_back(EGL_NONE);6162mOSWindow = OSWindow::New();63mOSWindow->initialize("EGLMakeCurrent Test", 64, 64);6465mEGLLibrary.reset(66angle::OpenSharedLibrary(ANGLE_EGL_LIBRARY_NAME, angle::SearchType::ModuleDir));6768angle::LoadProc getProc =69reinterpret_cast<angle::LoadProc>(mEGLLibrary->getSymbol("eglGetProcAddress"));7071if (!getProc)72{73abortTest();74}75else76{77angle::LoadEGL(getProc);7879if (!eglGetPlatformDisplayEXT)80{81abortTest();82}83else84{85mDisplay = eglGetPlatformDisplayEXT(86EGL_PLATFORM_ANGLE_ANGLE, reinterpret_cast<void *>(mOSWindow->getNativeDisplay()),87&displayAttributes[0]);88}89}90}9192void EGLMakeCurrentPerfTest::SetUp()93{94ASSERT_NE(EGL_NO_DISPLAY, mDisplay);95EGLint majorVersion, minorVersion;96ASSERT_TRUE(eglInitialize(mDisplay, &majorVersion, &minorVersion));9798EGLint numConfigs;99EGLint configAttrs[] = {EGL_RED_SIZE,1008,101EGL_GREEN_SIZE,1028,103EGL_BLUE_SIZE,1048,105EGL_RENDERABLE_TYPE,106GetParam().majorVersion == 3 ? EGL_OPENGL_ES3_BIT : EGL_OPENGL_ES2_BIT,107EGL_SURFACE_TYPE,108EGL_WINDOW_BIT,109EGL_NONE};110111ASSERT_TRUE(eglChooseConfig(mDisplay, configAttrs, &mConfig, 1, &numConfigs));112113mContexts[0] = eglCreateContext(mDisplay, mConfig, EGL_NO_CONTEXT, nullptr);114ASSERT_NE(EGL_NO_CONTEXT, mContexts[0]);115mContexts[1] = eglCreateContext(mDisplay, mConfig, EGL_NO_CONTEXT, nullptr);116ASSERT_NE(EGL_NO_CONTEXT, mContexts[1]);117118mSurface = eglCreateWindowSurface(mDisplay, mConfig, mOSWindow->getNativeWindow(), nullptr);119ASSERT_NE(EGL_NO_SURFACE, mSurface);120ASSERT_TRUE(eglMakeCurrent(mDisplay, mSurface, mSurface, mContexts[0]));121}122123void EGLMakeCurrentPerfTest::TearDown()124{125ANGLEPerfTest::TearDown();126eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);127eglDestroySurface(mDisplay, mSurface);128eglDestroyContext(mDisplay, mContexts[0]);129eglDestroyContext(mDisplay, mContexts[1]);130}131132void EGLMakeCurrentPerfTest::step()133{134int mCurrContext = 0;135for (int x = 0; x < ITERATIONS; x++)136{137mCurrContext = (mCurrContext + 1) % mContexts.size();138eglMakeCurrent(mDisplay, mSurface, mSurface, mContexts[mCurrContext]);139}140}141142TEST_P(EGLMakeCurrentPerfTest, Run)143{144run();145}146147GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(EGLMakeCurrentPerfTest);148// We want to run this test on GL(ES) and Vulkan everywhere except Android149#if !defined(ANGLE_PLATFORM_ANDROID)150ANGLE_INSTANTIATE_TEST(EGLMakeCurrentPerfTest,151angle::ES2_D3D11(),152angle::ES2_METAL(),153angle::ES2_OPENGL(),154angle::ES2_OPENGLES(),155angle::ES2_VULKAN());156#endif157158} // namespace159160161