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

Unified Diff: chrome/test/ui/dromaeo_benchmark_uitest.cc

Issue 274020: Add UI test for Dromaeo benchmark. (Closed)
Patch Set: Created 11 years, 2 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 | « chrome/test/data/dromaeo/webrunner.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/ui/dromaeo_benchmark_uitest.cc
diff --git a/chrome/test/ui/dromaeo_benchmark_uitest.cc b/chrome/test/ui/dromaeo_benchmark_uitest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..74d853514b06b077144ca44f291ecc0a508ff959
--- /dev/null
+++ b/chrome/test/ui/dromaeo_benchmark_uitest.cc
@@ -0,0 +1,156 @@
+// Copyright (c) 2009 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/file_path.h"
+#include "base/file_util.h"
+#include "base/path_service.h"
+#include "base/string_util.h"
+#include "base/values.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/json_value_serializer.h"
+#include "chrome/test/automation/tab_proxy.h"
+#include "chrome/test/ui/javascript_test_util.h"
+#include "chrome/test/ui/ui_test.h"
+#include "googleurl/src/gurl.h"
+#include "net/base/net_util.h"
+
+namespace {
+
+static const FilePath::CharType kStartFile[] =
+ FILE_PATH_LITERAL("index.html?dom|jslib&automated");
+
+const wchar_t kRunDromaeo[] = L"run-dromaeo-benchmark";
+
+class DromaeoTest : public UITest {
+ public:
+ typedef std::map<std::string, std::string> ResultsMap;
+
+ DromaeoTest() : reference_(false) {
+ dom_automation_enabled_ = true;
+ show_window_ = true;
+ }
+
+ void RunTest() {
+ FilePath::StringType start_file(kStartFile);
+ FilePath test_path = GetDromaeoDir();
+ test_path = test_path.Append(start_file);
+ GURL test_url(net::FilePathToFileURL(test_path));
+
+ scoped_refptr<TabProxy> tab(GetActiveTab());
+ tab->NavigateToURL(test_url);
+
+ // Wait for the test to finish.
+ ASSERT_TRUE(WaitUntilTestCompletes(tab.get(), test_url));
+
+ PrintResults(tab.get());
+ }
+
+ protected:
+ bool reference_; // True if this is a reference build.
+
+ private:
+ // Return the path to the dromaeo benchmark directory on the local filesystem.
+ FilePath GetDromaeoDir() {
+ FilePath test_dir;
+ PathService::Get(chrome::DIR_TEST_DATA, &test_dir);
+ return test_dir.AppendASCII("dromaeo");
+ }
+
+ bool WaitUntilTestCompletes(TabProxy* tab, const GURL& test_url) {
+ return WaitUntilCookieValue(tab, test_url, "__done", 1000,
+ UITest::test_timeout_ms(), "1");
+ }
+
+ bool GetScore(TabProxy* tab, std::string* score) {
+ std::wstring score_wide;
+ bool succeeded = tab->ExecuteAndExtractString(L"",
+ L"window.domAutomationController.send(automation.GetScore());",
+ &score_wide);
+
+ // Note that we don't use ASSERT_TRUE here (and in some other places) as it
+ // doesn't work inside a function with a return type other than void.
+ EXPECT_TRUE(succeeded);
+ if (!succeeded)
+ return false;
+
+ score->assign(WideToUTF8(score_wide));
+ return true;
+ }
+
+ bool GetResults(TabProxy* tab, ResultsMap* results) {
+ std::wstring json_wide;
+ bool succeeded = tab->ExecuteAndExtractString(L"",
+ L"window.domAutomationController.send("
+ L" JSON.stringify(automation.GetResults()));",
+ &json_wide);
+
+ EXPECT_TRUE(succeeded);
+ if (!succeeded)
+ return false;
+
+ std::string json = WideToUTF8(json_wide);
+ return JsonDictionaryToMap(json, results);
+ }
+
+ void PrintResults(TabProxy* tab) {
+ std::string score;
+ ASSERT_TRUE(GetScore(tab, &score));
+
+ ResultsMap results;
+ ASSERT_TRUE(GetResults(tab, &results));
+
+ std::string trace_name = reference_ ? "score_ref" : "score";
+ std::string unit_name = "runs/s";
+
+ PrintResult("score", "", trace_name, score, unit_name, true);
+
+ ResultsMap::const_iterator it = results.begin();
+ for (; it != results.end(); ++it)
+ PrintResult(it->first, "", trace_name, it->second, unit_name, false);
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(DromaeoTest);
+};
+
+class DromaeoReferenceTest : public DromaeoTest {
+ public:
+ DromaeoReferenceTest() : DromaeoTest() {
+ reference_ = true;
+ }
+
+ // Override the browser directory that is used by UITest::SetUp to cause it
+ // to use the reference build instead.
+ void SetUp() {
+ FilePath dir;
+ PathService::Get(chrome::DIR_TEST_TOOLS, &dir);
+ dir = dir.AppendASCII("reference_build");
+#if defined(OS_WIN)
+ dir = dir.AppendASCII("chrome");
+#elif defined(OS_LINUX)
+ dir = dir.AppendASCII("chrome_linux");
+#elif defined(OS_MACOSX)
+ dir = dir.AppendASCII("chrome_mac");
+#endif
+ browser_directory_ = dir;
+ UITest::SetUp();
+ }
+};
+
+TEST_F(DromaeoTest, Perf) {
+ if (!CommandLine::ForCurrentProcess()->HasSwitch(kRunDromaeo))
+ return;
+
+ RunTest();
+}
+
+TEST_F(DromaeoReferenceTest, Perf) {
+ if (!CommandLine::ForCurrentProcess()->HasSwitch(kRunDromaeo))
+ return;
+
+ RunTest();
+}
+
+} // namespace
« no previous file with comments | « chrome/test/data/dromaeo/webrunner.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698