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

Unified Diff: cc/surfaces/surface_display_output_surface.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
Index: cc/surfaces/surface_display_output_surface.cc
diff --git a/cc/surfaces/surface_display_output_surface.cc b/cc/surfaces/surface_display_output_surface.cc
index 53d781fb102335e0feecf05c93b5bc935e291473..642ec9f94b6faeb0021fdc8625f84e2a0f1f637f 100644
--- a/cc/surfaces/surface_display_output_surface.cc
+++ b/cc/surfaces/surface_display_output_surface.cc
@@ -33,7 +33,8 @@ SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface(
}
SurfaceDisplayOutputSurface::~SurfaceDisplayOutputSurface() {
- client_ = NULL;
+ if (HasClient())
+ DetachFromClient();
if (!surface_id_.is_null()) {
factory_.Destroy(surface_id_);
}
@@ -72,6 +73,9 @@ void SurfaceDisplayOutputSurface::SwapBuffers(CompositorFrame* frame) {
bool SurfaceDisplayOutputSurface::BindToClient(OutputSurfaceClient* client) {
DCHECK(client);
DCHECK(display_client_);
+ factory_.manager()->RegisterSurfaceFactoryClient(allocator_->id_namespace(),
+ this);
+
client_ = client;
// Avoid initializing GL context here, as this should be sharing the
// Display's context.
@@ -84,6 +88,16 @@ void SurfaceDisplayOutputSurface::ForceReclaimResources() {
SurfaceFactory::DrawCallback());
}
+void SurfaceDisplayOutputSurface::DetachFromClient() {
+ DCHECK(HasClient());
+ // Unregister the SurfaceFactoryClient here instead of the dtor so that only
+ // one client is alive for this namespace at any given time.
+ factory_.manager()->UnregisterSurfaceFactoryClient(
+ allocator_->id_namespace());
+ OutputSurface::DetachFromClient();
+ DCHECK(!HasClient());
+}
+
void SurfaceDisplayOutputSurface::ReturnResources(
const ReturnedResourceArray& resources) {
CompositorFrameAck ack;
@@ -93,7 +107,6 @@ void SurfaceDisplayOutputSurface::ReturnResources(
}
void SurfaceDisplayOutputSurface::SetBeginFrameSource(
- SurfaceId surface_id,
BeginFrameSource* begin_frame_source) {
// TODO(tansell): Hook this up.
}
« no previous file with comments | « cc/surfaces/surface_display_output_surface.h ('k') | cc/surfaces/surface_display_output_surface_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698