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

Unified Diff: components/mus/ws/server_window_surface_manager.cc

Issue 1673783004: Hook up BeginFrameSource to SurfaceFactoryClient via SurfaceManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Register id namespace on Android Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/mus/ws/server_window_surface_manager.h ('k') | components/mus/ws/test_server_window_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/mus/ws/server_window_surface_manager.cc
diff --git a/components/mus/ws/server_window_surface_manager.cc b/components/mus/ws/server_window_surface_manager.cc
index 1699de41bc8006f97d94066f349ca176f0927731..83323d2508cf3fd39fbea050896bbe9a41564be3 100644
--- a/components/mus/ws/server_window_surface_manager.cc
+++ b/components/mus/ws/server_window_surface_manager.cc
@@ -4,6 +4,7 @@
#include "components/mus/ws/server_window_surface_manager.h"
+#include "components/mus/surfaces/surfaces_state.h"
#include "components/mus/ws/server_window.h"
#include "components/mus/ws/server_window_delegate.h"
#include "components/mus/ws/server_window_surface.h"
@@ -16,9 +17,15 @@ ServerWindowSurfaceManager::ServerWindowSurfaceManager(ServerWindow* window)
surface_id_allocator_(WindowIdToTransportId(window->id())),
waiting_for_initial_frames_(
window_->properties().count(mus::mojom::kWaitForUnderlay_Property) >
- 0) {}
+ 0) {
+ surface_id_allocator_.RegisterSurfaceIdNamespace(GetSurfaceManager());
+}
-ServerWindowSurfaceManager::~ServerWindowSurfaceManager() {}
+ServerWindowSurfaceManager::~ServerWindowSurfaceManager() {
+ // Explicitly clear the type to surface manager so that this manager
+ // is still valid prior during ~ServerWindowSurface.
+ type_to_surface_map_.clear();
+}
bool ServerWindowSurfaceManager::ShouldDraw() {
if (!waiting_for_initial_frames_)
@@ -34,8 +41,16 @@ void ServerWindowSurfaceManager::CreateSurface(
mojom::SurfaceType surface_type,
mojo::InterfaceRequest<mojom::Surface> request,
mojom::SurfaceClientPtr client) {
- type_to_surface_map_[surface_type] = make_scoped_ptr(new ServerWindowSurface(
+ scoped_ptr<ServerWindowSurface> surface(new ServerWindowSurface(
this, surface_type, std::move(request), std::move(client)));
+ if (!HasAnySurface()) {
+ // Only one SurfaceFactoryClient can be registered per surface id namespace,
+ // so register the first one. Since all surfaces created by this manager
+ // represent the same window, the begin frame source can be shared by
+ // all surfaces created here.
+ surface->RegisterForBeginFrames();
+ }
+ type_to_surface_map_[surface_type] = std::move(surface);
}
ServerWindowSurface* ServerWindowSurfaceManager::GetDefaultSurface() {
@@ -52,10 +67,19 @@ ServerWindowSurface* ServerWindowSurfaceManager::GetSurfaceByType(
return iter == type_to_surface_map_.end() ? nullptr : iter->second.get();
}
-bool ServerWindowSurfaceManager::HasSurfaceOfType(mojom::SurfaceType type) {
+bool ServerWindowSurfaceManager::HasSurfaceOfType(
+ mojom::SurfaceType type) const {
return type_to_surface_map_.count(type) > 0;
}
+bool ServerWindowSurfaceManager::HasAnySurface() {
+ return GetDefaultSurface() || GetUnderlaySurface();
+}
+
+cc::SurfaceManager* ServerWindowSurfaceManager::GetSurfaceManager() {
+ return window()->delegate()->GetSurfacesState()->manager();
+}
+
bool ServerWindowSurfaceManager::IsSurfaceReadyAndNonEmpty(
mojom::SurfaceType type) const {
auto iter = type_to_surface_map_.find(type);
« no previous file with comments | « components/mus/ws/server_window_surface_manager.h ('k') | components/mus/ws/test_server_window_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698