146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef CONTENT_BROWSER_COMPOSITOR_ONSCREEN_DISPLAY_CLIENT_H_
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define CONTENT_BROWSER_COMPOSITOR_ONSCREEN_DISPLAY_CLIENT_H_
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "cc/surfaces/display_client.h"
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/ref_counted.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/single_thread_task_runner.h"
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "cc/surfaces/display.h"
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace cc {
1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class ContextProvider;
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class SurfaceManager;
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace content {
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SurfaceDisplayOutputSurface;
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// This class provides a DisplayClient implementation for drawing directly to an
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// onscreen context.
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class OnscreenDisplayClient : cc::DisplayClient {
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  OnscreenDisplayClient(
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      scoped_ptr<cc::OutputSurface> output_surface,
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      cc::SurfaceManager* manager,
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~OnscreenDisplayClient();
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  cc::Display* display() { return display_.get(); }
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void set_surface_output_surface(SurfaceDisplayOutputSurface* surface) {
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    surface_display_output_surface_ = surface;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // cc::DisplayClient implementation.
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual scoped_ptr<cc::OutputSurface> CreateOutputSurface() OVERRIDE;
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void DisplayDamaged() OVERRIDE;
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void DidSwapBuffers() OVERRIDE;
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void DidSwapBuffersComplete() OVERRIDE;
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void CommitVSyncParameters(base::TimeTicks timebase,
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                     base::TimeDelta interval) OVERRIDE;
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void ScheduleDraw();
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void Draw();
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<cc::OutputSurface> output_surface_;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<cc::Display> display_;
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SurfaceDisplayOutputSurface* surface_display_output_surface_;
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool scheduled_draw_;
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // True if a draw should be scheduled, but it's hit the limit on max frames
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // pending.
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool deferred_draw_;
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int pending_frames_;
5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::WeakPtrFactory<OnscreenDisplayClient> weak_ptr_factory_;
6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(OnscreenDisplayClient);
6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}  // namespace content
6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif  // CONTENT_BROWSER_COMPOSITOR_ONSCREEN_DISPLAY_CLIENT_H_
68