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