Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1300)

Unified Diff: content/test/content_test_suite.cc

Issue 1208603002: content: implement unittests backend for Ozone GBM Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/test/content_test_suite.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/test/content_test_suite.cc
diff --git a/content/test/content_test_suite.cc b/content/test/content_test_suite.cc
index 116bd0ce472064bf8445bc610e3bafd172f4f860..b7fab5bc77f15a7a55a01fa675ddf83a0971c683 100644
--- a/content/test/content_test_suite.cc
+++ b/content/test/content_test_suite.cc
@@ -35,6 +35,14 @@
#include "content/browser/android/in_process_surface_texture_manager.h"
#endif
+#if defined(USE_OZONE)
+#include "base/bind.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/thread.h"
+#include "ui/ozone/public/ozone_gpu_test_helper.h"
+#include "ui/ozone/public/ozone_platform.h"
+#endif
+
namespace content {
namespace {
@@ -60,6 +68,20 @@ class TestInitializationListener : public testing::EmptyTestEventListener {
} // namespace
+#if defined(USE_OZONE)
+struct ContentTestSuite::Impl {
+ Impl()
+ : ui_thread_("TestUIThread"),
+ gpu_ipc_thread_("TestGpuIpcThread"),
+ gpu_helper_(new ui::OzoneGpuTestHelper) {}
+ // On Ozone, the backend requires task runner.
+ base::MessageLoopForUI message_loop_;
+ base::Thread ui_thread_;
+ base::Thread gpu_ipc_thread_;
+ scoped_ptr<ui::OzoneGpuTestHelper> gpu_helper_;
vignatti (out of this project) 2015/06/24 22:16:17 would be better if we had the full GPU service in
dshwang 2015/06/25 05:38:40 reveman, what do you think about vignatti's opinio
+};
+#endif
+
ContentTestSuite::ContentTestSuite(int argc, char** argv)
: ContentTestSuiteBase(argc, argv) {
}
@@ -67,6 +89,17 @@ ContentTestSuite::ContentTestSuite(int argc, char** argv)
ContentTestSuite::~ContentTestSuite() {
}
+#if defined(USE_OZONE)
+void InitializeUI(base::WaitableEvent* done) {
+ ui::OzonePlatform::InitializeForUI();
+ done->Signal();
+}
+
+void Noop(base::WaitableEvent* done) {
+ done->Signal();
+}
+#endif
+
void ContentTestSuite::Initialize() {
#if defined(OS_MACOSX)
base::mac::ScopedNSAutoreleasePool autorelease_pool;
@@ -79,6 +112,22 @@ void ContentTestSuite::Initialize() {
gfx::InitDeviceScaleFactor(1.0f);
#endif
+ bool is_child_process = base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kTestChildProcess);
+#if defined(USE_OZONE)
+ if (!is_child_process) {
+ ozone_impl_.reset(new Impl());
+ ozone_impl_->ui_thread_.Start();
+
+ {
+ base::WaitableEvent done(false, false);
+ ozone_impl_->ui_thread_.task_runner()->PostTask(
+ FROM_HERE, base::Bind(&InitializeUI, &done));
+ done.Wait();
+ }
+ }
+#endif
+
ContentTestSuiteBase::Initialize();
{
ContentClient client;
@@ -89,8 +138,8 @@ void ContentTestSuite::Initialize() {
media::InitializeMediaLibrary();
// When running in a child process for Mac sandbox tests, the sandbox exists
// to initialize GL, so don't do it here.
- if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kTestChildProcess)) {
+ if (!is_child_process) {
+ // This thread is kind of GPU main thread.
gfx::GLSurface::InitializeOneOffForTests();
gpu::ApplyGpuDriverBugWorkarounds(base::CommandLine::ForCurrentProcess());
}
@@ -105,6 +154,25 @@ void ContentTestSuite::Initialize() {
#if defined(OS_MACOSX) && !defined(OS_IOS)
IOSurfaceManager::SetInstance(InProcessIOSurfaceManager::GetInstance());
#endif
+#if defined(USE_OZONE)
+ if (!is_child_process) {
+ // Separate GPU main thread (i.e. this thread) and GPU IPC thread because we
+ // must wait for all IPC for initialization done. Note here and each
+ // unittest are on the same stack, so there is no way to handle IPC before
+ // running each unittest.
+ ozone_impl_->gpu_ipc_thread_.Start();
+ ozone_impl_->gpu_helper_->Initialize(
+ ozone_impl_->ui_thread_.task_runner(),
+ ozone_impl_->gpu_ipc_thread_.task_runner());
+ {
+ base::WaitableEvent done(false, false);
+ ozone_impl_->gpu_ipc_thread_.task_runner()->PostTask(
+ FROM_HERE, base::Bind(&Noop, &done));
+ // Wait for all IPC for initialization done
+ done.Wait();
+ }
+ }
+#endif
}
} // namespace content
« no previous file with comments | « content/test/content_test_suite.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698