Auto merge of #27466 - paulrouget:erg, r=jdm

Do not instanciate random ServoControls

That's embarrassing. We would create a new instance of Servo every time we would call `ServoControl()` (instead of `servoControl()`)… so very often.
This commit is contained in:
bors-servo 2020-07-31 18:47:55 -04:00 committed by GitHub
commit 346bf9c031
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 36 deletions

View file

@ -30,14 +30,14 @@ BrowserPage::BrowserPage() {
} }
void BrowserPage::BindServoEvents() { void BrowserPage::BindServoEvents() {
servoControl().OnURLChanged( servoView().OnURLChanged(
[=](const auto &, hstring url) { urlTextbox().Text(url); }); [=](const auto &, hstring url) { urlTextbox().Text(url); });
servoControl().OnTitleChanged([=](const auto &, hstring title) {}); servoView().OnTitleChanged([=](const auto &, hstring title) {});
servoControl().OnHistoryChanged([=](bool back, bool forward) { servoView().OnHistoryChanged([=](bool back, bool forward) {
backButton().IsEnabled(back); backButton().IsEnabled(back);
forwardButton().IsEnabled(forward); forwardButton().IsEnabled(forward);
}); });
servoControl().OnLoadStarted([=] { servoView().OnLoadStarted([=] {
urlbarLoadingIndicator().IsActive(true); urlbarLoadingIndicator().IsActive(true);
transientLoadingIndicator().IsIndeterminate(true); transientLoadingIndicator().IsIndeterminate(true);
@ -47,7 +47,7 @@ void BrowserPage::BindServoEvents() {
stopButton().Visibility(Visibility::Visible); stopButton().Visibility(Visibility::Visible);
devtoolsButton().IsEnabled(true); devtoolsButton().IsEnabled(true);
}); });
servoControl().OnLoadEnded([=] { servoView().OnLoadEnded([=] {
urlbarLoadingIndicator().IsActive(false); urlbarLoadingIndicator().IsActive(false);
transientLoadingIndicator().IsIndeterminate(false); transientLoadingIndicator().IsIndeterminate(false);
reloadButton().IsEnabled(true); reloadButton().IsEnabled(true);
@ -55,17 +55,16 @@ void BrowserPage::BindServoEvents() {
stopButton().IsEnabled(false); stopButton().IsEnabled(false);
stopButton().Visibility(Visibility::Collapsed); stopButton().Visibility(Visibility::Collapsed);
}); });
servoControl().OnCaptureGesturesStarted([=] { servoView().OnCaptureGesturesStarted([=] {
servoControl().Focus(FocusState::Programmatic); servoView().Focus(FocusState::Programmatic);
navigationBar().IsHitTestVisible(false); navigationBar().IsHitTestVisible(false);
}); });
servoControl().OnCaptureGesturesEnded( servoView().OnCaptureGesturesEnded(
[=] { navigationBar().IsHitTestVisible(true); }); [=] { navigationBar().IsHitTestVisible(true); });
urlTextbox().GotFocus(std::bind(&BrowserPage::OnURLFocused, this, _1)); urlTextbox().GotFocus(std::bind(&BrowserPage::OnURLFocused, this, _1));
servoControl().OnMediaSessionMetadata( servoView().OnMediaSessionMetadata(
[=](hstring title, hstring artist, hstring album) {}); [=](hstring title, hstring artist, hstring album) {});
servoControl().OnMediaSessionPlaybackStateChange([=](const auto &, servoView().OnMediaSessionPlaybackStateChange([=](const auto &, int state) {
int state) {
if (state == Servo::MediaSessionPlaybackState::None) { if (state == Servo::MediaSessionPlaybackState::None) {
mediaControls().Visibility(Visibility::Collapsed); mediaControls().Visibility(Visibility::Collapsed);
return; return;
@ -78,7 +77,7 @@ void BrowserPage::BindServoEvents() {
? Visibility::Collapsed ? Visibility::Collapsed
: Visibility::Visible); : Visibility::Visible);
}); });
servoControl().OnDevtoolsStatusChanged( servoView().OnDevtoolsStatusChanged(
[=](DevtoolsStatus status, unsigned int port, hstring token) { [=](DevtoolsStatus status, unsigned int port, hstring token) {
mDevtoolsStatus = status; mDevtoolsStatus = status;
mDevtoolsPort = port; mDevtoolsPort = port;
@ -86,7 +85,7 @@ void BrowserPage::BindServoEvents() {
}); });
Window::Current().VisibilityChanged( Window::Current().VisibilityChanged(
[=](const auto &, const VisibilityChangedEventArgs &args) { [=](const auto &, const VisibilityChangedEventArgs &args) {
servoControl().ChangeVisibility(args.Visible()); servoView().ChangeVisibility(args.Visible());
}); });
} }
@ -104,11 +103,11 @@ void BrowserPage::LoadFXRURI(Uri uri) {
std::wstring raw{uri.RawUri()}; std::wstring raw{uri.RawUri()};
if (scheme == FXR_SCHEME) { if (scheme == FXR_SCHEME) {
auto raw2 = raw.substr(FXR_SCHEME_SLASH_SLASH.size()); auto raw2 = raw.substr(FXR_SCHEME_SLASH_SLASH.size());
servoControl().LoadURIOrSearch(raw2); servoView().LoadURIOrSearch(raw2);
SetTransientMode(false); SetTransientMode(false);
} else if (scheme == FXRMIN_SCHEME) { } else if (scheme == FXRMIN_SCHEME) {
auto raw2 = raw.substr(FXRMIN_SCHEME_SLASH_SLASH.size()); auto raw2 = raw.substr(FXRMIN_SCHEME_SLASH_SLASH.size());
servoControl().LoadURIOrSearch(raw2); servoView().LoadURIOrSearch(raw2);
SetTransientMode(true); SetTransientMode(true);
} else { } else {
log(L"Unexpected URL: ", uri.RawUri().c_str()); log(L"Unexpected URL: ", uri.RawUri().c_str());
@ -116,42 +115,42 @@ void BrowserPage::LoadFXRURI(Uri uri) {
} }
void BrowserPage::SetTransientMode(bool transient) { void BrowserPage::SetTransientMode(bool transient) {
servoControl().SetTransientMode(transient); servoView().SetTransientMode(transient);
navigationBar().Visibility(transient ? Visibility::Collapsed navigationBar().Visibility(transient ? Visibility::Collapsed
: Visibility::Visible); : Visibility::Visible);
transientLoadingIndicator().Visibility(transient ? Visibility::Visible transientLoadingIndicator().Visibility(transient ? Visibility::Visible
: Visibility::Collapsed); : Visibility::Collapsed);
} }
void BrowserPage::SetArgs(hstring args) { servoControl().SetArgs(args); } void BrowserPage::SetArgs(hstring args) { servoView().SetArgs(args); }
void BrowserPage::Shutdown() { servoControl().Shutdown(); } void BrowserPage::Shutdown() { servoView().Shutdown(); }
/**** USER INTERACTIONS WITH UI ****/ /**** USER INTERACTIONS WITH UI ****/
void BrowserPage::OnBackButtonClicked(IInspectable const &, void BrowserPage::OnBackButtonClicked(IInspectable const &,
RoutedEventArgs const &) { RoutedEventArgs const &) {
servoControl().GoBack(); servoView().GoBack();
} }
void BrowserPage::OnForwardButtonClicked(IInspectable const &, void BrowserPage::OnForwardButtonClicked(IInspectable const &,
RoutedEventArgs const &) { RoutedEventArgs const &) {
servoControl().GoForward(); servoView().GoForward();
} }
void BrowserPage::OnReloadButtonClicked(IInspectable const &, void BrowserPage::OnReloadButtonClicked(IInspectable const &,
RoutedEventArgs const &) { RoutedEventArgs const &) {
servoControl().Reload(); servoView().Reload();
} }
void BrowserPage::OnStopButtonClicked(IInspectable const &, void BrowserPage::OnStopButtonClicked(IInspectable const &,
RoutedEventArgs const &) { RoutedEventArgs const &) {
servoControl().Stop(); servoView().Stop();
} }
void BrowserPage::OnHomeButtonClicked(IInspectable const &, void BrowserPage::OnHomeButtonClicked(IInspectable const &,
RoutedEventArgs const &) { RoutedEventArgs const &) {
servoControl().GoHome(); servoView().GoHome();
} }
// Given a pref, update its associated UI control. // Given a pref, update its associated UI control.
@ -188,7 +187,7 @@ void BrowserPage::BuildPrefList() {
auto resourceLoader = ResourceLoader::GetForCurrentView(); auto resourceLoader = ResourceLoader::GetForCurrentView();
auto resetStr = auto resetStr =
resourceLoader.GetString(L"devtoolsPreferenceResetButton/Content"); resourceLoader.GetString(L"devtoolsPreferenceResetButton/Content");
for (auto pref : ServoControl().Preferences()) { for (auto pref : servoView().Preferences()) {
auto value = pref.Value(); auto value = pref.Value();
auto type = value.as<IPropertyValue>().Type(); auto type = value.as<IPropertyValue>().Type();
std::optional<Controls::Control> ctrl; std::optional<Controls::Control> ctrl;
@ -196,8 +195,8 @@ void BrowserPage::BuildPrefList() {
auto checkbox = Controls::CheckBox(); auto checkbox = Controls::CheckBox();
checkbox.IsChecked(unbox_value<bool>(value)); checkbox.IsChecked(unbox_value<bool>(value));
checkbox.Click([=](const auto &, auto const &) { checkbox.Click([=](const auto &, auto const &) {
auto upref = ServoControl().SetBoolPref( auto upref = servoView().SetBoolPref(pref.Key(),
pref.Key(), checkbox.IsChecked().GetBoolean()); checkbox.IsChecked().GetBoolean());
UpdatePref(upref, checkbox); UpdatePref(upref, checkbox);
}); });
ctrl = checkbox; ctrl = checkbox;
@ -206,7 +205,7 @@ void BrowserPage::BuildPrefList() {
textbox.Text(unbox_value<hstring>(value)); textbox.Text(unbox_value<hstring>(value));
textbox.KeyUp([=](const auto &, Input::KeyRoutedEventArgs const &e) { textbox.KeyUp([=](const auto &, Input::KeyRoutedEventArgs const &e) {
if (e.Key() == Windows::System::VirtualKey::Enter) { if (e.Key() == Windows::System::VirtualKey::Enter) {
auto upref = ServoControl().SetStringPref(pref.Key(), textbox.Text()); auto upref = servoView().SetStringPref(pref.Key(), textbox.Text());
UpdatePref(upref, textbox); UpdatePref(upref, textbox);
} }
}); });
@ -220,7 +219,7 @@ void BrowserPage::BuildPrefList() {
Inline); Inline);
nbox.ValueChanged([=](const auto &, const auto &) { nbox.ValueChanged([=](const auto &, const auto &) {
int val = (int)nbox.Value(); int val = (int)nbox.Value();
auto upref = ServoControl().SetIntPref(pref.Key(), val); auto upref = servoView().SetIntPref(pref.Key(), val);
UpdatePref(upref, nbox); UpdatePref(upref, nbox);
}); });
ctrl = nbox; ctrl = nbox;
@ -228,8 +227,7 @@ void BrowserPage::BuildPrefList() {
auto nbox = Microsoft::UI::Xaml::Controls::NumberBox(); auto nbox = Microsoft::UI::Xaml::Controls::NumberBox();
nbox.Value(unbox_value<double>(value)); nbox.Value(unbox_value<double>(value));
nbox.ValueChanged([=](const auto &, const auto &) { nbox.ValueChanged([=](const auto &, const auto &) {
auto upref = auto upref = servoView().SetIntPref(pref.Key(), (int64_t)nbox.Value());
ServoControl().SetIntPref(pref.Key(), (int64_t)nbox.Value());
UpdatePref(upref, (Controls::Control &)nbox); UpdatePref(upref, (Controls::Control &)nbox);
}); });
ctrl = nbox; ctrl = nbox;
@ -254,7 +252,7 @@ void BrowserPage::BuildPrefList() {
reset.Content(winrt::box_value(resetStr)); reset.Content(winrt::box_value(resetStr));
reset.IsEnabled(!pref.IsDefault()); reset.IsEnabled(!pref.IsDefault());
reset.Click([=](const auto &, auto const &) { reset.Click([=](const auto &, auto const &) {
auto upref = ServoControl().ResetPref(pref.Key()); auto upref = servoView().ResetPref(pref.Key());
UpdatePref(upref, *ctrl); UpdatePref(upref, *ctrl);
}); });
stack.Children().Append(reset); stack.Children().Append(reset);
@ -351,21 +349,21 @@ void BrowserPage::OnJSInputEdited(IInspectable const &,
void BrowserPage::OnURLEdited(IInspectable const &, void BrowserPage::OnURLEdited(IInspectable const &,
Input::KeyRoutedEventArgs const &e) { Input::KeyRoutedEventArgs const &e) {
if (e.Key() == Windows::System::VirtualKey::Enter) { if (e.Key() == Windows::System::VirtualKey::Enter) {
servoControl().Focus(FocusState::Programmatic); servoView().Focus(FocusState::Programmatic);
auto input = urlTextbox().Text(); auto input = urlTextbox().Text();
auto uri = servoControl().LoadURIOrSearch(input); auto uri = servoView().LoadURIOrSearch(input);
urlTextbox().Text(uri); urlTextbox().Text(uri);
} }
} }
void BrowserPage::OnMediaControlsPlayClicked(IInspectable const &, void BrowserPage::OnMediaControlsPlayClicked(IInspectable const &,
RoutedEventArgs const &) { RoutedEventArgs const &) {
servoControl().SendMediaSessionAction( servoView().SendMediaSessionAction(
static_cast<int32_t>(Servo::MediaSessionActionType::Play)); static_cast<int32_t>(Servo::MediaSessionActionType::Play));
} }
void BrowserPage::OnMediaControlsPauseClicked(IInspectable const &, void BrowserPage::OnMediaControlsPauseClicked(IInspectable const &,
RoutedEventArgs const &) { RoutedEventArgs const &) {
servoControl().SendMediaSessionAction( servoView().SendMediaSessionAction(
static_cast<int32_t>(Servo::MediaSessionActionType::Pause)); static_cast<int32_t>(Servo::MediaSessionActionType::Pause));
} }

View file

@ -137,7 +137,7 @@
<ProgressRing x:Name="urlbarLoadingIndicator" Margin="10,0"/> <ProgressRing x:Name="urlbarLoadingIndicator" Margin="10,0"/>
</StackPanel> </StackPanel>
</Grid> </Grid>
<local:ServoControl Grid.Row="1" TabIndex="0" x:Name="servoControl"/> <local:ServoControl Grid.Row="1" TabIndex="0" x:Name="servoView"/>
<muxc:TabView x:Name="toolbox" IsAddTabButtonVisible="False" Grid.Row="2" Visibility="Collapsed" Height="300"> <muxc:TabView x:Name="toolbox" IsAddTabButtonVisible="False" Grid.Row="2" Visibility="Collapsed" Height="300">
<muxc:TabView.TabStripFooter> <muxc:TabView.TabStripFooter>
<Grid> <Grid>