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

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: address nits, rename to DidNotProduceFrame. 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 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 base::Bind(&RenderWidgetHostViewAndroid::SendReclaimCompositorResources, 1204 base::Bind(&RenderWidgetHostViewAndroid::SendReclaimCompositorResources,
1205 weak_ptr_factory_.GetWeakPtr(), true /* is_swap_ack */); 1205 weak_ptr_factory_.GetWeakPtr(), true /* is_swap_ack */);
1206 1206
1207 ack_callbacks_.push(ack_callback); 1207 ack_callbacks_.push(ack_callback);
1208 1208
1209 cc::BeginFrameAck ack = frame.metadata.begin_frame_ack; 1209 cc::BeginFrameAck ack = frame.metadata.begin_frame_ack;
1210 if (!has_content) { 1210 if (!has_content) {
1211 DestroyDelegatedContent(); 1211 DestroyDelegatedContent();
1212 1212
1213 ack.has_damage = false; 1213 ack.has_damage = false;
1214 OnBeginFrameDidNotSwap(ack); 1214 OnDidNotProduceFrame(ack);
1215 } else { 1215 } else {
1216 delegated_frame_host_->SubmitCompositorFrame(local_surface_id, 1216 delegated_frame_host_->SubmitCompositorFrame(local_surface_id,
1217 std::move(frame)); 1217 std::move(frame));
1218 frame_evictor_->SwappedFrame(!host_->is_hidden()); 1218 frame_evictor_->SwappedFrame(!host_->is_hidden());
1219 AcknowledgeBeginFrame(ack); 1219 AcknowledgeBeginFrame(ack);
1220 } 1220 }
1221 1221
1222 if (host_->is_hidden()) 1222 if (host_->is_hidden())
1223 RunAckCallbacks(); 1223 RunAckCallbacks();
1224 1224
(...skipping 10 matching lines...) Expand all
1235 if (!delegated_frame_host_) 1235 if (!delegated_frame_host_)
1236 return; 1236 return;
1237 1237
1238 if (!delegated_frame_host_->HasDelegatedContent()) 1238 if (!delegated_frame_host_->HasDelegatedContent())
1239 return; 1239 return;
1240 1240
1241 frame_evictor_->DiscardedFrame(); 1241 frame_evictor_->DiscardedFrame();
1242 delegated_frame_host_->DestroyDelegatedContent(); 1242 delegated_frame_host_->DestroyDelegatedContent();
1243 } 1243 }
1244 1244
1245 void RenderWidgetHostViewAndroid::OnBeginFrameDidNotSwap( 1245 void RenderWidgetHostViewAndroid::OnDidNotProduceFrame(
1246 const cc::BeginFrameAck& ack) { 1246 const cc::BeginFrameAck& ack) {
1247 if (!delegated_frame_host_) {
1248 // We are not using the browser compositor and there's no DisplayScheduler
1249 // that needs to be notified about the BeginFrameAck, so we can drop it.
1250 DCHECK(!using_browser_compositor_);
1251 return;
1252 }
1253
1254 delegated_frame_host_->DidNotProduceFrame(ack);
1247 AcknowledgeBeginFrame(ack); 1255 AcknowledgeBeginFrame(ack);
1248 } 1256 }
1249 1257
1250 void RenderWidgetHostViewAndroid::AcknowledgeBeginFrame( 1258 void RenderWidgetHostViewAndroid::AcknowledgeBeginFrame(
1251 const cc::BeginFrameAck& ack) { 1259 const cc::BeginFrameAck& ack) {
1252 latest_confirmed_begin_frame_source_id_ = ack.source_id; 1260 latest_confirmed_begin_frame_source_id_ = ack.source_id;
1253 latest_confirmed_begin_frame_sequence_number_ = 1261 latest_confirmed_begin_frame_sequence_number_ =
1254 ack.latest_confirmed_sequence_number; 1262 ack.latest_confirmed_sequence_number;
1255 if (begin_frame_source_) 1263 if (begin_frame_source_)
1256 begin_frame_source_->DidFinishFrame(this, ack); 1264 begin_frame_source_->DidFinishFrame(this, ack);
(...skipping 807 matching lines...) Expand 10 before | Expand all | Expand 10 after
2064 DCHECK(content_view_core_); 2072 DCHECK(content_view_core_);
2065 DCHECK(using_browser_compositor_); 2073 DCHECK(using_browser_compositor_);
2066 RunAckCallbacks(); 2074 RunAckCallbacks();
2067 overscroll_controller_.reset(); 2075 overscroll_controller_.reset();
2068 delegated_frame_host_->DetachFromCompositor(); 2076 delegated_frame_host_->DetachFromCompositor();
2069 } 2077 }
2070 2078
2071 void RenderWidgetHostViewAndroid::OnBeginFrame(const cc::BeginFrameArgs& args) { 2079 void RenderWidgetHostViewAndroid::OnBeginFrame(const cc::BeginFrameArgs& args) {
2072 TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnBeginFrame"); 2080 TRACE_EVENT0("cc,benchmark", "RenderWidgetHostViewAndroid::OnBeginFrame");
2073 if (!host_) { 2081 if (!host_) {
2074 OnBeginFrameDidNotSwap( 2082 OnDidNotProduceFrame(
2075 cc::BeginFrameAck(args.source_id, args.sequence_number, 2083 cc::BeginFrameAck(args.source_id, args.sequence_number,
2076 cc::BeginFrameArgs::kInvalidFrameNumber, false)); 2084 cc::BeginFrameArgs::kInvalidFrameNumber, false));
2077 return; 2085 return;
2078 } 2086 }
2079 2087
2080 // In sync mode, we disregard missed frame args to ensure that 2088 // In sync mode, we disregard missed frame args to ensure that
2081 // SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called 2089 // SynchronousCompositorBrowserFilter::SyncStateAfterVSync will be called
2082 // during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration. 2090 // during WindowAndroid::WindowBeginFrameSource::OnVSync() observer iteration.
2083 if (sync_compositor_ && args.type == cc::BeginFrameArgs::MISSED) { 2091 if (sync_compositor_ && args.type == cc::BeginFrameArgs::MISSED) {
2084 uint64_t confirmed = cc::BeginFrameArgs::kInvalidFrameNumber; 2092 uint64_t confirmed = cc::BeginFrameArgs::kInvalidFrameNumber;
2085 if (args.source_id == latest_confirmed_begin_frame_source_id_) 2093 if (args.source_id == latest_confirmed_begin_frame_source_id_)
2086 confirmed = latest_confirmed_begin_frame_sequence_number_; 2094 confirmed = latest_confirmed_begin_frame_sequence_number_;
2087 OnBeginFrameDidNotSwap(cc::BeginFrameAck( 2095 OnDidNotProduceFrame(cc::BeginFrameAck(args.source_id, args.sequence_number,
2088 args.source_id, args.sequence_number, confirmed, false)); 2096 confirmed, false));
2089 return; 2097 return;
2090 } 2098 }
2091 2099
2092 // Update |last_begin_frame_args_| before handling 2100 // Update |last_begin_frame_args_| before handling
2093 // |outstanding_begin_frame_requests_| to prevent the BeginFrameSource from 2101 // |outstanding_begin_frame_requests_| to prevent the BeginFrameSource from
2094 // sending the same MISSED args in infinite recursion. This may otherwise 2102 // sending the same MISSED args in infinite recursion. This may otherwise
2095 // happen if |host_->OnBeginFrame()| causes a synchronous 2103 // happen if |host_->OnBeginFrame()| causes a synchronous
2096 // OnSetNeedsFlushInput() which can lead to 2104 // OnSetNeedsFlushInput() which can lead to
2097 // |begin_frame_source_->AddObserver()| and OnBeginFrame(). By setting 2105 // |begin_frame_source_->AddObserver()| and OnBeginFrame(). By setting
2098 // |last_begin_frame_args_|, we indicate to the source not to send the same 2106 // |last_begin_frame_args_|, we indicate to the source not to send the same
2099 // args during |AddObserver()| again. 2107 // args during |AddObserver()| again.
2100 last_begin_frame_args_ = args; 2108 last_begin_frame_args_ = args;
2101 2109
2102 if (outstanding_begin_frame_requests_ & FLUSH_INPUT) { 2110 if (outstanding_begin_frame_requests_ & FLUSH_INPUT) {
2103 ClearBeginFrameRequest(FLUSH_INPUT); 2111 ClearBeginFrameRequest(FLUSH_INPUT);
2104 host_->OnBeginFrame(); 2112 host_->OnBeginFrame();
2105 } 2113 }
2106 2114
2107 if ((outstanding_begin_frame_requests_ & BEGIN_FRAME) || 2115 if ((outstanding_begin_frame_requests_ & BEGIN_FRAME) ||
2108 (outstanding_begin_frame_requests_ & PERSISTENT_BEGIN_FRAME)) { 2116 (outstanding_begin_frame_requests_ & PERSISTENT_BEGIN_FRAME)) {
2109 ClearBeginFrameRequest(BEGIN_FRAME); 2117 ClearBeginFrameRequest(BEGIN_FRAME);
2110 SendBeginFrame(args); 2118 SendBeginFrame(args);
2111 } else { 2119 } else {
2112 OnBeginFrameDidNotSwap(cc::BeginFrameAck( 2120 OnDidNotProduceFrame(cc::BeginFrameAck(args.source_id, args.sequence_number,
2113 args.source_id, args.sequence_number, args.sequence_number, false)); 2121 args.sequence_number, false));
2114 } 2122 }
2115 } 2123 }
2116 2124
2117 const cc::BeginFrameArgs& RenderWidgetHostViewAndroid::LastUsedBeginFrameArgs() 2125 const cc::BeginFrameArgs& RenderWidgetHostViewAndroid::LastUsedBeginFrameArgs()
2118 const { 2126 const {
2119 return last_begin_frame_args_; 2127 return last_begin_frame_args_;
2120 } 2128 }
2121 2129
2122 void RenderWidgetHostViewAndroid::OnBeginFrameSourcePausedChanged(bool paused) { 2130 void RenderWidgetHostViewAndroid::OnBeginFrameSourcePausedChanged(bool paused) {
2123 // The BeginFrameSources we listen to don't use this. For WebView, we signal 2131 // The BeginFrameSources we listen to don't use this. For WebView, we signal
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
2230 2238
2231 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor(); 2239 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor();
2232 if (!compositor) 2240 if (!compositor)
2233 return; 2241 return;
2234 2242
2235 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>( 2243 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>(
2236 overscroll_refresh_handler, compositor, view_.GetDipScale()); 2244 overscroll_refresh_handler, compositor, view_.GetDipScale());
2237 } 2245 }
2238 2246
2239 } // namespace content 2247 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698