OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |