diff options
Diffstat (limited to 'chromium/content/browser/gpu/gpu_functional_browsertest.cc')
-rw-r--r-- | chromium/content/browser/gpu/gpu_functional_browsertest.cc | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/chromium/content/browser/gpu/gpu_functional_browsertest.cc b/chromium/content/browser/gpu/gpu_functional_browsertest.cc new file mode 100644 index 00000000000..b3c2a57319f --- /dev/null +++ b/chromium/content/browser/gpu/gpu_functional_browsertest.cc @@ -0,0 +1,143 @@ +// Copyright (c) 2013 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/command_line.h" +#include "base/path_service.h" +#include "content/browser/gpu/gpu_process_host.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/common/content_paths.h" +#include "content/public/common/content_switches.h" +#include "content/public/common/url_constants.h" +#include "content/public/test/browser_test_utils.h" +#include "content/shell/shell.h" +#include "content/test/content_browser_test.h" +#include "content/test/content_browser_test_utils.h" + +namespace content { + +namespace { + void VerifyGPUProcessLaunch(bool* result) { + GpuProcessHost* host = + GpuProcessHost::Get(GpuProcessHost::GPU_PROCESS_KIND_SANDBOXED, + content::CAUSE_FOR_GPU_LAUNCH_NO_LAUNCH); + *result = !!host; + } +} + +class GpuFunctionalTest : public ContentBrowserTest { + protected: + virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { + base::FilePath test_dir; + ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &test_dir)); + gpu_test_dir_ = test_dir.AppendASCII("gpu"); + } + + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { + command_line->AppendSwitch(switches::kDisableGpuProcessPrelaunch); + } + + void VerifyHardwareAccelerated(const std::string& feature) { + NavigateToURL(shell(), + GURL(std::string(chrome::kChromeUIScheme). + append("://"). + append(kChromeUIGpuHost))); + + { + // Verify that the given feature is hardware accelerated.. + std::string javascript = + "function VerifyHardwareAccelerated(feature) {" + " var list = document.querySelector(\".feature-status-list\");" + " for (var i=0; i < list.childElementCount; i++) {" + " var span_list = list.children[i].getElementsByTagName('span');" + " var feature_str = span_list[0].textContent;" + " var value_str = span_list[1].textContent;" + " if ((feature_str == feature) &&" + " (value_str == 'Hardware accelerated')) {" + " domAutomationController.send(\"success\");" + " }" + " }" + "};"; + javascript.append("VerifyHardwareAccelerated(\""); + javascript.append(feature); + javascript.append("\");"); + std::string result; + EXPECT_TRUE(ExecuteScriptAndExtractString(shell()->web_contents(), + javascript, + &result)); + EXPECT_EQ(result, "success"); + } + } + + void VerifyGPUProcessOnPage(std::string filename, bool wait) { + Shell::Initialize(); + ASSERT_TRUE(test_server()->Start()); + DOMMessageQueue message_queue; + + std::string url("files/gpu/"); + GURL full_url = test_server()->GetURL(url.append(filename)); + NavigateToURL(shell(), full_url); + + if (wait) { + std::string result_string; + ASSERT_TRUE(message_queue.WaitForMessage(&result_string)); + } + + bool result = false; + BrowserThread::PostTaskAndReply( + BrowserThread::IO, + FROM_HERE, + base::Bind(&VerifyGPUProcessLaunch, &result), + base::MessageLoop::QuitClosure()); + base::MessageLoop::current()->Run(); + EXPECT_TRUE(result); + } + + base::FilePath gpu_test_dir_; +}; + +#if defined(OS_LINUX) && !defined(NDEBUG) +// http://crbug.com/254724 +#define IF_NOT_DEBUG_LINUX(x) DISABLED_ ## x +#else +#define IF_NOT_DEBUG_LINUX(x) x +#endif + +IN_PROC_BROWSER_TEST_F( + GpuFunctionalTest, + IF_NOT_DEBUG_LINUX(MANUAL_TestFeatureHardwareAccelerated)) { + VerifyHardwareAccelerated("WebGL: "); + VerifyHardwareAccelerated("Canvas: "); + VerifyHardwareAccelerated("3D CSS: "); +} + +// Verify that gpu process is spawned in webgl example. +IN_PROC_BROWSER_TEST_F(GpuFunctionalTest, + IF_NOT_DEBUG_LINUX(MANUAL_TestWebGL)) { + VerifyGPUProcessOnPage("functional_webgl.html", false); +} + +// Verify that gpu process is spawned when viewing a 2D canvas. +IN_PROC_BROWSER_TEST_F(GpuFunctionalTest, + IF_NOT_DEBUG_LINUX(MANUAL_Test2dCanvas)) { + VerifyGPUProcessOnPage("functional_canvas_demo.html", false); +} + +// Verify that gpu process is spawned when viewing a 3D CSS page. +IN_PROC_BROWSER_TEST_F(GpuFunctionalTest, + IF_NOT_DEBUG_LINUX(MANUAL_Test3dCss)) { + VerifyGPUProcessOnPage("functional_3d_css.html", false); +} + +#if defined(OS_LINUX) +// crbug.com/257109 +#define MANUAL_TestGpuWithVideo DISABLED_TestGpuWithVideo +#endif + +// Verify that gpu process is started when viewing video. +IN_PROC_BROWSER_TEST_F(GpuFunctionalTest, + MANUAL_TestGpuWithVideo) { + VerifyGPUProcessOnPage("functional_video.html", true); +} + +} // namespace content |