| Index: cc/output/output_surface.h
|
| diff --git a/cc/output/output_surface.h b/cc/output/output_surface.h
|
| index d263d3a54ac0ca7a4d4b1340e5e12a039f1802c2..8f782d77cf3241b814478526b2791172f4712f72 100644
|
| --- a/cc/output/output_surface.h
|
| +++ b/cc/output/output_surface.h
|
| @@ -12,6 +12,7 @@
|
| #include "cc/base/cc_export.h"
|
| #include "cc/output/context_provider.h"
|
| #include "cc/output/software_output_device.h"
|
| +#include "cc/scheduler/frame_rate_controller.h"
|
| #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
|
|
|
| namespace ui { struct LatencyInfo; }
|
| @@ -19,13 +20,16 @@ namespace ui { struct LatencyInfo; }
|
| namespace gfx {
|
| class Rect;
|
| class Size;
|
| +class Transform;
|
| }
|
|
|
| namespace cc {
|
|
|
| class CompositorFrame;
|
| +class CompositorFrameAck;
|
| class OutputSurfaceClient;
|
| class OutputSurfaceCallbacks;
|
| +class Thread;
|
|
|
| // Represents the output surface for a compositor. The compositor owns
|
| // and manages its destruction. Its lifetime is:
|
| @@ -34,7 +38,7 @@ class OutputSurfaceCallbacks;
|
| // From here on, it will only be used on the compositor thread.
|
| // 3. If the 3D context is lost, then the compositor will delete the output
|
| // surface (on the compositor thread) and go back to step 1.
|
| -class CC_EXPORT OutputSurface {
|
| +class CC_EXPORT OutputSurface : public FrameRateControllerClient {
|
| public:
|
| explicit OutputSurface(scoped_ptr<WebKit::WebGraphicsContext3D> context3d);
|
|
|
| @@ -83,6 +87,13 @@ class CC_EXPORT OutputSurface {
|
| // thread.
|
| virtual bool BindToClient(OutputSurfaceClient* client);
|
|
|
| + void InitializeBeginFrameEmulation(
|
| + Thread* thread,
|
| + bool throttle_frame_production,
|
| + base::TimeDelta interval);
|
| +
|
| + void SetMaxFramesPending(int max_frames_pending);
|
| +
|
| virtual void EnsureBackbuffer();
|
| virtual void DiscardBackbuffer();
|
|
|
| @@ -103,7 +114,7 @@ class CC_EXPORT OutputSurface {
|
| // Requests a BeginFrame notification from the output surface. The
|
| // notification will be delivered by calling
|
| // OutputSurfaceClient::BeginFrame until the callback is disabled.
|
| - virtual void SetNeedsBeginFrame(bool enable) {}
|
| + virtual void SetNeedsBeginFrame(bool enable);
|
|
|
| protected:
|
| // Synchronously initialize context3d and enter hardware mode.
|
| @@ -116,7 +127,6 @@ class CC_EXPORT OutputSurface {
|
|
|
| void PostSwapBuffersComplete();
|
|
|
| - OutputSurfaceClient* client_;
|
| struct cc::OutputSurface::Capabilities capabilities_;
|
| scoped_ptr<OutputSurfaceCallbacks> callbacks_;
|
| scoped_ptr<WebKit::WebGraphicsContext3D> context3d_;
|
| @@ -125,12 +135,34 @@ class CC_EXPORT OutputSurface {
|
| bool has_swap_buffers_complete_callback_;
|
| gfx::Size surface_size_;
|
| float device_scale_factor_;
|
| + base::WeakPtrFactory<OutputSurface> weak_ptr_factory_;
|
| +
|
| + // The FrameRateController is deprecated.
|
| + // Platforms should move to native BeginFrames instead.
|
| + void OnVSyncParametersChanged(base::TimeTicks timebase,
|
| + base::TimeDelta interval);
|
| + virtual void FrameRateControllerTick(bool throttled) OVERRIDE;
|
| + scoped_ptr<FrameRateController> frame_rate_controller_;
|
| + int max_frames_pending_;
|
| + int pending_swap_buffers_;
|
| + bool begin_frame_pending_;
|
| +
|
| + // Forwarded to OutputSurfaceClient but threaded through OutputSurface
|
| + // first so OutputSurface has a chance to update the FrameRateController
|
| + bool HasClient() { return !!client_; }
|
| + void SetNeedsRedrawRect(gfx::Rect damage_rect);
|
| + void BeginFrame(base::TimeTicks frame_time);
|
| + void DidSwapBuffers();
|
| + void OnSwapBuffersComplete(const CompositorFrameAck* ack);
|
| + void DidLoseOutputSurface();
|
| + void SetExternalDrawConstraints(const gfx::Transform& transform,
|
| + gfx::Rect viewport);
|
|
|
| private:
|
| - void SetContext3D(scoped_ptr<WebKit::WebGraphicsContext3D> context3d);
|
| - void SwapBuffersComplete();
|
| + OutputSurfaceClient* client_;
|
| + friend class OutputSurfaceCallbacks;
|
|
|
| - base::WeakPtrFactory<OutputSurface> weak_ptr_factory_;
|
| + void SetContext3D(scoped_ptr<WebKit::WebGraphicsContext3D> context3d);
|
|
|
| DISALLOW_COPY_AND_ASSIGN(OutputSurface);
|
| };
|
|
|