1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CompositingReasonFinder_h
6#define CompositingReasonFinder_h
7
8#include "core/rendering/RenderLayer.h"
9#include "core/rendering/compositing/CompositingTriggers.h"
10#include "platform/graphics/CompositingReasons.h"
11
12namespace blink {
13
14class RenderObject;
15class RenderView;
16
17class CompositingReasonFinder {
18    WTF_MAKE_NONCOPYABLE(CompositingReasonFinder);
19public:
20    explicit CompositingReasonFinder(RenderView&);
21
22    CompositingReasons potentialCompositingReasonsFromStyle(RenderObject*) const;
23    CompositingReasons directReasons(const RenderLayer*) const;
24
25    void updateTriggers();
26
27    bool hasOverflowScrollTrigger() const;
28    bool requiresCompositingForScrollableFrame() const;
29
30private:
31    bool isMainFrame() const;
32
33    CompositingReasons nonStyleDeterminedDirectReasons(const RenderLayer*) const;
34
35    bool requiresCompositingForTransform(RenderObject*) const;
36    bool requiresCompositingForAnimation(RenderStyle*) const;
37    bool requiresCompositingForPositionFixed(const RenderLayer*) const;
38
39    RenderView& m_renderView;
40    CompositingTriggerFlags m_compositingTriggers;
41};
42
43} // namespace blink
44
45#endif // CompositingReasonFinder_h
46