diff options
author | kkinnunen <kkinnunen@nvidia.com> | 2016-02-15 00:04:35 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-15 08:05:53 +0000 |
commit | 6aceb55a100ae0f821a83751ea73ab136cc746f9 (patch) | |
tree | 5e41af51546a10cd86f472ca3ec086c5ba331525 /gpu/command_buffer/tests | |
parent | f49a483f7016dbb41b7d99f1957abd7d37cf8bca (diff) | |
download | chromium_src-6aceb55a100ae0f821a83751ea73ab136cc746f9.zip chromium_src-6aceb55a100ae0f821a83751ea73ab136cc746f9.tar.gz chromium_src-6aceb55a100ae0f821a83751ea73ab136cc746f9.tar.bz2 |
command_buffer_gles2: Add test command_buffer_gles2_test for command_buffer_gles2
Add test command_buffer_gles2_test for testing command_buffer_gles2
library.
Makes the gpu bots to build target, but the target is not run
on any bot.
As an example, fix a potential nullptr reference in eglInitialize
and tests the problem.
Adding the test runner would be useful in order to further develop
command_buffer_gles2. One development direction of the library
would be to extend it enough to support creating OpenGL ES 3.0
context.
BUG=581634
Committed: https://crrev.com/ee2d13a54fc1de09762f1e5be97d6db44235fa80
Cr-Commit-Position: refs/heads/master@{#374353}
CQ_INCLUDE_TRYBOTS=tryserver.chromium.win:win_optional_gpu_tests_rel
Review URL: https://codereview.chromium.org/1640243002
Cr-Commit-Position: refs/heads/master@{#375420}
Diffstat (limited to 'gpu/command_buffer/tests')
-rw-r--r-- | gpu/command_buffer/tests/command_buffer_gles2_tests_main.cc | 67 | ||||
-rw-r--r-- | gpu/command_buffer/tests/egl_test.cc | 36 |
2 files changed, 103 insertions, 0 deletions
diff --git a/gpu/command_buffer/tests/command_buffer_gles2_tests_main.cc b/gpu/command_buffer/tests/command_buffer_gles2_tests_main.cc new file mode 100644 index 0000000..f945390 --- /dev/null +++ b/gpu/command_buffer/tests/command_buffer_gles2_tests_main.cc @@ -0,0 +1,67 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/bind.h" +#include "base/message_loop/message_loop.h" +#if defined(OS_MACOSX) +#include "base/mac/scoped_nsautorelease_pool.h" +#endif +#include "base/test/launcher/unit_test_launcher.h" +#include "base/test/test_suite.h" +#include "gpu/gles2_conform_support/egl/test_support.h" +#include "testing/gmock/include/gmock/gmock.h" + +// This file implements the main entry point for tests for command_buffer_gles2, +// the mode of command buffer where the code is compiled as a standalone dynamic +// library and exposed through EGL API. +namespace { + +int RunHelper(base::TestSuite* testSuite) { +#if defined(USE_OZONE) + base::MessageLoopForUI main_loop; +#else + base::MessageLoopForIO message_loop; +#endif + return testSuite->Run(); +} + +} // namespace + +int main(int argc, char** argv) { +// NOTE: we initialize globals through TestSuite constructor or through JNI +// library registration process on Android. + +// However, when the system is compiled with component build, +// command_buffer_gles2 library and this test runner share the globals, such +// as AtExitManager and JVM references. When command_buffer_gles2 is run with +// the test runner, the globals may be populated. Any other app linking to +// command_buffer_gles2 of course can not provide the globals. + +// When the system is compiled without component build, command_buffer_gles2 +// gets its own globals, while the test runner gets its own. The runner +// initialize different global variables than the ones command_buffer_gles2 +// library uses. For example, there should be a global AtExitManager for the +// test runner, and there should be a global AtExitManager that the library +// uses. Similarly, if the test runner would use JNI, it should have global +// reference to the JNI environent. If the command_buffer_gles2 library would +// use JNI, it should have its own global reference to the JNI that always +// remains null. The reference of the library should always stay null, since +// JNI is not part of command_buffer_gles2 exported API (EGL API), and thus +// there is no way for the client of the library to populate the JNI +// pointer. The client may not even be a Java app. + +// We signify that the globals have been initialized when running +// the component build. +#if defined(COMPONENT_BUILD) + g_command_buffer_gles_has_atexit_manager = true; +#endif + + base::TestSuite test_suite(argc, argv); +#if defined(OS_MACOSX) + base::mac::ScopedNSAutoreleasePool pool; +#endif + testing::InitGoogleMock(&argc, argv); + return base::LaunchUnitTestsSerially( + argc, argv, base::Bind(&RunHelper, base::Unretained(&test_suite))); +} diff --git a/gpu/command_buffer/tests/egl_test.cc b/gpu/command_buffer/tests/egl_test.cc new file mode 100644 index 0000000..bf7e30e --- /dev/null +++ b/gpu/command_buffer/tests/egl_test.cc @@ -0,0 +1,36 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +#include <EGL/egl.h> + +// This file tests EGL basic interface for command_buffer_gles2, the mode of +// command buffer where the code is compiled as a standalone dynamic library and +// exposed through EGL API. +namespace gpu { + +using testing::Test; + +TEST_F(Test, BasicEGLInitialization) { + EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY); + ASSERT_NE(display, EGL_NO_DISPLAY); + + // Test for no crash even though passing nullptrs for major, minor. + EGLBoolean success = eglInitialize(display, nullptr, nullptr); + ASSERT_TRUE(success); + + EGLint major = 0; + EGLint minor = 0; + success = eglInitialize(display, &major, &minor); + ASSERT_TRUE(success); + ASSERT_EQ(major, 1); + ASSERT_EQ(minor, 4); + + success = eglTerminate(display); + ASSERT_TRUE(success); +} + +} // namespace gpu |