Index: ui/aura/mus/window_port_mus.cc |
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc |
index b946380ee01b382faa7ee45716b51182c7f698b6..f77e54dc9d53e34c4e2702cc97276a89355434f1 100644 |
--- a/ui/aura/mus/window_port_mus.cc |
+++ b/ui/aura/mus/window_port_mus.cc |
@@ -7,6 +7,7 @@ |
#include "base/memory/ptr_util.h" |
#include "ui/aura/client/aura_constants.h" |
#include "ui/aura/client/transient_window_client.h" |
+#include "ui/aura/env.h" |
#include "ui/aura/mus/client_surface_embedder.h" |
#include "ui/aura/mus/property_converter.h" |
#include "ui/aura/mus/window_tree_client.h" |
@@ -496,12 +497,28 @@ void WindowPortMus::OnPropertyChanged(const void* key, |
std::unique_ptr<cc::CompositorFrameSink> |
WindowPortMus::CreateCompositorFrameSink() { |
Fady Samuel
2017/05/18 20:02:02
This is super confusing. We have a RequestComposit
Peng
2017/05/18 20:51:00
Done
|
- // TODO(penghuang): Implement it for Mus. |
- return nullptr; |
+ // We only allow creating a compositor frame sink for a local window. |
+ if (window_mus_type() != WindowMusType::LOCAL) |
+ return nullptr; |
+ |
+ ui::ContextFactory* context_factory = |
+ aura::Env::GetInstance()->context_factory(); |
+ std::unique_ptr<ui::ClientCompositorFrameSinkBinding> frame_sink_binding; |
+ // The compositor frame sink is for a local window, so we don't need surface |
+ // synchronization. |
+ const bool enable_surface_synchronization = false; |
Fady Samuel
2017/05/18 20:02:02
Surface synchronization is actually a requirement
Peng
2017/05/18 20:50:59
As my understanding, when the the CompositorFrameS
Fady Samuel
2017/05/18 20:56:22
Without surface synchronization, there is no guara
Peng
2017/05/23 18:00:42
Done.
|
+ std::unique_ptr<ui::ClientCompositorFrameSink> frame_sink = |
+ ui::ClientCompositorFrameSink::Create( |
+ nullptr /* context_provider */, |
+ context_factory->GetGpuMemoryBufferManager(), &frame_sink_binding, |
+ enable_surface_synchronization); |
+ AttachCompositorFrameSink(std::move(frame_sink_binding)); |
+ return std::move(frame_sink); |
} |
cc::SurfaceId WindowPortMus::GetSurfaceId() const { |
- // TODO(penghuang): Implement it for Mus. |
+ // This method is only used by exo unittests which are not running against |
+ // mus, so don't implement it now. |
return cc::SurfaceId(); |
} |
@@ -520,11 +537,6 @@ void WindowPortMus::UpdatePrimarySurfaceInfo() { |
} |
void WindowPortMus::UpdateClientSurfaceEmbedder() { |
- bool embeds_surface = window_mus_type() == WindowMusType::TOP_LEVEL_IN_WM || |
- window_mus_type() == WindowMusType::EMBED_IN_OWNER; |
- if (!embeds_surface) |
- return; |
- |
if (!client_surface_embedder_) { |
client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>( |
window_, window_tree_client_->normal_client_area_insets_); |