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

Unified Diff: ios/chrome/browser/test/perf_test_with_bvc_ios.mm

Issue 2585233003: Upstream Chrome on iOS source code [2/11]. (Closed)
Patch Set: Created 4 years 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: ios/chrome/browser/test/perf_test_with_bvc_ios.mm
diff --git a/ios/chrome/browser/test/perf_test_with_bvc_ios.mm b/ios/chrome/browser/test/perf_test_with_bvc_ios.mm
new file mode 100644
index 0000000000000000000000000000000000000000..d0886cf6323521b180f73ab50dd1f2421c65391b
--- /dev/null
+++ b/ios/chrome/browser/test/perf_test_with_bvc_ios.mm
@@ -0,0 +1,169 @@
+// Copyright 2012 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 "ios/chrome/browser/test/perf_test_with_bvc_ios.h"
+
+#import <UIKit/UIKit.h>
+
+#include "base/memory/ptr_util.h"
+#include "base/strings/sys_string_conversions.h"
+#include "components/bookmarks/test/bookmark_test_helpers.h"
+#include "ios/chrome/browser/autocomplete/autocomplete_classifier_factory.h"
+#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "ios/chrome/browser/search_engines/template_url_service_factory.h"
+#import "ios/chrome/browser/sessions/session_service.h"
+#import "ios/chrome/browser/sessions/session_window.h"
+#import "ios/chrome/browser/tabs/tab_model.h"
+#import "ios/chrome/browser/ui/browser_view_controller.h"
+#import "ios/chrome/browser/ui/browser_view_controller_dependency_factory.h"
+#import "ios/chrome/browser/ui/preload_controller.h"
+#import "ios/chrome/browser/web/chrome_web_client.h"
+#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
+
+// Subclass of PrerenderController so it isn't actually used. Using a mock for
+// this makes cleanup on shutdown simpler, by minimizing the number of profile
+// observers registered with the profiles. The profile observers have to be
+// deallocated before the profiles themselves, but in practice it is very hard
+// to ensure that happens. Also, for performance testing, not having the
+// PrerenderController makes the test far simpler to analyze.
+namespace {
+static GURL emptyGurl_ = GURL("foo", 3, url::Parsed(), false);
+}
+
+@interface TestPreloadController : PreloadController
+- (Tab*)releasePrerenderContents;
+@end
+
+@implementation TestPreloadController
+
+- (Tab*)releasePrerenderContents {
+ return nil;
+}
+
+- (id<PreloadControllerDelegate>)delegate {
+ return nil;
+}
+
+- (GURL)prerenderedURL {
+ return emptyGurl_;
+}
+@end
+
+// Subclass the factory that creates the PreloadController for BVC to return
+// the TestPrerenderController.
+@interface TestBVCDependencyFactory : BrowserViewControllerDependencyFactory
+- (PreloadController*)newPreloadController;
+@end
+
+@implementation TestBVCDependencyFactory
+- (PreloadController*)newPreloadController {
+ return [[TestPreloadController alloc] init];
+}
+@end
+
+PerfTestWithBVC::PerfTestWithBVC(std::string testGroup)
+ : PerfTest(testGroup),
+ slow_teardown_(false),
+ web_client_(base::MakeUnique<ChromeWebClient>()),
+ provider_(ios::CreateChromeBrowserProvider()) {}
+
+PerfTestWithBVC::PerfTestWithBVC(std::string testGroup,
+ std::string firstLabel,
+ std::string averageLabel,
+ bool isWaterfall,
+ bool verbose,
+ bool slowTeardown,
+ int repeat)
+ : PerfTest(testGroup,
+ firstLabel,
+ averageLabel,
+ isWaterfall,
+ verbose,
+ repeat),
+ slow_teardown_(slowTeardown),
+ web_client_(base::MakeUnique<ChromeWebClient>()),
+ provider_(ios::CreateChromeBrowserProvider()) {}
+
+PerfTestWithBVC::~PerfTestWithBVC() {}
+
+void PerfTestWithBVC::SetUp() {
+ PerfTest::SetUp();
+
+ // Set up the ChromeBrowserState instances.
+ TestChromeBrowserState::Builder test_cbs_builder;
+ test_cbs_builder.AddTestingFactory(
+ ios::TemplateURLServiceFactory::GetInstance(),
+ ios::TemplateURLServiceFactory::GetDefaultFactory());
+ test_cbs_builder.AddTestingFactory(
+ ios::AutocompleteClassifierFactory::GetInstance(),
+ ios::AutocompleteClassifierFactory::GetDefaultFactory());
+ chrome_browser_state_ = test_cbs_builder.Build();
+ chrome_browser_state_->CreateBookmarkModel(false);
+ bookmarks::test::WaitForBookmarkModelToLoad(
+ ios::BookmarkModelFactory::GetForBrowserState(
+ chrome_browser_state_.get()));
+ ASSERT_TRUE(chrome_browser_state_->CreateHistoryService(false));
+
+ // Force creation of AutocompleteClassifier instance.
+ ios::AutocompleteClassifierFactory::GetForBrowserState(
+ chrome_browser_state_.get());
+
+ // Use the session to create a window which will contain the tab models.
+ SessionWindowIOS* sessionWindow = [[SessionServiceIOS sharedService]
+ loadWindowForBrowserState:chrome_browser_state_.get()];
+
+ // Tab models. The off-the-record (OTR) tab model is required for the stack
+ // view controller, which is created in OpenStackView().
+ tab_model_.reset([[TabModel alloc]
+ initWithSessionWindow:sessionWindow
+ sessionService:[SessionServiceIOS sharedService]
+ browserState:chrome_browser_state_.get()]);
+ otr_tab_model_.reset([[TabModel alloc]
+ initWithSessionWindow:sessionWindow
+ sessionService:[SessionServiceIOS sharedService]
+ browserState:chrome_browser_state_
+ ->GetOffTheRecordChromeBrowserState()]);
+
+ // Create the browser view controller with its testing factory.
+ bvc_factory_.reset([[TestBVCDependencyFactory alloc]
+ initWithBrowserState:chrome_browser_state_.get()]);
+ bvc_.reset([[BrowserViewController alloc]
+ initWithTabModel:tab_model_
+ browserState:chrome_browser_state_.get()
+ dependencyFactory:bvc_factory_]);
+ [bvc_ setActive:YES];
+
+ // Create a real window to give to the browser view controller.
+ window_.reset(
+ [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]);
+ [window_ makeKeyAndVisible];
+ [window_ addSubview:[bvc_ view]];
+ [[bvc_ view] setFrame:[[UIScreen mainScreen] bounds]];
+}
+
+void PerfTestWithBVC::TearDown() {
+ [[bvc_ tabModel] closeAllTabs];
+ [[bvc_ view] removeFromSuperview];
+
+ // Documented example of how to clear out the browser view controller
+ // and its associated data.
+ window_.reset();
+ [bvc_ browserStateDestroyed];
+ bvc_.reset();
+ bvc_factory_.reset();
+ tab_model_.reset();
+ [otr_tab_model_ browserStateDestroyed];
+ otr_tab_model_.reset();
+
+ // The base class |TearDown| method calls the run loop so the
+ // NSAutoreleasePool can drain. This needs to be done before
+ // |chrome_browser_state_| can be cleared. For tests that allocate more
+ // objects, more runloop time may be required.
+ if (slow_teardown_)
+ SpinRunLoop(.5);
+ PerfTest::TearDown();
+
+ // The profiles can be deallocated only after the BVC has been deallocated.
+ chrome_browser_state_.reset();
+}

Powered by Google App Engine
This is Rietveld 408576698