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

Unified Diff: chrome/browser/media/chrome_webrtc_perf_browsertest.cc

Issue 294053002: Split regular and perf WebRTC browser tests, remove CPU test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removing js files that accidentally got uploaded Created 6 years, 7 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
Index: chrome/browser/media/chrome_webrtc_perf_browsertest.cc
diff --git a/chrome/browser/media/chrome_webrtc_perf_browsertest.cc b/chrome/browser/media/chrome_webrtc_perf_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..98f3e3786a7ff5f9ccaf0b07e0f099980f812ce5
--- /dev/null
+++ b/chrome/browser/media/chrome_webrtc_perf_browsertest.cc
@@ -0,0 +1,133 @@
+// Copyright 2014 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_util.h"
+#include "base/json/json_reader.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/string_split.h"
+#include "base/strings/stringprintf.h"
+#include "base/test/test_timeouts.h"
+#include "base/time/time.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/media/webrtc_browsertest_base.h"
+#include "chrome/browser/media/webrtc_browsertest_common.h"
+#include "chrome/browser/media/webrtc_browsertest_perf.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_tabstrip.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/test/browser_test_utils.h"
+#include "media/base/media_switches.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "testing/perf/perf_test.h"
+
+static const char kMainWebrtcTestHtmlPage[] =
+ "/webrtc/webrtc_jsep01_test.html";
+
+// Performance browsertest for WebRTC. This test is manual since it takes long
+// to execute and requires the reference files provided by the webrtc.DEPS
+// solution (which is only available on WebRTC internal bots).
+class WebRtcPerfBrowserTest : public WebRtcTestBase {
+ public:
+ virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
+ DetectErrorsInJavaScript(); // Look for errors in our rather complex js.
+ }
+
+ virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+ // Ensure the infobar is enabled, since we expect that in this test.
+ EXPECT_FALSE(command_line->HasSwitch(switches::kUseFakeUIForMediaStream));
+
+ // Play a suitable, somewhat realistic video file.
+ base::FilePath input_video = test::GetReferenceFilesDir()
+ .Append(test::kReferenceFileName360p)
+ .AddExtension(test::kY4mFileExtension);
+ command_line->AppendSwitchPath(switches::kUseFileForFakeVideoCapture,
+ input_video);
+ command_line->AppendSwitch(switches::kUseFakeDeviceForMediaStream);
+ }
+
+ // Tries to extract data from peerConnectionDataStore in the webrtc-internals
+ // tab. The caller owns the parsed data. Returns NULL on failure.
+ base::DictionaryValue* GetWebrtcInternalsData(
+ content::WebContents* webrtc_internals_tab) {
+ std::string all_stats_json = ExecuteJavascript(
+ "window.domAutomationController.send("
+ " JSON.stringify(peerConnectionDataStore));",
+ webrtc_internals_tab);
+
+ base::Value* parsed_json = base::JSONReader::Read(all_stats_json);
+ base::DictionaryValue* result;
+ if (parsed_json && parsed_json->GetAsDictionary(&result))
+ return result;
+
+ return NULL;
+ }
+
+ const base::DictionaryValue* GetDataOnFirstPeerConnection(
+ const base::DictionaryValue* all_data) {
+ base::DictionaryValue::Iterator iterator(*all_data);
+
+ const base::DictionaryValue* result;
+ if (!iterator.IsAtEnd() && iterator.value().GetAsDictionary(&result))
+ return result;
+
+ return NULL;
+ }
+};
+
+// This is manual for its long execution time.
+IN_PROC_BROWSER_TEST_F(WebRtcPerfBrowserTest,
+ MANUAL_RunsAudioVideoCall60SecsAndLogsInternalMetrics) {
+ if (OnWinXp()) return;
+
+ ASSERT_TRUE(test::HasReferenceFilesInCheckout());
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+
+ ASSERT_GE(TestTimeouts::action_max_timeout().InSeconds(), 100) <<
+ "This is a long-running test; you must specify "
+ "--ui-test-action-max-timeout to have a value of at least 100000.";
+
+ content::WebContents* left_tab =
+ OpenTestPageAndGetUserMediaInNewTab(kMainWebrtcTestHtmlPage);
+ content::WebContents* right_tab =
+ OpenTestPageAndGetUserMediaInNewTab(kMainWebrtcTestHtmlPage);
+
+ SetupPeerconnectionWithLocalStream(left_tab);
+ SetupPeerconnectionWithLocalStream(right_tab);
+
+ NegotiateCall(left_tab, right_tab);
+
+ StartDetectingVideo(left_tab, "remote-view");
+ StartDetectingVideo(right_tab, "remote-view");
+
+ WaitForVideoToPlay(left_tab);
+ WaitForVideoToPlay(right_tab);
+
+ // Let values stabilize, bandwidth ramp up, etc.
+ test::SleepInJavascript(left_tab, 60000);
+
+ // Start measurements.
+ chrome::AddTabAt(browser(), GURL(), -1, true);
+ ui_test_utils::NavigateToURL(browser(), GURL("chrome://webrtc-internals"));
+ content::WebContents* webrtc_internals_tab =
+ browser()->tab_strip_model()->GetActiveWebContents();
+
+ test::SleepInJavascript(left_tab, 10000);
+
+ scoped_ptr<base::DictionaryValue> all_data(
+ GetWebrtcInternalsData(webrtc_internals_tab));
+ ASSERT_TRUE(all_data.get() != NULL);
+
+ const base::DictionaryValue* first_pc_dict =
+ GetDataOnFirstPeerConnection(all_data.get());
+ ASSERT_TRUE(first_pc_dict != NULL);
+ test::PrintBweForVideoMetrics(*first_pc_dict);
+ test::PrintMetricsForAllStreams(*first_pc_dict);
+
+ HangUp(left_tab);
+ HangUp(right_tab);
+}

Powered by Google App Engine
This is Rietveld 408576698