// Copyright 2013 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_TEST_FAKE_LAYER_TREE_FRAME_SINK_CLIENT_H_
#define CC_TEST_FAKE_LAYER_TREE_FRAME_SINK_CLIENT_H_

#include "cc/trees/layer_tree_frame_sink_client.h"

#include "cc/trees/managed_memory_policy.h"

namespace cc {

class FakeLayerTreeFrameSinkClient : public LayerTreeFrameSinkClient {
 public:
  FakeLayerTreeFrameSinkClient() : memory_policy_(0) {}

  void SetBeginFrameSource(viz::BeginFrameSource* source) override;
  base::Optional<viz::HitTestRegionList> BuildHitTestData() override;
  void DidReceiveCompositorFrameAck() override;
  void DidPresentCompositorFrame(
      uint32_t presentation_token,
      const gfx::PresentationFeedback& feedback) override {}
  void ReclaimResources(
      const std::vector<viz::ReturnedResource>& resources) override {}
  void DidLoseLayerTreeFrameSink() override;
  void DidNotNeedBeginFrame() override {}
  void SetExternalTilePriorityConstraints(
      const gfx::Rect& viewport_rect_for_tile_priority,
      const gfx::Transform& transform_for_tile_priority) override {}
  void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override;
  void SetTreeActivationCallback(const base::Closure&) override {}
  void OnDraw(const gfx::Transform& transform,
              const gfx::Rect& viewport,
              bool resourceless_software_draw,
              bool skip_draw) override {}

  int ack_count() { return ack_count_; }

  bool did_lose_layer_tree_frame_sink_called() {
    return did_lose_layer_tree_frame_sink_called_;
  }

  const ManagedMemoryPolicy& memory_policy() const { return memory_policy_; }

  viz::BeginFrameSource* begin_frame_source() const {
    return begin_frame_source_;
  }

 private:
  int ack_count_ = 0;
  bool did_lose_layer_tree_frame_sink_called_ = false;
  ManagedMemoryPolicy memory_policy_;
  viz::BeginFrameSource* begin_frame_source_;
};

}  // namespace cc

#endif  // CC_TEST_FAKE_LAYER_TREE_FRAME_SINK_CLIENT_H_
