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

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 2781103002: [cc] Forward BeginFrameAcks through RWHVAndroid / DFHAndroid. (Closed)
Patch Set: rebase Created 3 years, 9 months 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: content/browser/renderer_host/render_widget_host_view_android.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 4e97029ec72031ae749364e6fb954c45ab141f37..25d704344234ebcea9a7a1214e46782aded31250 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -441,6 +441,9 @@ RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
ContentViewCoreImpl* content_view_core)
: host_(widget_host),
begin_frame_source_(nullptr),
+ latest_confirmed_begin_frame_source_id_(0),
+ latest_confirmed_begin_frame_sequence_number_(
+ cc::BeginFrameArgs::kInvalidFrameNumber),
outstanding_begin_frame_requests_(0),
is_showing_(!widget_host->is_hidden()),
is_window_visible_(true),
@@ -1148,12 +1151,17 @@ void RenderWidgetHostViewAndroid::SubmitCompositorFrame(
ack_callbacks_.push(ack_callback);
+ cc::BeginFrameAck ack = frame.metadata.begin_frame_ack;
if (!has_content) {
DestroyDelegatedContent();
+
+ ack.has_damage = false;
+ OnBeginFrameDidNotSwap(ack);
} else {
delegated_frame_host_->SubmitCompositorFrame(local_surface_id,
std::move(frame));
frame_evictor_->SwappedFrame(!host_->is_hidden());
+ AcknowledgeBeginFrame(ack);
}
if (host_->is_hidden())
@@ -1179,6 +1187,20 @@ void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
delegated_frame_host_->DestroyDelegatedContent();
}
+void RenderWidgetHostViewAndroid::OnBeginFrameDidNotSwap(
+ const cc::BeginFrameAck& ack) {
+ AcknowledgeBeginFrame(ack);
+}
+
+void RenderWidgetHostViewAndroid::AcknowledgeBeginFrame(
+ const cc::BeginFrameAck& ack) {
+ latest_confirmed_begin_frame_source_id_ = ack.source_id;
+ latest_confirmed_begin_frame_sequence_number_ =
+ ack.latest_confirmed_sequence_number;
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(this, ack);
+}
+
void RenderWidgetHostViewAndroid::ClearCompositorFrame() {
DestroyDelegatedContent();
}
@@ -1978,14 +2000,24 @@ void RenderWidgetHostViewAndroid::OnDetachCompositor() {
void RenderWidgetHostViewAndroid::OnBeginFrame(const cc::BeginFrameArgs& args) {
TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnBeginFrame");
- if (!host_)
+ if (!host_) {
+ OnBeginFrameDidNotSwap(
+ cc::BeginFrameAck(args.source_id, args.sequence_number,
+ cc::BeginFrameArgs::kInvalidFrameNumber, false));
return;
+ }
// In sync mode, we disregard missed frame args to ensure that
// SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called
// during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration.
- if (sync_compositor_ && args.type == cc::BeginFrameArgs::MISSED)
+ if (sync_compositor_ && args.type == cc::BeginFrameArgs::MISSED) {
+ uint64_t confirmed = cc::BeginFrameArgs::kInvalidFrameNumber;
+ if (args.source_id == latest_confirmed_begin_frame_source_id_)
+ confirmed = latest_confirmed_begin_frame_sequence_number_;
+ OnBeginFrameDidNotSwap(cc::BeginFrameAck(
+ args.source_id, args.sequence_number, confirmed, false));
return;
+ }
// Update |last_begin_frame_args_| before handling
// |outstanding_begin_frame_requests_| to prevent the BeginFrameSource from
@@ -2005,6 +2037,9 @@ void RenderWidgetHostViewAndroid::OnBeginFrame(const cc::BeginFrameArgs& args) {
(outstanding_begin_frame_requests_ & PERSISTENT_BEGIN_FRAME)) {
ClearBeginFrameRequest(BEGIN_FRAME);
SendBeginFrame(args);
+ } else {
+ OnBeginFrameDidNotSwap(cc::BeginFrameAck(
+ args.source_id, args.sequence_number, args.sequence_number, false));
}
}
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_android.h ('k') | ui/android/delegated_frame_host_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698