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

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

Issue 2728183002: RendererCompositorFrameSink should handle local surface id allocation (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 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 1124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 1135
1136 if (!surface_returned_resources_.empty()) 1136 if (!surface_returned_resources_.empty())
1137 SendReclaimCompositorResources(last_compositor_frame_sink_id_, 1137 SendReclaimCompositorResources(last_compositor_frame_sink_id_,
1138 false /* is_swap_ack */); 1138 false /* is_swap_ack */);
1139 1139
1140 last_compositor_frame_sink_id_ = compositor_frame_sink_id; 1140 last_compositor_frame_sink_id_ = compositor_frame_sink_id;
1141 } 1141 }
1142 1142
1143 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( 1143 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame(
1144 uint32_t compositor_frame_sink_id, 1144 uint32_t compositor_frame_sink_id,
1145 cc::LocalSurfaceId local_surface_id,
Fady Samuel 2017/03/15 12:05:48 const cc::LocalSurfaceId&
Saman Sami 2017/03/16 18:33:07 Done.
1145 cc::CompositorFrame frame) { 1146 cc::CompositorFrame frame) {
1146 last_scroll_offset_ = frame.metadata.root_scroll_offset; 1147 last_scroll_offset_ = frame.metadata.root_scroll_offset;
1147 DCHECK(delegated_frame_host_); 1148 DCHECK(delegated_frame_host_);
1148 DCHECK(!frame.render_pass_list.empty()); 1149 DCHECK(!frame.render_pass_list.empty());
1149 1150
1150 cc::RenderPass* root_pass = frame.render_pass_list.back().get(); 1151 cc::RenderPass* root_pass = frame.render_pass_list.back().get();
1151 current_surface_size_ = root_pass->output_rect.size(); 1152 current_surface_size_ = root_pass->output_rect.size();
1152 bool is_transparent = root_pass->has_transparent_background; 1153 bool is_transparent = root_pass->has_transparent_background;
1153 1154
1154 cc::CompositorFrameMetadata metadata = frame.metadata.Clone(); 1155 cc::CompositorFrameMetadata metadata = frame.metadata.Clone();
1155 1156
1156 CheckCompositorFrameSinkChanged(compositor_frame_sink_id); 1157 CheckCompositorFrameSinkChanged(compositor_frame_sink_id);
1157 bool has_content = !current_surface_size_.IsEmpty(); 1158 bool has_content = !current_surface_size_.IsEmpty();
1158 1159
1159 base::Closure ack_callback = 1160 base::Closure ack_callback =
1160 base::Bind(&RenderWidgetHostViewAndroid::SendReclaimCompositorResources, 1161 base::Bind(&RenderWidgetHostViewAndroid::SendReclaimCompositorResources,
1161 weak_ptr_factory_.GetWeakPtr(), compositor_frame_sink_id, 1162 weak_ptr_factory_.GetWeakPtr(), compositor_frame_sink_id,
1162 true /* is_swap_ack */); 1163 true /* is_swap_ack */);
1163 1164
1164 ack_callbacks_.push(ack_callback); 1165 ack_callbacks_.push(ack_callback);
1165 1166
1166 if (!has_content) { 1167 if (!has_content) {
1167 DestroyDelegatedContent(); 1168 DestroyDelegatedContent();
1168 } else { 1169 } else {
1169 delegated_frame_host_->SubmitCompositorFrame(std::move(frame)); 1170 delegated_frame_host_->SubmitCompositorFrame(local_surface_id,
1171 std::move(frame));
1170 frame_evictor_->SwappedFrame(!host_->is_hidden()); 1172 frame_evictor_->SwappedFrame(!host_->is_hidden());
1171 } 1173 }
1172 1174
1173 if (host_->is_hidden()) 1175 if (host_->is_hidden())
1174 RunAckCallbacks(); 1176 RunAckCallbacks();
1175 1177
1176 // As the metadata update may trigger view invalidation, always call it after 1178 // As the metadata update may trigger view invalidation, always call it after
1177 // any potential compositor scheduling. 1179 // any potential compositor scheduling.
1178 OnFrameMetadataUpdated(std::move(metadata), is_transparent); 1180 OnFrameMetadataUpdated(std::move(metadata), is_transparent);
1179 } 1181 }
1180 1182
1181 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { 1183 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
1182 DCHECK(!delegated_frame_host_ || 1184 DCHECK(!delegated_frame_host_ ||
1183 delegated_frame_host_->HasDelegatedContent() == 1185 delegated_frame_host_->HasDelegatedContent() ==
1184 frame_evictor_->HasFrame()); 1186 frame_evictor_->HasFrame());
1185 1187
1186 if (!delegated_frame_host_) 1188 if (!delegated_frame_host_)
1187 return; 1189 return;
1188 1190
1189 if (!delegated_frame_host_->HasDelegatedContent()) 1191 if (!delegated_frame_host_->HasDelegatedContent())
1190 return; 1192 return;
1191 1193
1192 frame_evictor_->DiscardedFrame(); 1194 frame_evictor_->DiscardedFrame();
1193 delegated_frame_host_->DestroyDelegatedContent(); 1195 delegated_frame_host_->DestroyDelegatedContent();
1194 } 1196 }
1195 1197
1196 void RenderWidgetHostViewAndroid::OnSwapCompositorFrame( 1198 void RenderWidgetHostViewAndroid::OnSwapCompositorFrame(
1197 uint32_t compositor_frame_sink_id, 1199 uint32_t compositor_frame_sink_id,
1200 cc::LocalSurfaceId local_surface_id,
Fady Samuel 2017/03/15 12:05:48 const cc::LocalSurfaceId&
Saman Sami 2017/03/16 18:33:07 Done.
1198 cc::CompositorFrame frame) { 1201 cc::CompositorFrame frame) {
1199 InternalSwapCompositorFrame(compositor_frame_sink_id, std::move(frame)); 1202 InternalSwapCompositorFrame(compositor_frame_sink_id, local_surface_id,
1203 std::move(frame));
1200 } 1204 }
1201 1205
1202 void RenderWidgetHostViewAndroid::ClearCompositorFrame() { 1206 void RenderWidgetHostViewAndroid::ClearCompositorFrame() {
1203 DestroyDelegatedContent(); 1207 DestroyDelegatedContent();
1204 } 1208 }
1205 1209
1206 void RenderWidgetHostViewAndroid::SynchronousFrameMetadata( 1210 void RenderWidgetHostViewAndroid::SynchronousFrameMetadata(
1207 cc::CompositorFrameMetadata frame_metadata) { 1211 cc::CompositorFrameMetadata frame_metadata) {
1208 if (!content_view_core_) 1212 if (!content_view_core_)
1209 return; 1213 return;
(...skipping 920 matching lines...) Expand 10 before | Expand all | Expand 10 after
2130 2134
2131 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor(); 2135 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor();
2132 if (!compositor) 2136 if (!compositor)
2133 return; 2137 return;
2134 2138
2135 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>( 2139 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>(
2136 overscroll_refresh_handler, compositor, view_.GetDipScale()); 2140 overscroll_refresh_handler, compositor, view_.GetDipScale());
2137 } 2141 }
2138 2142
2139 } // namespace content 2143 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698