[ios blink] Simplify external begin frames
Fork ExternalBeginFrameSourceMojo to an iOS specific variant so that we don't have to unnecessarily wait for previous frame's BeginFrameAck. This uses a new IssueExternalBeginFrameNoAck mojo API. With this new variant, Motionmark is able to see 60fps in its frame rate detection phase. Change-Id: I4a415f2388a3855db963ca8c6d8f825e20fff36b Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6398086 Reviewed-by: Alex Gough <ajgo@chromium.org> Auto-Submit: Sunny Sachanandani <sunnyps@chromium.org> Reviewed-by: Dave Tapuska <dtapuska@chromium.org> Reviewed-by: Jonathan Ross <jonross@chromium.org> Commit-Queue: Jonathan Ross <jonross@chromium.org> Cr-Commit-Position: refs/heads/main@{#1439376}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
e570133c2f
commit
6151353b2d
components/viz/service
BUILD.gn
frame_sinks
content/browser/renderer_host
services/viz/privileged/mojom/compositing
ui/compositor
@ -39,13 +39,13 @@ class BeginFrameSourceIOS
|
||||
void SetPreferredInterval(base::TimeDelta interval) override;
|
||||
|
||||
private:
|
||||
void BeginFrameAck(const viz::BeginFrameAck&);
|
||||
const raw_ptr<ui::Compositor> compositor_;
|
||||
|
||||
raw_ptr<ui::Compositor> compositor_;
|
||||
viz::ExternalBeginFrameSourceIOS begin_frame_source_;
|
||||
|
||||
viz::BeginFrameArgs last_used_begin_frame_args_;
|
||||
bool send_begin_frame_ = true;
|
||||
bool added_observer_ = false;
|
||||
bool observing_begin_frame_source_ = false;
|
||||
|
||||
mojo::AssociatedReceiverSet<viz::mojom::ExternalBeginFrameControllerClient>
|
||||
receivers_;
|
||||
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
#include "content/browser/renderer_host/begin_frame_source_ios.h"
|
||||
|
||||
#include "base/functional/callback_helpers.h"
|
||||
|
||||
namespace content {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@ -12,6 +14,7 @@ namespace content {
|
||||
BeginFrameSourceIOS::BeginFrameSourceIOS(ui::Compositor* compositor)
|
||||
: compositor_(compositor),
|
||||
begin_frame_source_(viz::BackToBackBeginFrameSource::kNotRestartableId) {
|
||||
DCHECK(compositor_);
|
||||
compositor_->SetExternalBeginFrameControllerClientFactory(this);
|
||||
}
|
||||
|
||||
@ -20,19 +23,8 @@ BeginFrameSourceIOS::~BeginFrameSourceIOS() {
|
||||
}
|
||||
|
||||
void BeginFrameSourceIOS::OnBeginFrame(const viz::BeginFrameArgs& args) {
|
||||
if (!compositor_ || !send_begin_frame_) {
|
||||
return;
|
||||
}
|
||||
last_used_begin_frame_args_ = args;
|
||||
send_begin_frame_ = false;
|
||||
compositor_->IssueExternalBeginFrame(
|
||||
args, /*force=*/true,
|
||||
base::BindOnce(&BeginFrameSourceIOS::BeginFrameAck,
|
||||
weak_factory_.GetWeakPtr()));
|
||||
}
|
||||
|
||||
void BeginFrameSourceIOS::BeginFrameAck(const viz::BeginFrameAck&) {
|
||||
send_begin_frame_ = true;
|
||||
compositor_->IssueExternalBeginFrameNoAck(args);
|
||||
}
|
||||
|
||||
const viz::BeginFrameArgs& BeginFrameSourceIOS::LastUsedBeginFrameArgs() const {
|
||||
@ -58,17 +50,13 @@ BeginFrameSourceIOS::CreateExternalBeginFrameControllerClient() {
|
||||
}
|
||||
|
||||
void BeginFrameSourceIOS::SetNeedsBeginFrame(bool needs_begin_frames) {
|
||||
if (needs_begin_frames == observing_begin_frame_source_) {
|
||||
return;
|
||||
}
|
||||
observing_begin_frame_source_ = needs_begin_frames;
|
||||
if (needs_begin_frames) {
|
||||
if (added_observer_) {
|
||||
return;
|
||||
}
|
||||
added_observer_ = true;
|
||||
begin_frame_source_.AddObserver(this);
|
||||
} else {
|
||||
if (!added_observer_) {
|
||||
return;
|
||||
}
|
||||
added_observer_ = false;
|
||||
begin_frame_source_.RemoveObserver(this);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user