1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef CC_SURFACES_DISPLAY_H_ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define CC_SURFACES_DISPLAY_H_ 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/output/output_surface_client.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "cc/output/renderer.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "cc/resources/returned_resource.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/surfaces/surface_aggregator.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "cc/surfaces/surface_id.h" 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "cc/surfaces/surface_manager.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "cc/surfaces/surfaces_export.h" 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace gfx { 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Size; 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace cc { 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass BlockingTaskRunner; 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DirectRenderer; 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class DisplayClient; 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class OutputSurface; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ResourceProvider; 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class SharedBitmapManager; 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Surface; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SurfaceAggregator; 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SurfaceIdAllocator; 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SurfaceFactory; 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A Display produces a surface that can be used to draw to a physical display 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// (OutputSurface). The client is responsible for creating and sizing the 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// surface IDs used to draw into the display and deciding when to draw. 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CC_SURFACES_EXPORT Display : public OutputSurfaceClient, 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public RendererClient, 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public SurfaceDamageObserver { 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Display(DisplayClient* client, 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SurfaceManager* manager, 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SharedBitmapManager* bitmap_manager); 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~Display(); 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Resize(SurfaceId id, const gfx::Size& new_size); 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool Draw(); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SurfaceId CurrentSurfaceId(); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int GetMaxFramesPending(); 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // OutputSurfaceClient implementation. 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void DeferredInitialize() OVERRIDE {} 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void ReleaseGL() OVERRIDE {} 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void CommitVSyncParameters(base::TimeTicks timebase, 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta interval) OVERRIDE; 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetNeedsRedrawRect(const gfx::Rect& damage_rect) OVERRIDE {} 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void BeginFrame(const BeginFrameArgs& args) OVERRIDE {} 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidSwapBuffers() OVERRIDE; 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void DidSwapBuffersComplete() OVERRIDE; 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void ReclaimResources(const CompositorFrameAck* ack) OVERRIDE {} 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void DidLoseOutputSurface() OVERRIDE {} 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetExternalDrawConstraints( 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Transform& transform, 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Rect& viewport, 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Rect& clip, 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Rect& viewport_rect_for_tile_priority, 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Transform& transform_for_tile_priority, 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool resourceless_software_draw) OVERRIDE {} 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE {} 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetTreeActivationCallback( 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::Closure& callback) OVERRIDE {} 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // RendererClient implementation. 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetFullRootLayerDamage() OVERRIDE {} 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // SurfaceDamageObserver implementation. 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void OnSurfaceDamaged(SurfaceId surface) OVERRIDE; 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private: 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void InitializeOutputSurface(); 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DisplayClient* client_; 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SurfaceManager* manager_; 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SharedBitmapManager* bitmap_manager_; 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SurfaceId current_surface_id_; 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Size current_surface_size_; 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) LayerTreeSettings settings_; 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<OutputSurface> output_surface_; 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<ResourceProvider> resource_provider_; 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<SurfaceAggregator> aggregator_; 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<DirectRenderer> renderer_; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<BlockingTaskRunner> blocking_main_thread_task_runner_; 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Display); 96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace cc 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // CC_SURFACES_DISPLAY_H_ 101