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