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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 2888043004: [cc] Add and plumb CFS::DidNotProduceFrame. (Closed)
Patch Set: remove ExternalBFS::OnDidFinishFrame and related ack tracking. Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_android.h" 5 #include "content/browser/renderer_host/render_widget_host_view_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1193 base::Bind(&RenderWidgetHostViewAndroid::SendReclaimCompositorResources, 1193 base::Bind(&RenderWidgetHostViewAndroid::SendReclaimCompositorResources,
1194 weak_ptr_factory_.GetWeakPtr(), true /* is_swap_ack */); 1194 weak_ptr_factory_.GetWeakPtr(), true /* is_swap_ack */);
1195 1195
1196 ack_callbacks_.push(ack_callback); 1196 ack_callbacks_.push(ack_callback);
1197 1197
1198 cc::BeginFrameAck ack = frame.metadata.begin_frame_ack; 1198 cc::BeginFrameAck ack = frame.metadata.begin_frame_ack;
1199 if (!has_content) { 1199 if (!has_content) {
1200 DestroyDelegatedContent(); 1200 DestroyDelegatedContent();
1201 1201
1202 ack.has_damage = false; 1202 ack.has_damage = false;
1203 OnBeginFrameDidNotSwap(ack); 1203 OnBeginFrameDidNotProduceFrame(ack);
1204 } else { 1204 } else {
1205 delegated_frame_host_->SubmitCompositorFrame(local_surface_id, 1205 delegated_frame_host_->SubmitCompositorFrame(local_surface_id,
1206 std::move(frame)); 1206 std::move(frame));
1207 frame_evictor_->SwappedFrame(!host_->is_hidden()); 1207 frame_evictor_->SwappedFrame(!host_->is_hidden());
1208 AcknowledgeBeginFrame(ack); 1208 AcknowledgeBeginFrame(ack);
1209 } 1209 }
1210 1210
1211 if (host_->is_hidden()) 1211 if (host_->is_hidden())
1212 RunAckCallbacks(); 1212 RunAckCallbacks();
1213 1213
(...skipping 10 matching lines...) Expand all
1224 if (!delegated_frame_host_) 1224 if (!delegated_frame_host_)
1225 return; 1225 return;
1226 1226
1227 if (!delegated_frame_host_->HasDelegatedContent()) 1227 if (!delegated_frame_host_->HasDelegatedContent())
1228 return; 1228 return;
1229 1229
1230 frame_evictor_->DiscardedFrame(); 1230 frame_evictor_->DiscardedFrame();
1231 delegated_frame_host_->DestroyDelegatedContent(); 1231 delegated_frame_host_->DestroyDelegatedContent();
1232 } 1232 }
1233 1233
1234 void RenderWidgetHostViewAndroid::OnBeginFrameDidNotSwap( 1234 void RenderWidgetHostViewAndroid::OnBeginFrameDidNotProduceFrame(
1235 const cc::BeginFrameAck& ack) { 1235 const cc::BeginFrameAck& ack) {
1236 if (!delegated_frame_host_) {
sunnyps 2017/05/22 07:17:13 nit: Can you add a comment about this?
Eric Seckler 2017/05/22 11:29:58 Done.
1237 DCHECK(!using_browser_compositor_);
1238 return;
1239 }
1240
1241 delegated_frame_host_->BeginFrameDidNotProduceFrame(ack);
1236 AcknowledgeBeginFrame(ack); 1242 AcknowledgeBeginFrame(ack);
1237 } 1243 }
1238 1244
1239 void RenderWidgetHostViewAndroid::AcknowledgeBeginFrame( 1245 void RenderWidgetHostViewAndroid::AcknowledgeBeginFrame(
1240 const cc::BeginFrameAck& ack) { 1246 const cc::BeginFrameAck& ack) {
1241 latest_confirmed_begin_frame_source_id_ = ack.source_id; 1247 latest_confirmed_begin_frame_source_id_ = ack.source_id;
1242 latest_confirmed_begin_frame_sequence_number_ = 1248 latest_confirmed_begin_frame_sequence_number_ =
1243 ack.latest_confirmed_sequence_number; 1249 ack.latest_confirmed_sequence_number;
1244 if (begin_frame_source_) 1250 if (begin_frame_source_)
1245 begin_frame_source_->DidFinishFrame(this, ack); 1251 begin_frame_source_->DidFinishFrame(this, ack);
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after
2053 DCHECK(content_view_core_); 2059 DCHECK(content_view_core_);
2054 DCHECK(using_browser_compositor_); 2060 DCHECK(using_browser_compositor_);
2055 RunAckCallbacks(); 2061 RunAckCallbacks();
2056 overscroll_controller_.reset(); 2062 overscroll_controller_.reset();
2057 delegated_frame_host_->DetachFromCompositor(); 2063 delegated_frame_host_->DetachFromCompositor();
2058 } 2064 }
2059 2065
2060 void RenderWidgetHostViewAndroid::OnBeginFrame(const cc::BeginFrameArgs& args) { 2066 void RenderWidgetHostViewAndroid::OnBeginFrame(const cc::BeginFrameArgs& args) {
2061 TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnBeginFrame"); 2067 TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnBeginFrame");
2062 if (!host_) { 2068 if (!host_) {
2063 OnBeginFrameDidNotSwap( 2069 OnBeginFrameDidNotProduceFrame(
2064 cc::BeginFrameAck(args.source_id, args.sequence_number, 2070 cc::BeginFrameAck(args.source_id, args.sequence_number,
2065 cc::BeginFrameArgs::kInvalidFrameNumber, false)); 2071 cc::BeginFrameArgs::kInvalidFrameNumber, false));
2066 return; 2072 return;
2067 } 2073 }
2068 2074
2069 // In sync mode, we disregard missed frame args to ensure that 2075 // In sync mode, we disregard missed frame args to ensure that
2070 // SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called 2076 // SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called
2071 // during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration. 2077 // during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration.
2072 if (sync_compositor_ && args.type == cc::BeginFrameArgs::MISSED) { 2078 if (sync_compositor_ && args.type == cc::BeginFrameArgs::MISSED) {
2073 uint64_t confirmed = cc::BeginFrameArgs::kInvalidFrameNumber; 2079 uint64_t confirmed = cc::BeginFrameArgs::kInvalidFrameNumber;
2074 if (args.source_id == latest_confirmed_begin_frame_source_id_) 2080 if (args.source_id == latest_confirmed_begin_frame_source_id_)
2075 confirmed = latest_confirmed_begin_frame_sequence_number_; 2081 confirmed = latest_confirmed_begin_frame_sequence_number_;
2076 OnBeginFrameDidNotSwap(cc::BeginFrameAck( 2082 OnBeginFrameDidNotProduceFrame(cc::BeginFrameAck(
2077 args.source_id, args.sequence_number, confirmed, false)); 2083 args.source_id, args.sequence_number, confirmed, false));
2078 return; 2084 return;
2079 } 2085 }
2080 2086
2081 // Update |last_begin_frame_args_| before handling 2087 // Update |last_begin_frame_args_| before handling
2082 // |outstanding_begin_frame_requests_| to prevent the BeginFrameSource from 2088 // |outstanding_begin_frame_requests_| to prevent the BeginFrameSource from
2083 // sending the same MISSED args in infinite recursion. This may otherwise 2089 // sending the same MISSED args in infinite recursion. This may otherwise
2084 // happen if |host_->FlushInput()| causes a synchronous OnSetNeedsFlushInput() 2090 // happen if |host_->FlushInput()| causes a synchronous OnSetNeedsFlushInput()
2085 // which can lead to |begin_frame_source_->AddObserver()| and OnBeginFrame(). 2091 // which can lead to |begin_frame_source_->AddObserver()| and OnBeginFrame().
2086 // By setting |last_begin_frame_args_|, we indicate to the source not to send 2092 // By setting |last_begin_frame_args_|, we indicate to the source not to send
2087 // the same args during |AddObserver()| again. 2093 // the same args during |AddObserver()| again.
2088 last_begin_frame_args_ = args; 2094 last_begin_frame_args_ = args;
2089 2095
2090 if (outstanding_begin_frame_requests_ & FLUSH_INPUT) { 2096 if (outstanding_begin_frame_requests_ & FLUSH_INPUT) {
2091 ClearBeginFrameRequest(FLUSH_INPUT); 2097 ClearBeginFrameRequest(FLUSH_INPUT);
2092 host_->FlushInput(); 2098 host_->FlushInput();
2093 } 2099 }
2094 2100
2095 if ((outstanding_begin_frame_requests_ & BEGIN_FRAME) || 2101 if ((outstanding_begin_frame_requests_ & BEGIN_FRAME) ||
2096 (outstanding_begin_frame_requests_ & PERSISTENT_BEGIN_FRAME)) { 2102 (outstanding_begin_frame_requests_ & PERSISTENT_BEGIN_FRAME)) {
2097 ClearBeginFrameRequest(BEGIN_FRAME); 2103 ClearBeginFrameRequest(BEGIN_FRAME);
2098 SendBeginFrame(args); 2104 SendBeginFrame(args);
2099 } else { 2105 } else {
2100 OnBeginFrameDidNotSwap(cc::BeginFrameAck( 2106 OnBeginFrameDidNotProduceFrame(cc::BeginFrameAck(
2101 args.source_id, args.sequence_number, args.sequence_number, false)); 2107 args.source_id, args.sequence_number, args.sequence_number, false));
2102 } 2108 }
2103 } 2109 }
2104 2110
2105 const cc::BeginFrameArgs& RenderWidgetHostViewAndroid::LastUsedBeginFrameArgs() 2111 const cc::BeginFrameArgs& RenderWidgetHostViewAndroid::LastUsedBeginFrameArgs()
2106 const { 2112 const {
2107 return last_begin_frame_args_; 2113 return last_begin_frame_args_;
2108 } 2114 }
2109 2115
2110 void RenderWidgetHostViewAndroid::OnBeginFrameSourcePausedChanged(bool paused) { 2116 void RenderWidgetHostViewAndroid::OnBeginFrameSourcePausedChanged(bool paused) {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 2224
2219 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor(); 2225 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor();
2220 if (!compositor) 2226 if (!compositor)
2221 return; 2227 return;
2222 2228
2223 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>( 2229 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>(
2224 overscroll_refresh_handler, compositor, view_.GetDipScale()); 2230 overscroll_refresh_handler, compositor, view_.GetDipScale());
2225 } 2231 }
2226 2232
2227 } // namespace content 2233 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698