// Copyright 2011 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_DEBUG_LAYER_TREE_DEBUG_STATE_H_
#define CC_DEBUG_LAYER_TREE_DEBUG_STATE_H_

#include "cc/base/cc_export.h"

namespace cc {

namespace proto {
class LayerTreeDebugState;
}  // namespace proto

class CC_EXPORT LayerTreeDebugState {
 public:
  LayerTreeDebugState();
  LayerTreeDebugState(const LayerTreeDebugState& other);
  ~LayerTreeDebugState();

  bool show_fps_counter;
  bool show_debug_borders;

  bool show_paint_rects;
  bool show_property_changed_rects;
  bool show_surface_damage_rects;
  bool show_screen_space_rects;
  bool show_replica_screen_space_rects;
  bool show_touch_event_handler_rects;
  bool show_wheel_event_handler_rects;
  bool show_scroll_event_handler_rects;
  bool show_non_fast_scrollable_rects;
  bool show_layer_animation_bounds_rects;

  int slow_down_raster_scale_factor;
  bool rasterize_only_visible_content;
  bool show_picture_borders;

  void SetRecordRenderingStats(bool enabled);
  bool RecordRenderingStats() const;

  bool ShowHudInfo() const;
  bool ShowHudRects() const;
  bool ShowMemoryStats() const;

  void ToProtobuf(proto::LayerTreeDebugState* proto) const;
  void FromProtobuf(const proto::LayerTreeDebugState& proto);

  static bool Equal(const LayerTreeDebugState& a, const LayerTreeDebugState& b);
  static LayerTreeDebugState Unite(const LayerTreeDebugState& a,
                                   const LayerTreeDebugState& b);

 private:
  bool record_rendering_stats_;
};

}  // namespace cc

#endif  // CC_DEBUG_LAYER_TREE_DEBUG_STATE_H_
