12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_OUTPUT_OUTPUT_SURFACE_CLIENT_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_OUTPUT_OUTPUT_SURFACE_CLIENT_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/callback.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/memory/ref_counted.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "cc/output/begin_frame_args.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "cc/output/context_provider.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/rect.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace gfx { 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class Transform; 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CompositorFrameAck; 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochstruct ManagedMemoryPolicy; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT OutputSurfaceClient { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Called to synchronously re-initialize using the Context3D. Upon returning 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // the compositor should be able to draw using GL what was previously 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // committed. 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool DeferredInitialize( 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_refptr<ContextProvider> offscreen_context_provider) = 0; 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void ReleaseGL() = 0; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetNeedsRedrawRect(gfx::Rect damage_rect) = 0; 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void BeginFrame(const BeginFrameArgs& args) = 0; 355e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) virtual void OnSwapBuffersComplete(const CompositorFrameAck* ack) = 0; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DidLoseOutputSurface() = 0; 37fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch virtual void SetExternalStencilTest(bool enabled) = 0; 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void SetExternalDrawConstraints(const gfx::Transform& transform, 39438599f994082010ffd07abcbecb7a97956451e2Bo Liu gfx::Rect viewport, 40438599f994082010ffd07abcbecb7a97956451e2Bo Liu gfx::Rect clip, 41438599f994082010ffd07abcbecb7a97956451e2Bo Liu bool valid_for_tile_management) = 0; 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void SetDiscardBackBufferWhenNotVisible(bool discard) = 0; 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void SetMemoryPolicy(const ManagedMemoryPolicy& policy) = 0; 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // If set, |callback| will be called subsequent to each new tree activation, 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // regardless of the compositor visibility or damage. |callback| must remain 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // valid for the lifetime of the OutputSurfaceClient or until unregisted -- 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // use SetTreeActivationCallback(base::Closure()) to unregister it. 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void SetTreeActivationCallback(const base::Closure& callback) = 0; 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~OutputSurfaceClient() {} 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_OUTPUT_OUTPUT_SURFACE_CLIENT_H_ 57