Commit c2c6b351 authored by Fernando Serboncini's avatar Fernando Serboncini Committed by Commit Bot

Only ack Worker.RAF BeginFrame after sending OffscreenCanvas


Bug: 995235
Change-Id: I2aaebe2c87f43a647e9b6823f13b64f890a7c7fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1829483
Commit-Queue: Fernando Serboncini <fserb@chromium.org>
Reviewed-by: default avatarKhushal <khushalsagar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#701182}
parent 175d8c40
......@@ -36,25 +36,31 @@ void WorkerAnimationFrameProvider::CancelCallback(int id) {
callback_collection_.CancelFrameCallback(id);
}
void WorkerAnimationFrameProvider::BeginFrame(
const base::TimeTicks& frame_time) {
TRACE_EVENT0("blink", "WorkerAnimationFrameProvider::BeginFrame");
void WorkerAnimationFrameProvider::BeginFrame(const viz::BeginFrameArgs& args) {
TRACE_EVENT_WITH_FLOW0("blink", "WorkerAnimationFrameProvider::BeginFrame",
TRACE_ID_GLOBAL(args.trace_id),
TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT);
double time = (frame_time - base::TimeTicks()).InMillisecondsF();
Microtask::EnqueueMicrotask(WTF::Bind(
[](base::WeakPtr<WorkerAnimationFrameProvider> provider, double time) {
[](base::WeakPtr<WorkerAnimationFrameProvider> provider,
const viz::BeginFrameArgs& args) {
if (!provider)
return;
TRACE_EVENT0("blink",
"WorkerAnimationFrameProvider::RequestAnimationFrame");
TRACE_EVENT_WITH_FLOW0(
"blink", "WorkerAnimationFrameProvider::RequestAnimationFrame",
TRACE_ID_GLOBAL(args.trace_id), TRACE_EVENT_FLAG_FLOW_IN);
{
OffscreenCanvas::ScopedInsideWorkerRAF inside_raf_scope;
for (auto& offscreen_canvas : provider->offscreen_canvases_) {
inside_raf_scope.AddOffscreenCanvas(offscreen_canvas);
}
double time = (args.frame_time - base::TimeTicks()).InMillisecondsF();
provider->callback_collection_.ExecuteFrameCallbacks(time, time);
}
provider->begin_frame_provider_->FinishBeginFrame(args);
},
weak_factory_.GetWeakPtr(), time));
weak_factory_.GetWeakPtr(), args));
}
void WorkerAnimationFrameProvider::RegisterOffscreenCanvas(
......
......@@ -39,7 +39,7 @@ class CORE_EXPORT WorkerAnimationFrameProvider
void Trace(blink::Visitor* visitor);
// BeginFrameProviderClient
void BeginFrame(const base::TimeTicks& frame_time) override;
void BeginFrame(const viz::BeginFrameArgs&) override;
void RegisterOffscreenCanvas(OffscreenCanvas*);
void DeregisterOffscreenCanvas(OffscreenCanvas*);
......
......@@ -95,6 +95,10 @@ void BeginFrameProvider::RequestBeginFrame() {
void BeginFrameProvider::OnBeginFrame(
const viz::BeginFrameArgs& args,
WTF::HashMap<uint32_t, ::viz::mojom::blink::FrameTimingDetailsPtr>) {
TRACE_EVENT_WITH_FLOW0("blink", "BeginFrameProvider::OnBeginFrame",
TRACE_ID_GLOBAL(args.trace_id),
TRACE_EVENT_FLAG_FLOW_IN | TRACE_EVENT_FLAG_FLOW_OUT);
if (args.deadline < base::TimeTicks::Now()) {
compositor_frame_sink_->DidNotProduceFrame(viz::BeginFrameAck(args, false));
return;
......@@ -103,14 +107,16 @@ void BeginFrameProvider::OnBeginFrame(
// If there was no need for a BeginFrame, just skip it.
if (needs_begin_frame_ && requested_needs_begin_frame_) {
requested_needs_begin_frame_ = false;
begin_frame_client_->BeginFrame(args.frame_time);
begin_frame_client_->BeginFrame(args);
} else {
if (!requested_needs_begin_frame_) {
needs_begin_frame_ = false;
compositor_frame_sink_->SetNeedsBeginFrame(false);
}
}
}
void BeginFrameProvider::FinishBeginFrame(const viz::BeginFrameArgs& args) {
compositor_frame_sink_->DidNotProduceFrame(viz::BeginFrameAck(args, false));
}
......
......@@ -24,7 +24,7 @@ struct PLATFORM_EXPORT BeginFrameProviderParams final {
class PLATFORM_EXPORT BeginFrameProviderClient {
public:
virtual void BeginFrame(const base::TimeTicks& frame_time) = 0;
virtual void BeginFrame(const viz::BeginFrameArgs&) = 0;
virtual ~BeginFrameProviderClient() = default;
};
......@@ -39,6 +39,7 @@ class PLATFORM_EXPORT BeginFrameProvider
void CreateCompositorFrameSinkIfNeeded();
void RequestBeginFrame();
void FinishBeginFrame(const viz::BeginFrameArgs&);
// viz::mojom::blink::CompositorFrameSinkClient implementation.
void DidReceiveCompositorFrameAck(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment