Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/file_util.h" | 5 #include "base/file_util.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/test/trace_event_analyzer.h" | 8 #include "base/test/trace_event_analyzer.h" |
| 9 #include "base/version.h" | 9 #include "base/version.h" |
| 10 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" |
| 11 #include "chrome/common/chrome_paths.h" | 11 #include "chrome/common/chrome_paths.h" |
| 12 #include "chrome/test/base/in_process_browser_test.h" | 12 #include "chrome/test/base/in_process_browser_test.h" |
| 13 #include "chrome/test/base/tracing.h" | 13 #include "chrome/test/base/tracing.h" |
| 14 #include "chrome/test/base/ui_test_utils.h" | 14 #include "chrome/test/base/ui_test_utils.h" |
| 15 #include "content/browser/gpu/gpu_blacklist.h" | 15 #include "content/browser/gpu/gpu_blacklist.h" |
| 16 #include "content/browser/gpu/gpu_data_manager.h" | 16 #include "content/browser/gpu/gpu_data_manager.h" |
| 17 #include "net/base/net_util.h" | 17 #include "net/base/net_util.h" |
| 18 | 18 |
| 19 namespace { | 19 namespace { |
| 20 | 20 |
| 21 typedef uint32 GpuResultFlags; | |
| 22 #define EXPECT_NO_GPU_PROCESS GpuResultFlags(0) | |
| 23 #define EXPECT_GPU_PROCESS GpuResultFlags(1<<0) | |
| 24 #define EXPECT_GPU_SWAP_BUFFERS GpuResultFlags(1<<1) | |
| 25 | |
| 21 class GpuFeatureTest : public InProcessBrowserTest { | 26 class GpuFeatureTest : public InProcessBrowserTest { |
| 22 public: | 27 public: |
| 23 GpuFeatureTest() {} | 28 GpuFeatureTest() {} |
| 24 | 29 |
| 25 virtual void SetUpCommandLine(CommandLine* command_line) { | 30 virtual void SetUpCommandLine(CommandLine* command_line) { |
| 26 // This enables DOM automation for tab contents. | 31 // This enables DOM automation for tab contents. |
| 27 EnableDOMAutomation(); | 32 EnableDOMAutomation(); |
| 28 } | 33 } |
| 29 | 34 |
| 30 void SetupBlacklist(const std::string& json_blacklist) { | 35 void SetupBlacklist(const std::string& json_blacklist) { |
| 31 scoped_ptr<Version> os_version(Version::GetVersionFromString("1.0")); | 36 scoped_ptr<Version> os_version(Version::GetVersionFromString("1.0")); |
| 32 GpuBlacklist* blacklist = new GpuBlacklist("1.0"); | 37 GpuBlacklist* blacklist = new GpuBlacklist("1.0"); |
| 33 | 38 |
| 34 ASSERT_TRUE(blacklist->LoadGpuBlacklist( | 39 ASSERT_TRUE(blacklist->LoadGpuBlacklist( |
| 35 json_blacklist, GpuBlacklist::kAllOs)); | 40 json_blacklist, GpuBlacklist::kAllOs)); |
| 36 GpuDataManager::GetInstance()->SetBuiltInGpuBlacklist(blacklist); | 41 GpuDataManager::GetInstance()->SetBuiltInGpuBlacklist(blacklist); |
| 37 } | 42 } |
| 38 | 43 |
| 39 void RunTest(const FilePath& url, bool expect_gpu_process) { | 44 void RunTest(const FilePath& url, GpuResultFlags expectations) { |
| 40 using namespace trace_analyzer; | 45 using namespace trace_analyzer; |
| 41 | 46 |
| 47 bool expect_gpu_process = (expectations & EXPECT_GPU_PROCESS); | |
| 48 bool expect_gpu_swap = (expectations & EXPECT_GPU_SWAP_BUFFERS); | |
| 49 | |
| 42 FilePath test_path; | 50 FilePath test_path; |
| 43 PathService::Get(chrome::DIR_TEST_DATA, &test_path); | 51 PathService::Get(chrome::DIR_TEST_DATA, &test_path); |
| 44 test_path = test_path.Append(FILE_PATH_LITERAL("gpu")); | 52 test_path = test_path.Append(FILE_PATH_LITERAL("gpu")); |
| 45 test_path = test_path.Append(url); | 53 test_path = test_path.Append(url); |
| 46 | 54 |
| 47 ASSERT_TRUE(file_util::PathExists(test_path)) | 55 ASSERT_TRUE(file_util::PathExists(test_path)) |
| 48 << "Missing test file: " << test_path.value(); | 56 << "Missing test file: " << test_path.value(); |
| 49 | 57 |
| 50 ASSERT_TRUE(tracing::BeginTracing("test_gpu")); | 58 ASSERT_TRUE(tracing::BeginTracing("test_gpu")); |
| 51 | 59 |
| 52 ui_test_utils::DOMMessageQueue message_queue; | 60 ui_test_utils::DOMMessageQueue message_queue; |
| 53 // Have to use a new tab for the blacklist to work. | 61 // Have to use a new tab for the blacklist to work. |
| 54 ui_test_utils::NavigateToURLWithDisposition( | 62 ui_test_utils::NavigateToURLWithDisposition( |
| 55 browser(), net::FilePathToFileURL(test_path), NEW_FOREGROUND_TAB, | 63 browser(), net::FilePathToFileURL(test_path), NEW_FOREGROUND_TAB, |
| 56 ui_test_utils::BROWSER_TEST_NONE); | 64 ui_test_utils::BROWSER_TEST_NONE); |
| 57 // Wait for message indicating the test has finished running. | 65 // Wait for message indicating the test has finished running. |
| 58 ASSERT_TRUE(message_queue.WaitForMessage(NULL)); | 66 ASSERT_TRUE(message_queue.WaitForMessage(NULL)); |
| 59 | 67 |
| 60 std::string json_events; | 68 std::string json_events; |
| 61 ASSERT_TRUE(tracing::EndTracing(&json_events)); | 69 ASSERT_TRUE(tracing::EndTracing(&json_events)); |
| 62 | 70 |
| 63 scoped_ptr<TraceAnalyzer> analyzer(TraceAnalyzer::Create(json_events)); | 71 scoped_ptr<TraceAnalyzer> analyzer(TraceAnalyzer::Create(json_events)); |
| 64 EXPECT_EQ(expect_gpu_process, analyzer->FindOneEvent( | 72 EXPECT_EQ(expect_gpu_process, analyzer->FindOneEvent( |
| 65 Query(EVENT_NAME) == Query::String("GpuProcessLaunched")) != NULL); | 73 Query(EVENT_NAME) == Query::String("GpuProcessLaunched")) != NULL); |
| 74 if (expect_gpu_swap) { | |
| 75 EXPECT_TRUE(analyzer->FindOneEvent( | |
| 76 Query(EVENT_NAME) == Query::String("SwapBuffers")) != NULL); | |
| 77 } | |
|
Zhenyao Mo
2011/11/30 18:58:47
This should match the previous line EXPECT_EQ styl
jbates
2011/11/30 20:21:52
Done.
| |
| 66 } | 78 } |
| 67 }; | 79 }; |
| 68 | 80 |
| 69 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, AcceleratedCompositingAllowed) { | 81 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, AcceleratedCompositingAllowed) { |
| 70 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); | 82 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); |
| 71 EXPECT_EQ(flags.flags(), 0u); | 83 EXPECT_EQ(flags.flags(), 0u); |
| 72 | 84 |
| 73 const bool expect_gpu_process = true; | |
| 74 const FilePath url(FILE_PATH_LITERAL("feature_compositing.html")); | 85 const FilePath url(FILE_PATH_LITERAL("feature_compositing.html")); |
| 75 RunTest(url, expect_gpu_process); | 86 RunTest(url, EXPECT_GPU_PROCESS | EXPECT_GPU_SWAP_BUFFERS); |
| 76 } | 87 } |
| 77 | 88 |
| 78 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, AcceleratedCompositingBlocked) { | 89 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, AcceleratedCompositingBlocked) { |
| 79 const std::string json_blacklist = | 90 const std::string json_blacklist = |
| 80 "{\n" | 91 "{\n" |
| 81 " \"name\": \"gpu blacklist\",\n" | 92 " \"name\": \"gpu blacklist\",\n" |
| 82 " \"version\": \"1.0\",\n" | 93 " \"version\": \"1.0\",\n" |
| 83 " \"entries\": [\n" | 94 " \"entries\": [\n" |
| 84 " {\n" | 95 " {\n" |
| 85 " \"id\": 1,\n" | 96 " \"id\": 1,\n" |
| 86 " \"blacklist\": [\n" | 97 " \"blacklist\": [\n" |
| 87 " \"accelerated_compositing\"\n" | 98 " \"accelerated_compositing\"\n" |
| 88 " ]\n" | 99 " ]\n" |
| 89 " }\n" | 100 " }\n" |
| 90 " ]\n" | 101 " ]\n" |
| 91 "}"; | 102 "}"; |
| 92 SetupBlacklist(json_blacklist); | 103 SetupBlacklist(json_blacklist); |
| 93 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); | 104 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); |
| 94 EXPECT_EQ( | 105 EXPECT_EQ( |
| 95 flags.flags(), | 106 flags.flags(), |
| 96 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureAcceleratedCompositing)); | 107 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureAcceleratedCompositing)); |
| 97 | 108 |
| 98 const bool expect_gpu_process = false; | |
| 99 const FilePath url(FILE_PATH_LITERAL("feature_compositing.html")); | 109 const FilePath url(FILE_PATH_LITERAL("feature_compositing.html")); |
| 100 RunTest(url, expect_gpu_process); | 110 RunTest(url, EXPECT_NO_GPU_PROCESS); |
| 101 } | 111 } |
| 102 | 112 |
| 103 #if defined(OS_LINUX) | 113 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, FLAKY_WebGLAllowed) { |
| 104 // http://crbug.com/104142 | |
| 105 #define MAYBE_WebGLAllowed DISABLED_WebGLAllowed | |
| 106 #else | |
| 107 #define MAYBE_WebGLAllowed WebGLAllowed | |
| 108 #endif | |
|
jbates
2011/11/30 02:24:35
Let's see if this works now...
| |
| 109 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, MAYBE_WebGLAllowed) { | |
| 110 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); | 114 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); |
| 111 EXPECT_EQ(flags.flags(), 0u); | 115 EXPECT_EQ(flags.flags(), 0u); |
| 112 | 116 |
| 113 const bool expect_gpu_process = true; | |
| 114 const FilePath url(FILE_PATH_LITERAL("feature_webgl.html")); | 117 const FilePath url(FILE_PATH_LITERAL("feature_webgl.html")); |
| 115 RunTest(url, expect_gpu_process); | 118 RunTest(url, EXPECT_GPU_PROCESS | EXPECT_GPU_SWAP_BUFFERS); |
| 116 } | 119 } |
| 117 | 120 |
| 118 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, WebGLBlocked) { | 121 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, WebGLBlocked) { |
| 119 const std::string json_blacklist = | 122 const std::string json_blacklist = |
| 120 "{\n" | 123 "{\n" |
| 121 " \"name\": \"gpu blacklist\",\n" | 124 " \"name\": \"gpu blacklist\",\n" |
| 122 " \"version\": \"1.0\",\n" | 125 " \"version\": \"1.0\",\n" |
| 123 " \"entries\": [\n" | 126 " \"entries\": [\n" |
| 124 " {\n" | 127 " {\n" |
| 125 " \"id\": 1,\n" | 128 " \"id\": 1,\n" |
| 126 " \"blacklist\": [\n" | 129 " \"blacklist\": [\n" |
| 127 " \"webgl\"\n" | 130 " \"webgl\"\n" |
| 128 " ]\n" | 131 " ]\n" |
| 129 " }\n" | 132 " }\n" |
| 130 " ]\n" | 133 " ]\n" |
| 131 "}"; | 134 "}"; |
| 132 SetupBlacklist(json_blacklist); | 135 SetupBlacklist(json_blacklist); |
| 133 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); | 136 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); |
| 134 EXPECT_EQ( | 137 EXPECT_EQ( |
| 135 flags.flags(), | 138 flags.flags(), |
| 136 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureWebgl)); | 139 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureWebgl)); |
| 137 | 140 |
| 138 const bool expect_gpu_process = false; | |
| 139 const FilePath url(FILE_PATH_LITERAL("feature_webgl.html")); | 141 const FilePath url(FILE_PATH_LITERAL("feature_webgl.html")); |
| 140 RunTest(url, expect_gpu_process); | 142 RunTest(url, EXPECT_NO_GPU_PROCESS); |
| 141 } | 143 } |
| 142 | 144 |
| 143 #if defined(OS_LINUX) | 145 #if defined(OS_LINUX) |
| 144 // http://crbug.com/104142 | 146 // http://crbug.com/104142 |
| 145 #define Canvas2DAllowed FLAKY_Canvas2DAllowed | 147 #define Canvas2DAllowed FLAKY_Canvas2DAllowed |
| 146 #endif | 148 #endif |
| 147 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, Canvas2DAllowed) { | 149 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, Canvas2DAllowed) { |
| 148 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); | 150 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); |
| 149 EXPECT_EQ(flags.flags(), 0u); | 151 EXPECT_EQ(flags.flags(), 0u); |
| 150 | 152 |
| 151 #if defined(OS_MACOSX) | 153 #if defined(OS_MACOSX) |
| 152 // TODO(zmo): enabling Mac when skia backend is enabled. | 154 // TODO(zmo): enabling Mac when skia backend is enabled. |
| 153 const bool expect_gpu_process = false; | 155 const GpuResultFlags expectations = EXPECT_NO_GPU_PROCESS; |
| 154 #else | 156 #else |
| 155 const bool expect_gpu_process = true; | 157 const GpuResultFlags expectations = EXPECT_GPU_PROCESS | |
| 158 EXPECT_GPU_SWAP_BUFFERS; | |
| 156 #endif | 159 #endif |
| 157 const FilePath url(FILE_PATH_LITERAL("feature_canvas2d.html")); | 160 const FilePath url(FILE_PATH_LITERAL("feature_canvas2d.html")); |
| 158 RunTest(url, expect_gpu_process); | 161 RunTest(url, expectations); |
| 159 } | 162 } |
| 160 | 163 |
| 161 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, Canvas2DBlocked) { | 164 IN_PROC_BROWSER_TEST_F(GpuFeatureTest, Canvas2DBlocked) { |
| 162 const std::string json_blacklist = | 165 const std::string json_blacklist = |
| 163 "{\n" | 166 "{\n" |
| 164 " \"name\": \"gpu blacklist\",\n" | 167 " \"name\": \"gpu blacklist\",\n" |
| 165 " \"version\": \"1.0\",\n" | 168 " \"version\": \"1.0\",\n" |
| 166 " \"entries\": [\n" | 169 " \"entries\": [\n" |
| 167 " {\n" | 170 " {\n" |
| 168 " \"id\": 1,\n" | 171 " \"id\": 1,\n" |
| 169 " \"blacklist\": [\n" | 172 " \"blacklist\": [\n" |
| 170 " \"accelerated_2d_canvas\"\n" | 173 " \"accelerated_2d_canvas\"\n" |
| 171 " ]\n" | 174 " ]\n" |
| 172 " }\n" | 175 " }\n" |
| 173 " ]\n" | 176 " ]\n" |
| 174 "}"; | 177 "}"; |
| 175 SetupBlacklist(json_blacklist); | 178 SetupBlacklist(json_blacklist); |
| 176 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); | 179 GpuFeatureFlags flags = GpuDataManager::GetInstance()->GetGpuFeatureFlags(); |
| 177 EXPECT_EQ( | 180 EXPECT_EQ( |
| 178 flags.flags(), | 181 flags.flags(), |
| 179 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureAccelerated2dCanvas)); | 182 static_cast<uint32>(GpuFeatureFlags::kGpuFeatureAccelerated2dCanvas)); |
| 180 | 183 |
| 181 const bool expect_gpu_process = false; | |
| 182 const FilePath url(FILE_PATH_LITERAL("feature_canvas2d.html")); | 184 const FilePath url(FILE_PATH_LITERAL("feature_canvas2d.html")); |
| 183 RunTest(url, expect_gpu_process); | 185 RunTest(url, EXPECT_NO_GPU_PROCESS); |
| 184 } | 186 } |
| 185 | 187 |
| 186 } // namespace anonymous | 188 } // namespace anonymous |
| 187 | 189 |
| OLD | NEW |