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

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

Issue 2302023003: Set content opacity of DFHAndroid surfacelayer based on renderer frame contents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: modify background color Created 4 years, 3 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 923 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 DCHECK(HasValidFrame()); 934 DCHECK(HasValidFrame());
935 RetainFrame(output_surface_id, std::move(frame)); 935 RetainFrame(output_surface_id, std::move(frame));
936 return; 936 return;
937 } 937 }
938 938
939 DCHECK(!frame.delegated_frame_data->render_pass_list.empty()); 939 DCHECK(!frame.delegated_frame_data->render_pass_list.empty());
940 940
941 cc::RenderPass* root_pass = 941 cc::RenderPass* root_pass =
942 frame.delegated_frame_data->render_pass_list.back().get(); 942 frame.delegated_frame_data->render_pass_list.back().get();
943 current_surface_size_ = root_pass->output_rect.size(); 943 current_surface_size_ = root_pass->output_rect.size();
944 bool is_transparent = root_pass->has_transparent_background;
944 945
945 cc::CompositorFrameMetadata metadata = frame.metadata.Clone(); 946 cc::CompositorFrameMetadata metadata = frame.metadata.Clone();
946 947
947 CheckOutputSurfaceChanged(output_surface_id); 948 CheckOutputSurfaceChanged(output_surface_id);
948 bool has_content = !current_surface_size_.IsEmpty(); 949 bool has_content = !current_surface_size_.IsEmpty();
949 950
950 base::Closure ack_callback = 951 base::Closure ack_callback =
951 base::Bind(&RenderWidgetHostViewAndroid::SendReclaimCompositorResources, 952 base::Bind(&RenderWidgetHostViewAndroid::SendReclaimCompositorResources,
952 weak_ptr_factory_.GetWeakPtr(), output_surface_id, 953 weak_ptr_factory_.GetWeakPtr(), output_surface_id,
953 true /* is_swap_ack */); 954 true /* is_swap_ack */);
954 955
955 ack_callbacks_.push(ack_callback); 956 ack_callbacks_.push(ack_callback);
956 957
957 if (!has_content) { 958 if (!has_content) {
958 DestroyDelegatedContent(); 959 DestroyDelegatedContent();
959 } else { 960 } else {
960 cc::SurfaceFactory::DrawCallback ack_callback = 961 cc::SurfaceFactory::DrawCallback ack_callback =
961 base::Bind(&RenderWidgetHostViewAndroid::RunAckCallbacks, 962 base::Bind(&RenderWidgetHostViewAndroid::RunAckCallbacks,
962 weak_ptr_factory_.GetWeakPtr()); 963 weak_ptr_factory_.GetWeakPtr());
963 delegated_frame_host_->SubmitCompositorFrame(std::move(frame), 964 delegated_frame_host_->SubmitCompositorFrame(std::move(frame),
964 ack_callback); 965 ack_callback);
965 frame_evictor_->SwappedFrame(!host_->is_hidden()); 966 frame_evictor_->SwappedFrame(!host_->is_hidden());
966 } 967 }
967 968
968 if (host_->is_hidden()) 969 if (host_->is_hidden())
969 RunAckCallbacks(); 970 RunAckCallbacks();
970 971
971 // As the metadata update may trigger view invalidation, always call it after 972 // As the metadata update may trigger view invalidation, always call it after
972 // any potential compositor scheduling. 973 // any potential compositor scheduling.
973 OnFrameMetadataUpdated(std::move(metadata)); 974 OnFrameMetadataUpdated(std::move(metadata), is_transparent);
974 } 975 }
975 976
976 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { 977 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() {
977 DCHECK(!delegated_frame_host_ || 978 DCHECK(!delegated_frame_host_ ||
978 delegated_frame_host_->HasDelegatedContent() == 979 delegated_frame_host_->HasDelegatedContent() ==
979 frame_evictor_->HasFrame()); 980 frame_evictor_->HasFrame());
980 DCHECK_EQ(locks_on_frame_count_, 0u); 981 DCHECK_EQ(locks_on_frame_count_, 0u);
981 982
982 if (!delegated_frame_host_) 983 if (!delegated_frame_host_)
983 return; 984 return;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 new LastFrameInfo(output_surface_id, std::move(frame))); 1021 new LastFrameInfo(output_surface_id, std::move(frame)));
1021 } 1022 }
1022 1023
1023 void RenderWidgetHostViewAndroid::SynchronousFrameMetadata( 1024 void RenderWidgetHostViewAndroid::SynchronousFrameMetadata(
1024 cc::CompositorFrameMetadata frame_metadata) { 1025 cc::CompositorFrameMetadata frame_metadata) {
1025 if (!content_view_core_) 1026 if (!content_view_core_)
1026 return; 1027 return;
1027 1028
1028 // This is a subset of OnSwapCompositorFrame() used in the synchronous 1029 // This is a subset of OnSwapCompositorFrame() used in the synchronous
1029 // compositor flow. 1030 // compositor flow.
1030 OnFrameMetadataUpdated(frame_metadata.Clone()); 1031 OnFrameMetadataUpdated(frame_metadata.Clone(), false);
no sievers 2016/09/02 22:06:52 +Bo for whether WebView needs to worry about this
boliu 2016/09/02 22:52:11 Don't think so. Webview disables video overlays be
1031 1032
1032 // DevTools ScreenCast support for Android WebView. 1033 // DevTools ScreenCast support for Android WebView.
1033 WebContents* web_contents = content_view_core_->GetWebContents(); 1034 WebContents* web_contents = content_view_core_->GetWebContents();
1034 if (DevToolsAgentHost::HasFor(web_contents)) { 1035 if (DevToolsAgentHost::HasFor(web_contents)) {
1035 scoped_refptr<DevToolsAgentHost> dtah = 1036 scoped_refptr<DevToolsAgentHost> dtah =
1036 DevToolsAgentHost::GetOrCreateFor(web_contents); 1037 DevToolsAgentHost::GetOrCreateFor(web_contents);
1037 // Unblock the compositor. 1038 // Unblock the compositor.
1038 BrowserThread::PostTask( 1039 BrowserThread::PostTask(
1039 BrowserThread::UI, FROM_HERE, 1040 BrowserThread::UI, FROM_HERE,
1040 base::Bind( 1041 base::Bind(
1041 &RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame, 1042 &RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame,
1042 static_cast<RenderFrameDevToolsAgentHost*>(dtah.get()), 1043 static_cast<RenderFrameDevToolsAgentHost*>(dtah.get()),
1043 base::Passed(&frame_metadata))); 1044 base::Passed(&frame_metadata)));
1044 } 1045 }
1045 } 1046 }
1046 1047
1047 void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) {
1048 if (delegated_frame_host_)
1049 delegated_frame_host_->SetContentsOpaque(!enabled);
1050 }
1051
1052 bool RenderWidgetHostViewAndroid::SupportsAnimation() const { 1048 bool RenderWidgetHostViewAndroid::SupportsAnimation() const {
1053 // The synchronous (WebView) compositor does not have a proper browser 1049 // The synchronous (WebView) compositor does not have a proper browser
1054 // compositor with which to drive animations. 1050 // compositor with which to drive animations.
1055 return using_browser_compositor_; 1051 return using_browser_compositor_;
1056 } 1052 }
1057 1053
1058 void RenderWidgetHostViewAndroid::SetNeedsAnimate() { 1054 void RenderWidgetHostViewAndroid::SetNeedsAnimate() {
1059 DCHECK(content_view_core_ && content_view_core_->GetWindowAndroid()); 1055 DCHECK(content_view_core_ && content_view_core_->GetWindowAndroid());
1060 DCHECK(using_browser_compositor_); 1056 DCHECK(using_browser_compositor_);
1061 content_view_core_->GetWindowAndroid()->SetNeedsAnimate(); 1057 content_view_core_->GetWindowAndroid()->SetNeedsAnimate();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 kPremul_SkAlphaType)); 1139 kPremul_SkAlphaType));
1144 SkCanvas canvas(bitmap); 1140 SkCanvas canvas(bitmap);
1145 canvas.scale( 1141 canvas.scale(
1146 (float)output_width / (float)input_size_in_pixel.width(), 1142 (float)output_width / (float)input_size_in_pixel.width(),
1147 (float)output_height / (float)input_size_in_pixel.height()); 1143 (float)output_height / (float)input_size_in_pixel.height());
1148 sync_compositor_->DemandDrawSw(&canvas); 1144 sync_compositor_->DemandDrawSw(&canvas);
1149 callback.Run(bitmap, READBACK_SUCCESS); 1145 callback.Run(bitmap, READBACK_SUCCESS);
1150 } 1146 }
1151 1147
1152 void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated( 1148 void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
1153 const cc::CompositorFrameMetadata& frame_metadata) { 1149 const cc::CompositorFrameMetadata& frame_metadata,
1150 bool is_transparent) {
1154 bool is_mobile_optimized = IsMobileOptimizedFrame(frame_metadata); 1151 bool is_mobile_optimized = IsMobileOptimizedFrame(frame_metadata);
1155 gesture_provider_.SetDoubleTapSupportForPageEnabled(!is_mobile_optimized); 1152 gesture_provider_.SetDoubleTapSupportForPageEnabled(!is_mobile_optimized);
1156 1153
1157 if (!content_view_core_) 1154 if (!content_view_core_)
1158 return; 1155 return;
1159 1156
1160 if (overscroll_controller_) 1157 if (overscroll_controller_)
1161 overscroll_controller_->OnFrameMetadataUpdated(frame_metadata); 1158 overscroll_controller_->OnFrameMetadataUpdated(frame_metadata);
1162 1159
1163 if (selection_controller_) { 1160 if (selection_controller_) {
1164 selection_controller_->OnSelectionEditable( 1161 selection_controller_->OnSelectionEditable(
1165 frame_metadata.selection.is_editable); 1162 frame_metadata.selection.is_editable);
1166 selection_controller_->OnSelectionEmpty( 1163 selection_controller_->OnSelectionEmpty(
1167 frame_metadata.selection.is_empty_text_form_control); 1164 frame_metadata.selection.is_empty_text_form_control);
1168 selection_controller_->OnSelectionBoundsChanged( 1165 selection_controller_->OnSelectionBoundsChanged(
1169 frame_metadata.selection.start, frame_metadata.selection.end); 1166 frame_metadata.selection.start, frame_metadata.selection.end);
1170 1167
1171 // Set parameters for adaptive handle orientation. 1168 // Set parameters for adaptive handle orientation.
1172 gfx::SizeF viewport_size(frame_metadata.scrollable_viewport_size); 1169 gfx::SizeF viewport_size(frame_metadata.scrollable_viewport_size);
1173 viewport_size.Scale(frame_metadata.page_scale_factor); 1170 viewport_size.Scale(frame_metadata.page_scale_factor);
1174 gfx::RectF viewport_rect(0.0f, frame_metadata.top_controls_height * 1171 gfx::RectF viewport_rect(0.0f, frame_metadata.top_controls_height *
1175 frame_metadata.top_controls_shown_ratio, 1172 frame_metadata.top_controls_shown_ratio,
1176 viewport_size.width(), viewport_size.height()); 1173 viewport_size.width(), viewport_size.height());
1177 selection_controller_->OnViewportChanged(viewport_rect); 1174 selection_controller_->OnViewportChanged(viewport_rect);
1178 } 1175 }
1179 1176
1180 UpdateBackgroundColor(frame_metadata.root_background_color); 1177 UpdateBackgroundColor(is_transparent ? SK_ColorTRANSPARENT
1178 : frame_metadata.root_background_color);
1181 1179
1182 // All offsets and sizes are in CSS pixels. 1180 // All offsets and sizes are in CSS pixels.
1183 content_view_core_->UpdateFrameInfo( 1181 content_view_core_->UpdateFrameInfo(
1184 frame_metadata.root_scroll_offset, 1182 frame_metadata.root_scroll_offset,
1185 frame_metadata.page_scale_factor, 1183 frame_metadata.page_scale_factor,
1186 gfx::Vector2dF(frame_metadata.min_page_scale_factor, 1184 gfx::Vector2dF(frame_metadata.min_page_scale_factor,
1187 frame_metadata.max_page_scale_factor), 1185 frame_metadata.max_page_scale_factor),
1188 frame_metadata.root_layer_size, 1186 frame_metadata.root_layer_size,
1189 frame_metadata.scrollable_viewport_size, 1187 frame_metadata.scrollable_viewport_size,
1190 frame_metadata.top_controls_height, 1188 frame_metadata.top_controls_height,
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
1870 case ui::MotionEvent::ACTION_UP: 1868 case ui::MotionEvent::ACTION_UP:
1871 case ui::MotionEvent::ACTION_POINTER_UP: 1869 case ui::MotionEvent::ACTION_POINTER_UP:
1872 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.OS.TOUCH_RELEASED", 1870 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.OS.TOUCH_RELEASED",
1873 delta.InMicroseconds(), 1, 1000000, 50); 1871 delta.InMicroseconds(), 1, 1000000, 50);
1874 default: 1872 default:
1875 return; 1873 return;
1876 } 1874 }
1877 } 1875 }
1878 1876
1879 } // namespace content 1877 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698