// Copyright 2016 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_INPUT_MAIN_THREAD_SCROLLING_REASON_H_
#define CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_

namespace cc {

// Ensure this stays in sync with MainThreadScrollingReason in histograms.xml.
// When adding a new MainThreadScrollingReason, make sure the corresponding
// [MainThread/Compositor]CanSetScrollReasons function is also updated.
struct MainThreadScrollingReason {
  // Non-transient scrolling reasons.
  enum : uint32_t { kNotScrollingOnMain = 0 };
  enum : uint32_t { kHasBackgroundAttachmentFixedObjects = 1 << 0 };
  enum : uint32_t { kHasNonLayerViewportConstrainedObjects = 1 << 1 };
  enum : uint32_t { kThreadedScrollingDisabled = 1 << 2 };
  enum : uint32_t { kScrollbarScrolling = 1 << 3 };
  enum : uint32_t { kPageOverlay = 1 << 4 };
  enum : uint32_t { kAnimatingScrollOnMainThread = 1 << 13 };

  // Transient scrolling reasons. These are computed for each scroll begin.
  enum : uint32_t { kNonFastScrollableRegion = 1 << 5 };
  enum : uint32_t { kEventHandlers = 1 << 6 };
  enum : uint32_t { kFailedHitTest = 1 << 7 };
  enum : uint32_t { kNoScrollingLayer = 1 << 8 };
  enum : uint32_t { kNotScrollable = 1 << 9 };
  enum : uint32_t { kContinuingMainThreadScroll = 1 << 10 };
  enum : uint32_t { kNonInvertibleTransform = 1 << 11 };
  enum : uint32_t { kPageBasedScrolling = 1 << 12 };

  // The number of flags in this struct (excluding itself).
  enum : uint32_t { kMainThreadScrollingReasonCount = 15 };

  // Returns true if the given MainThreadScrollingReason can be set by the main
  // thread.
  static bool MainThreadCanSetScrollReasons(uint32_t reasons) {
    uint32_t reasons_set_by_main_thread =
        kNotScrollingOnMain | kHasBackgroundAttachmentFixedObjects |
        kHasNonLayerViewportConstrainedObjects | kThreadedScrollingDisabled |
        kScrollbarScrolling | kPageOverlay | kAnimatingScrollOnMainThread;
    return (reasons & reasons_set_by_main_thread) == reasons;
  }

  // Returns true if the given MainThreadScrollingReason can be set by the
  // compositor.
  static bool CompositorCanSetScrollReasons(uint32_t reasons) {
    uint32_t reasons_set_by_compositor =
        kNonFastScrollableRegion | kEventHandlers | kFailedHitTest |
        kNoScrollingLayer | kNotScrollable | kContinuingMainThreadScroll |
        kNonInvertibleTransform | kPageBasedScrolling;
    return (reasons & reasons_set_by_compositor) == reasons;
  }
};

}  // namespace cc

#endif  // CC_INPUT_MAIN_THREAD_SCROLLING_REASON_H_
