11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef MOJO_SERVICES_VIEW_MANAGER_DISPLAY_MANAGER_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define MOJO_SERVICES_VIEW_MANAGER_DISPLAY_MANAGER_H_
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <map>
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/basictypes.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/weak_ptr.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/timer/timer.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "cc/surfaces/surface_id.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/public/cpp/bindings/callback.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/interfaces/native_viewport/native_viewport.mojom.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/interfaces/surfaces/surfaces.mojom.h"
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/interfaces/surfaces/surfaces_service.mojom.h"
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/view_manager/view_manager_export.h"
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/rect.h"
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace cc {
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SurfaceIdAllocator;
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace mojo {
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ApplicationConnection;
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace service {
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ConnectionManager;
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ServerView;
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// DisplayManager binds the root node to an actual display.
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MOJO_VIEW_MANAGER_EXPORT DisplayManager
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : NON_EXPORTED_BASE(public NativeViewportClient),
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      NON_EXPORTED_BASE(public SurfaceClient) {
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DisplayManager(ApplicationConnection* app_connection,
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 ConnectionManager* connection_manager,
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 const Callback<void()>& native_viewport_closed_callback);
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~DisplayManager();
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Schedules a paint for the specified region of the specified view.
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SchedulePaint(const ServerView* view, const gfx::Rect& bounds);
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // See description above field for details.
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool in_setup() const { return in_setup_; }
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void OnSurfaceConnectionCreated(SurfacePtr surface, uint32_t id_namespace);
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void Draw();
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // NativeViewportClient implementation.
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnCreated(uint64_t native_viewport_id) OVERRIDE;
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnDestroyed() OVERRIDE;
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnBoundsChanged(SizePtr bounds) OVERRIDE;
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnEvent(EventPtr event,
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                       const mojo::Callback<void()>& callback) OVERRIDE;
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // SurfaceClient implementation.
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ReturnResources(Array<ReturnedResourcePtr> resources) OVERRIDE;
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ConnectionManager* connection_manager_;
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns true if adding the root view's window to |window_tree_host_|.
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool in_setup_;
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Size bounds_;
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Rect dirty_rect_;
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::Timer draw_timer_;
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SurfacesServicePtr surfaces_service_;
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SurfacePtr surface_;
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<cc::SurfaceIdAllocator> surface_id_allocator_;
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  cc::SurfaceId surface_id_;
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  NativeViewportPtr native_viewport_;
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Callback<void()> native_viewport_closed_callback_;
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::WeakPtrFactory<DisplayManager> weak_factory_;
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DISALLOW_COPY_AND_ASSIGN(DisplayManager);
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace service
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace mojo
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // MOJO_SERVICES_VIEW_MANAGER_DISPLAY_MANAGER_H_
89