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

Unified Diff: chrome/browser/omnibox_performance_browsertest.cc

Issue 2300323003: Adding performance tests for HQP that represent importance of optimising HistoryItemsForTerms method (Closed)
Patch Set: Created 4 years, 3 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 | « no previous file | chrome/chrome_tests_unit.gypi » ('j') | chrome/test/base/ui_test_utils.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/omnibox_performance_browsertest.cc
diff --git a/chrome/browser/omnibox_performance_browsertest.cc b/chrome/browser/omnibox_performance_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2af8de92255b5ad28e3da8d65113d3503c012670
--- /dev/null
+++ b/chrome/browser/omnibox_performance_browsertest.cc
@@ -0,0 +1,163 @@
+// Copyright (c) 2016 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 <string>
+
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/history/history_service_factory.h"
+#include "chrome/browser/search_engines/template_url_service_factory.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/location_bar/location_bar.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/interactive_test_utils.h"
+#include "chrome/test/base/search_test_utils.h"
+#include "components/history/core/browser/history_service.h"
+#include "components/omnibox/browser/omnibox_popup_model.h"
+#include "components/omnibox/browser/omnibox_view.h"
+#include "components/search_engines/template_url_service.h"
+#include "testing/perf/scoped_histogram_result_printer.h"
+
+using base::Time;
+using base::TimeDelta;
+using history::HistoryService;
+
+namespace {
+
+constexpr char kPopularUrl[] = "http://long.popular_url_with.many_variations/";
+
+struct TestHistoryEntry {
+ std::string url;
+ std::string title;
+ int visit_count;
+ int typed_count;
+};
+
+void AddControllerHistograms(perf_test::ScopedHistogramResultPrinter* printer) {
+ DCHECK(printer);
+ std::string histogram_prefix("Omnibox.ProviderTime2.");
+ std::string measurement_prefix("ProviderTime2.");
+
+ printer->AddHistogramStrict(histogram_prefix + "HistoryURL",
+ measurement_prefix + "HistoryURL");
+ printer->AddHistogramStrict(histogram_prefix + "HistoryQuick",
+ measurement_prefix + "HistoryQuick");
+ printer->AddHistogramStrict("Omnibox.StartSearchToFirstResultsTime",
+ "StartSearchToFirstResultsTime");
+ printer->AddHistogramStrict("Omnibox.HistoryIDSetFromWords",
+ "HistoryIDSetFromWords");
+}
+
+std::string GenerateSymbolsToChooseFrom() {
+ std::string res;
+ auto append_chars = [&res](char from, char to) {
+ for (char ch = from; ch <= to; ++ch)
+ res += ch;
+ };
+ append_chars('a', 'z');
+ append_chars('A', 'Z');
+ append_chars('0', '9');
+ res += ",/=+?#";
+ return res;
+}
+
+std::string GenerateWeiredShortString(int seed) {
+ CR_DEFINE_STATIC_LOCAL(std::string, syms, (GenerateSymbolsToChooseFrom()));
+ std::string res;
+ // Much like translating to another calculation system.
+ for (auto i = std::hash<int>()(seed); i; i /= syms.size()) {
+ res += syms[i % syms.size()];
+ }
+ return res;
+}
+
+std::string GeneratePopularUrlVariation() {
+ static long iteration = 0;
+ std::string res = kPopularUrl;
+
+ constexpr int kShortStringsCount = 5;
+ for (int i = iteration; i < iteration + kShortStringsCount; ++i)
+ res += GenerateWeiredShortString(i);
+
+ ++iteration;
+ return res;
+}
+
+} // namespace
+
+class OmniboxPerformanceTest : public InProcessBrowserTest {
+ protected:
+ void SetUpOnMainThread() override;
+ void AddHistoryEntry(const TestHistoryEntry& entry, const Time& time);
+
+ OmniboxView* omnibox_view_ = nullptr;
+ AutocompleteController* ac_controller_ = nullptr;
+ HistoryService* history_service_ = nullptr;
+};
+
+void OmniboxPerformanceTest::SetUpOnMainThread() {
+ omnibox_view_ = browser()->window()->GetLocationBar()->GetOmniboxView();
+ ASSERT_TRUE(omnibox_view_);
+
+ ac_controller_ =
+ omnibox_view_->model()->popup_model()->autocomplete_controller();
+ ASSERT_TRUE(ac_controller_);
+
+ // History
+ {
+ Profile* profile = browser()->profile();
+
+ search_test_utils::WaitForTemplateURLServiceToLoad(
+ TemplateURLServiceFactory::GetForProfile(profile));
+
+ history_service_ = HistoryServiceFactory::GetForProfile(
+ profile, ServiceAccessType::EXPLICIT_ACCESS);
+ ASSERT_TRUE(history_service_);
+
+ ui_test_utils::WaitForHistoryToLoad(history_service_);
+ ASSERT_TRUE(history_service_->BackendLoaded());
+ }
+}
+
+void OmniboxPerformanceTest::AddHistoryEntry(const TestHistoryEntry& entry,
+ const Time& time) {
+ history_service_->AddPageWithDetails(
+ GURL(entry.url), base::UTF8ToUTF16(entry.title), entry.visit_count,
+ entry.typed_count, time, false, history::SOURCE_BROWSED);
+}
+
+IN_PROC_BROWSER_TEST_F(OmniboxPerformanceTest, DeletingPopularUrl) {
+ // Preparing histogram printer.
+ perf_test::ScopedHistogramResultPrinter scoped_printer(
+ perf_test::TestBasedPerfTestPrinter(::testing::UnitTest::GetInstance(),
+ "ms"));
+ AddControllerHistograms(&scoped_printer);
+
+ // Generating urls.
+ {
+ constexpr std::size_t kNumberOfUrls = 10000;
+ for (std::size_t i = 0; i < kNumberOfUrls; ++i) {
+ constexpr int kVisitCount = 1;
+ constexpr int kTypedCount = 1;
+ auto new_entry = GeneratePopularUrlVariation();
+ AddHistoryEntry(
+ {
+ new_entry, "Page: " + std::to_string(i), kVisitCount, kTypedCount,
+ },
+ base::Time::Now() - base::TimeDelta::FromHours(i));
+ }
+ }
+
+ const std::string test_url = GeneratePopularUrlVariation();
+
+ omnibox_view_->SetFocus();
+ omnibox_view_->SelectAll(true);
+ omnibox_view_->SetUserText(base::UTF8ToUTF16(test_url));
+ ui_test_utils::WaitForAutocompleteController(*ac_controller_);
+
+ for (size_t i = test_url.length(); i != 0; --i)
+ EXPECT_TRUE(ui_test_utils::SendKeyPressSync(browser(), ui::VKEY_BACK, false,
+ false, false, false));
+}
« no previous file with comments | « no previous file | chrome/chrome_tests_unit.gypi » ('j') | chrome/test/base/ui_test_utils.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698