// Copyright 2010 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_RESOURCES_PRIORITY_CALCULATOR_H_
#define CC_RESOURCES_PRIORITY_CALCULATOR_H_

#include "base/basictypes.h"
#include "cc/base/cc_export.h"

namespace gfx { class Rect; }

namespace cc {

class CC_EXPORT PriorityCalculator {
 public:
  PriorityCalculator() {}

  static int UIPriority(bool draws_to_root_surface);
  static int VisiblePriority(bool draws_to_root_surface);
  static int RenderSurfacePriority();
  static int LingeringPriority(int previous_priority);
  static int PriorityFromDistance(gfx::Rect visible_rect,
                                  gfx::Rect texture_rect,
                                  bool draws_to_root_surface);
  static int SmallAnimatedLayerMinPriority();

  static int HighestPriority();
  static int LowestPriority();
  static inline bool priority_is_lower(int a, int b) { return a > b; }
  static inline bool priority_is_higher(int a, int b) { return a < b; }
  static inline int max_priority(int a, int b) {
    return priority_is_higher(a, b) ? a : b;
  }

  static int AllowNothingCutoff();
  static int AllowVisibleOnlyCutoff();
  static int AllowVisibleAndNearbyCutoff();
  static int AllowEverythingCutoff();

 private:
  DISALLOW_COPY_AND_ASSIGN(PriorityCalculator);
};

}  // namespace cc

#endif  // CC_RESOURCES_PRIORITY_CALCULATOR_H_
