perf: avoid redundant calls to GetView() (#43229)

* perf: avoid double-calls to GetView()

There are a lot of places where we call the virtual method GetView()
twice in succession: the first to check if the view exists, and the
second to use. This PR holds the view in a temp variable instead, e.g.:

if (auto* view = foo->GetView())
  view->DoSomething();

Co-authored-by: Charles Kerr <charles@charleskerr.com>

* perf: avoid discarded GetView() call

Co-authored-by: Charles Kerr <charles@charleskerr.com>

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
This commit is contained in:
trop[bot] 2024-08-06 13:23:21 -05:00 committed by GitHub
parent 8fb3a04eee
commit be842d6267
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 20 additions and 28 deletions

View file

@ -37,13 +37,14 @@ void FrameSubscriber::AttachToHost(content::RenderWidgetHost* host) {
// The view can be null if the renderer process has crashed. // The view can be null if the renderer process has crashed.
// (https://crbug.com/847363) // (https://crbug.com/847363)
if (!host_->GetView()) auto* rwhv = host_->GetView();
if (!rwhv)
return; return;
// Create and configure the video capturer. // Create and configure the video capturer.
gfx::Size size = GetRenderViewSize(); gfx::Size size = GetRenderViewSize();
DCHECK(!size.IsEmpty()); DCHECK(!size.IsEmpty());
video_capturer_ = host_->GetView()->CreateVideoCapturer(); video_capturer_ = rwhv->CreateVideoCapturer();
video_capturer_->SetResolutionConstraints(size, size, true); video_capturer_->SetResolutionConstraints(size, size, true);
video_capturer_->SetAutoThrottlingEnabled(false); video_capturer_->SetAutoThrottlingEnabled(false);
video_capturer_->SetMinSizeChangePeriod(base::TimeDelta()); video_capturer_->SetMinSizeChangePeriod(base::TimeDelta());

View file

@ -565,10 +565,8 @@ OffScreenRenderWidgetHostView::CreateViewForWidget(
content::RenderWidgetHost* render_widget_host, content::RenderWidgetHost* render_widget_host,
content::RenderWidgetHost* embedder_render_widget_host, content::RenderWidgetHost* embedder_render_widget_host,
content::WebContentsView* web_contents_view) { content::WebContentsView* web_contents_view) {
if (render_widget_host->GetView()) { if (auto* rwhv = render_widget_host->GetView())
return static_cast<content::RenderWidgetHostViewBase*>( return static_cast<content::RenderWidgetHostViewBase*>(rwhv);
render_widget_host->GetView());
}
OffScreenRenderWidgetHostView* embedder_host_view = nullptr; OffScreenRenderWidgetHostView* embedder_host_view = nullptr;
if (embedder_render_widget_host) { if (embedder_render_widget_host) {

View file

@ -33,8 +33,8 @@ void OffScreenWebContentsView::SetWebContents(
content::WebContents* web_contents) { content::WebContents* web_contents) {
web_contents_ = web_contents; web_contents_ = web_contents;
if (GetView()) if (auto* view = GetView())
GetView()->InstallTransparency(); view->InstallTransparency();
} }
void OffScreenWebContentsView::SetNativeWindow(NativeWindow* window) { void OffScreenWebContentsView::SetNativeWindow(NativeWindow* window) {
@ -51,8 +51,8 @@ void OffScreenWebContentsView::SetNativeWindow(NativeWindow* window) {
void OffScreenWebContentsView::OnWindowResize() { void OffScreenWebContentsView::OnWindowResize() {
// In offscreen mode call RenderWidgetHostView's SetSize explicitly // In offscreen mode call RenderWidgetHostView's SetSize explicitly
if (GetView()) if (auto* view = GetView())
GetView()->SetSize(GetSize()); view->SetSize(GetSize());
} }
void OffScreenWebContentsView::OnWindowClosed() { void OffScreenWebContentsView::OnWindowClosed() {
@ -109,7 +109,9 @@ void OffScreenWebContentsView::TransferDragSecurityInfo(WebContentsView* view) {
} }
gfx::Rect OffScreenWebContentsView::GetViewBounds() const { gfx::Rect OffScreenWebContentsView::GetViewBounds() const {
return GetView() ? GetView()->GetViewBounds() : gfx::Rect(); if (auto* view = GetView())
return view->GetViewBounds();
return {};
} }
void OffScreenWebContentsView::CreateView(gfx::NativeView context) {} void OffScreenWebContentsView::CreateView(gfx::NativeView context) {}
@ -117,10 +119,8 @@ void OffScreenWebContentsView::CreateView(gfx::NativeView context) {}
content::RenderWidgetHostViewBase* content::RenderWidgetHostViewBase*
OffScreenWebContentsView::CreateViewForWidget( OffScreenWebContentsView::CreateViewForWidget(
content::RenderWidgetHost* render_widget_host) { content::RenderWidgetHost* render_widget_host) {
if (render_widget_host->GetView()) { if (auto* rwhv = render_widget_host->GetView())
return static_cast<content::RenderWidgetHostViewBase*>( return static_cast<content::RenderWidgetHostViewBase*>(rwhv);
render_widget_host->GetView());
}
return new OffScreenRenderWidgetHostView( return new OffScreenRenderWidgetHostView(
transparent_, painting_, GetFrameRate(), callback_, render_widget_host, transparent_, painting_, GetFrameRate(), callback_, render_widget_host,
@ -146,8 +146,8 @@ OffScreenWebContentsView::CreateViewForChildWidget(
void OffScreenWebContentsView::SetPageTitle(const std::u16string& title) {} void OffScreenWebContentsView::SetPageTitle(const std::u16string& title) {}
void OffScreenWebContentsView::RenderViewReady() { void OffScreenWebContentsView::RenderViewReady() {
if (GetView()) if (auto* view = GetView())
GetView()->InstallTransparency(); view->InstallTransparency();
} }
void OffScreenWebContentsView::RenderViewHostChanged( void OffScreenWebContentsView::RenderViewHostChanged(
@ -183,11 +183,9 @@ void OffScreenWebContentsView::UpdateDragOperation(
bool document_is_handling_drag) {} bool document_is_handling_drag) {}
void OffScreenWebContentsView::SetPainting(bool painting) { void OffScreenWebContentsView::SetPainting(bool painting) {
auto* view = GetView();
painting_ = painting; painting_ = painting;
if (view != nullptr) { if (auto* view = GetView())
view->SetPainting(painting); view->SetPainting(painting);
}
} }
bool OffScreenWebContentsView::IsPainting() const { bool OffScreenWebContentsView::IsPainting() const {
@ -197,11 +195,9 @@ bool OffScreenWebContentsView::IsPainting() const {
} }
void OffScreenWebContentsView::SetFrameRate(int frame_rate) { void OffScreenWebContentsView::SetFrameRate(int frame_rate) {
auto* view = GetView();
frame_rate_ = frame_rate; frame_rate_ = frame_rate;
if (view != nullptr) { if (auto* view = GetView())
view->SetFrameRate(frame_rate); view->SetFrameRate(frame_rate);
}
} }
int OffScreenWebContentsView::GetFrameRate() const { int OffScreenWebContentsView::GetFrameRate() const {

View file

@ -192,11 +192,8 @@ void AutofillPopup::CreateView(content::RenderFrameHost* frame_host,
view_ = new AutofillPopupView(this, parent->GetWidget()); view_ = new AutofillPopupView(this, parent->GetWidget());
if (offscreen) { if (offscreen) {
auto* rwhv = frame_host->GetView(); auto* rwhv = embedder_frame_host ? embedder_frame_host->GetView()
if (embedder_frame_host != nullptr) { : frame_host->GetView();
rwhv = embedder_frame_host->GetView();
}
auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(rwhv); auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(rwhv);
view_->view_proxy_ = std::make_unique<OffscreenViewProxy>(view_); view_->view_proxy_ = std::make_unique<OffscreenViewProxy>(view_);
osr_rwhv->AddViewProxy(view_->view_proxy_.get()); osr_rwhv->AddViewProxy(view_->view_proxy_.get());