diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /gfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'gfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp')
-rwxr-xr-x | gfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/gfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp b/gfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp new file mode 100755 index 000000000..210ba2745 --- /dev/null +++ b/gfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp @@ -0,0 +1,161 @@ +// +// Copyright 2015 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. +// +// EGLInitializePerfTest: +// Performance test for device creation. +// + +#include "ANGLEPerfTest.h" +#include "Timer.h" +#include "test_utils/angle_test_configs.h" +#include "test_utils/angle_test_instantiate.h" +#include "platform/Platform.h" + +using namespace testing; + +namespace +{ + +// Only applies to D3D11 +class CapturePlatform : public angle::Platform +{ + public: + CapturePlatform() + : mTimer(CreateTimer()), + mLoadDLLsMS(0), + mCreateDeviceMS(0), + mInitResourcesMS(0) + { + mTimer->start(); + } + + double currentTime() override; + void histogramCustomCounts( + const char *name, int sample, int min, int max, int bucketCount) override; + + size_t getLoadDLLsMS() const { return mLoadDLLsMS; } + size_t getCreateDeviceMS() const { return mCreateDeviceMS; } + size_t getInitResourcesMS() const { return mInitResourcesMS; } + + private: + Timer *mTimer; + size_t mLoadDLLsMS; + size_t mCreateDeviceMS; + size_t mInitResourcesMS; +}; + +double CapturePlatform::currentTime() +{ + return mTimer->getElapsedTime(); +} + +void CapturePlatform::histogramCustomCounts( + const char *name, int sample, int /*min*/, int /*max*/, int /*bucketCount*/) +{ + // These must match the names of the histograms. + if (strcmp(name, "GPU.ANGLE.Renderer11InitializeDLLsMS") == 0) + { + mLoadDLLsMS += static_cast<size_t>(sample); + } + // Note: not captured in debug, due to creating a debug device + else if (strcmp(name, "GPU.ANGLE.D3D11CreateDeviceMS") == 0) + { + mCreateDeviceMS += static_cast<size_t>(sample); + } + else if (strcmp(name, "GPU.ANGLE.Renderer11InitializeDeviceMS") == 0) + { + mInitResourcesMS += static_cast<size_t>(sample); + } +} + +class EGLInitializePerfTest : public ANGLEPerfTest, + public WithParamInterface<angle::PlatformParameters> +{ + public: + EGLInitializePerfTest(); + ~EGLInitializePerfTest(); + + void step() override; + void TearDown() override; + + private: + OSWindow *mOSWindow; + EGLDisplay mDisplay; + CapturePlatform mCapturePlatform; +}; + +EGLInitializePerfTest::EGLInitializePerfTest() + : ANGLEPerfTest("EGLInitialize", "_run"), + mOSWindow(nullptr), + mDisplay(EGL_NO_DISPLAY) +{ + auto platform = GetParam().eglParameters; + + std::vector<EGLint> displayAttributes; + displayAttributes.push_back(EGL_PLATFORM_ANGLE_TYPE_ANGLE); + displayAttributes.push_back(platform.renderer); + displayAttributes.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE); + displayAttributes.push_back(platform.majorVersion); + displayAttributes.push_back(EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE); + displayAttributes.push_back(platform.minorVersion); + + if (platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE || + platform.renderer == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE) + { + displayAttributes.push_back(EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE); + displayAttributes.push_back(platform.deviceType); + } + displayAttributes.push_back(EGL_NONE); + + mOSWindow = CreateOSWindow(); + mOSWindow->initialize("EGLInitialize Test", 64, 64); + + auto eglGetPlatformDisplayEXT = + reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT")); + if (eglGetPlatformDisplayEXT == nullptr) + { + std::cerr << "Error getting platform display!" << std::endl; + return; + } + + mDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, + reinterpret_cast<void *>(mOSWindow->getNativeDisplay()), + &displayAttributes[0]); + + ANGLEPlatformInitialize(&mCapturePlatform); +} + +EGLInitializePerfTest::~EGLInitializePerfTest() +{ + SafeDelete(mOSWindow); +} + +void EGLInitializePerfTest::step() +{ + ASSERT_NE(EGL_NO_DISPLAY, mDisplay); + + EGLint majorVersion, minorVersion; + ASSERT_EQ(static_cast<EGLBoolean>(EGL_TRUE), eglInitialize(mDisplay, &majorVersion, &minorVersion)); + ASSERT_EQ(static_cast<EGLBoolean>(EGL_TRUE), eglTerminate(mDisplay)); +} + +void EGLInitializePerfTest::TearDown() +{ + ANGLEPerfTest::TearDown(); + printResult("LoadDLLs", normalizedTime(mCapturePlatform.getLoadDLLsMS()), "ms", true); + printResult("D3D11CreateDevice", normalizedTime(mCapturePlatform.getCreateDeviceMS()), "ms", true); + printResult("InitResources", normalizedTime(mCapturePlatform.getInitResourcesMS()), "ms", true); + + ANGLEPlatformShutdown(); +} + +TEST_P(EGLInitializePerfTest, Run) +{ + run(); +} + +ANGLE_INSTANTIATE_TEST(EGLInitializePerfTest, angle::ES2_D3D11()); + +} // namespace |