// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_
#define CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_

#include "cc/surfaces/display_client.h"

#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/single_thread_task_runner.h"
#include "cc/surfaces/display.h"
#include "cc/surfaces/surfaces_export.h"

namespace cc {
class ContextProvider;
class SurfaceManager;
class SurfaceDisplayOutputSurface;

// This class provides a DisplayClient implementation for drawing directly to an
// onscreen context.
class CC_SURFACES_EXPORT OnscreenDisplayClient
    : NON_EXPORTED_BASE(DisplayClient) {
 public:
  OnscreenDisplayClient(
      scoped_ptr<OutputSurface> output_surface,
      SurfaceManager* manager,
      SharedBitmapManager* bitmap_manager,
      gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
      const RendererSettings& settings,
      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
  ~OnscreenDisplayClient() override;

  bool Initialize();
  Display* display() { return display_.get(); }
  void set_surface_output_surface(SurfaceDisplayOutputSurface* surface) {
    surface_display_output_surface_ = surface;
  }

  // DisplayClient implementation.
  void DisplayDamaged() override;
  void DidSwapBuffers() override;
  void DidSwapBuffersComplete() override;
  void CommitVSyncParameters(base::TimeTicks timebase,
                             base::TimeDelta interval) override;
  void OutputSurfaceLost() override;
  void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override;

  bool output_surface_lost() { return output_surface_lost_; }

 private:
  void ScheduleDraw();
  void Draw();

  scoped_ptr<OutputSurface> output_surface_;
  scoped_ptr<Display> display_;
  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
  SurfaceDisplayOutputSurface* surface_display_output_surface_;
  bool scheduled_draw_;
  bool output_surface_lost_;
  // True if a draw should be scheduled, but it's hit the limit on max frames
  // pending.
  bool deferred_draw_;
  int pending_frames_;

  base::WeakPtrFactory<OnscreenDisplayClient> weak_ptr_factory_;

  DISALLOW_COPY_AND_ASSIGN(OnscreenDisplayClient);
};

}  // namespace cc

#endif  // CC_SURFACES_ONSCREEN_DISPLAY_CLIENT_H_
