command_buffer_gles2_tests_main.cc 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "base/bind.h"
  5. #include "base/message_loop/message_pump_type.h"
  6. #include "base/task/single_thread_task_executor.h"
  7. #include "build/build_config.h"
  8. #if BUILDFLAG(IS_MAC)
  9. #include "base/mac/scoped_nsautorelease_pool.h"
  10. #endif
  11. #include "base/test/launcher/unit_test_launcher.h"
  12. #include "base/test/test_suite.h"
  13. #include "testing/gmock/include/gmock/gmock.h"
  14. #include "gpu/gles2_conform_support/egl/test_support.h" // NOLINT
  15. // This file implements the main entry point for tests for command_buffer_gles2,
  16. // the mode of command buffer where the code is compiled as a standalone dynamic
  17. // library and exposed through EGL API.
  18. namespace {
  19. int RunHelper(base::TestSuite* testSuite) {
  20. base::MessagePumpType pump_type = base::MessagePumpType::IO;
  21. #if defined(USE_OZONE)
  22. pump_type = base::MessagePumpType::UI;
  23. #endif
  24. base::SingleThreadTaskExecutor executor(pump_type);
  25. return testSuite->Run();
  26. }
  27. } // namespace
  28. int main(int argc, char** argv) {
  29. // NOTE: we initialize globals through TestSuite constructor or through JNI
  30. // library registration process on Android.
  31. // However, when the system is compiled with component build,
  32. // command_buffer_gles2 library and this test runner share the globals, such
  33. // as AtExitManager and JVM references. When command_buffer_gles2 is run with
  34. // the test runner, the globals may be populated. Any other app linking to
  35. // command_buffer_gles2 of course can not provide the globals.
  36. // When the system is compiled without component build, command_buffer_gles2
  37. // gets its own globals, while the test runner gets its own. The runner
  38. // initialize different global variables than the ones command_buffer_gles2
  39. // library uses. For example, there should be a global AtExitManager for the
  40. // test runner, and there should be a global AtExitManager that the library
  41. // uses. Similarly, if the test runner would use JNI, it should have global
  42. // reference to the JNI environent. If the command_buffer_gles2 library would
  43. // use JNI, it should have its own global reference to the JNI that always
  44. // remains null. The reference of the library should always stay null, since
  45. // JNI is not part of command_buffer_gles2 exported API (EGL API), and thus
  46. // there is no way for the client of the library to populate the JNI
  47. // pointer. The client may not even be a Java app.
  48. // We signify that the globals have been initialized when running
  49. // the component build.
  50. #if defined(COMPONENT_BUILD)
  51. g_command_buffer_gles_has_atexit_manager = true;
  52. #endif
  53. base::TestSuite test_suite(argc, argv);
  54. #if BUILDFLAG(IS_MAC)
  55. base::mac::ScopedNSAutoreleasePool pool;
  56. #endif
  57. testing::InitGoogleMock(&argc, argv);
  58. return base::LaunchUnitTestsSerially(
  59. argc, argv, base::BindOnce(&RunHelper, base::Unretained(&test_suite)));
  60. }