Index: android_webview/browser/surfaces_instance.cc |
diff --git a/android_webview/browser/surfaces_instance.cc b/android_webview/browser/surfaces_instance.cc |
index c09e9a606a40e7ba6b58e7fc0cb85493660dd18f..9454df92a85557134cc50ba1adb0b7765cdf9b33 100644 |
--- a/android_webview/browser/surfaces_instance.cc |
+++ b/android_webview/browser/surfaces_instance.cc |
@@ -14,6 +14,7 @@ |
#include "base/memory/ptr_util.h" |
#include "cc/output/renderer_settings.h" |
#include "cc/output/texture_mailbox_deleter.h" |
+#include "cc/quads/solid_color_draw_quad.h" |
#include "cc/quads/surface_draw_quad.h" |
#include "cc/scheduler/begin_frame_source.h" |
#include "cc/surfaces/compositor_frame_sink_support.h" |
@@ -140,8 +141,9 @@ void SurfacesInstance::DrawAndSwap(const gfx::Size& viewport, |
frame.render_pass_list.push_back(std::move(render_pass)); |
frame.metadata.referenced_surfaces = child_ids_; |
- if (!root_id_.is_valid()) { |
+ if (!root_id_.is_valid() || frame_size != surface_size_) { |
root_id_ = local_surface_id_allocator_->GenerateId(); |
+ surface_size_ = frame_size; |
display_->SetLocalSurfaceId(root_id_, 1.f); |
} |
support_->SubmitCompositorFrame(root_id_, std::move(frame)); |
@@ -167,7 +169,17 @@ void SurfacesInstance::RemoveChildId(const cc::SurfaceId& child_id) { |
} |
void SurfacesInstance::SetEmptyRootFrame() { |
boliu
2017/05/04 17:08:00
rename the method name and variable names please,
Saman Sami
2017/05/04 21:38:46
Done.
|
+ if (!root_id_.is_valid()) |
boliu
2017/05/04 17:08:00
this should be a DCHECK it looks like? every call
Saman Sami
2017/05/04 21:38:46
Done.
|
+ return; |
+ std::unique_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create(); |
+ cc::SharedQuadState* quad_state = |
+ render_pass->CreateAndAppendSharedQuadState(); |
+ gfx::Rect rect(surface_size_); |
+ cc::SolidColorDrawQuad* solid_quad = |
+ render_pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>(); |
+ solid_quad->SetNew(quad_state, rect, rect, SK_ColorBLACK, false); |
cc::CompositorFrame empty_frame; |
+ empty_frame.render_pass_list.push_back(std::move(render_pass)); |
// We draw synchronously, so acknowledge a manual BeginFrame. |
empty_frame.metadata.begin_frame_ack = |
cc::BeginFrameAck::CreateManualAckWithDamage(); |