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

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

Issue 2781103002: [cc] Forward BeginFrameAcks through RWHVAndroid / DFHAndroid. (Closed)
Patch Set: 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 51658bd97e183299957fffad8d66b27452d4f7e5..e16d33c6f761127b798c41376077e176ab6076c3 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -443,6 +443,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),
@@ -1164,12 +1167,22 @@ void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame(
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());
+
+ latest_confirmed_begin_frame_source_id_ = ack.source_id;
boliu 2017/03/29 16:03:59 this is an exact duplicate of OnBeginFrameDidNotSw
Eric Seckler 2017/03/30 10:59:25 True, done! :)
+ latest_confirmed_begin_frame_sequence_number_ =
+ ack.latest_confirmed_sequence_number;
+ if (begin_frame_source_)
+ begin_frame_source_->DidFinishFrame(this, ack);
}
if (host_->is_hidden())
@@ -1203,6 +1216,15 @@ void RenderWidgetHostViewAndroid::OnSwapCompositorFrame(
std::move(frame));
}
+void RenderWidgetHostViewAndroid::OnBeginFrameDidNotSwap(
+ 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();
}
@@ -1994,14 +2016,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
@@ -2021,6 +2053,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