summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /gfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-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-xgfx/angle/src/tests/perf_tests/EGLInitializePerf.cpp161
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