[WebGPU] Buffer updates part 1: async mapping functions, unmap, and destroy
[WebKit-https.git] / Source / WebCore / page / scrolling / ios / ScrollingCoordinatorIOS.mm
1 /*
2  * Copyright (C) 2014 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27
28 #if ENABLE(ASYNC_SCROLLING) && PLATFORM(IOS_FAMILY)
29
30 #import "ScrollingCoordinatorIOS.h"
31
32 #include "Frame.h"
33 #include "FrameView.h"
34 #include "Page.h"
35 #include "Region.h"
36 #include "ScrollingStateTree.h"
37 #include "ScrollingThread.h"
38 #include "ScrollingTreeFixedNode.h"
39 #include "ScrollingTreeFrameScrollingNodeIOS.h"
40 #include "ScrollingTreeStickyNode.h"
41 #include "ScrollingTreeIOS.h"
42 #include <wtf/MainThread.h>
43
44 namespace WebCore {
45
46 Ref<ScrollingCoordinator> ScrollingCoordinator::create(Page* page)
47 {
48     return adoptRef(*new ScrollingCoordinatorIOS(page));
49 }
50
51 ScrollingCoordinatorIOS::ScrollingCoordinatorIOS(Page* page)
52     : AsyncScrollingCoordinator(page)
53     , m_scrollingStateTreeCommitterTimer(*this, &ScrollingCoordinatorIOS::commitTreeState)
54 {
55     setScrollingTree(ScrollingTreeIOS::create(*this));
56 }
57
58 ScrollingCoordinatorIOS::~ScrollingCoordinatorIOS()
59 {
60     ASSERT(!scrollingTree());
61 }
62
63 void ScrollingCoordinatorIOS::pageDestroyed()
64 {
65     AsyncScrollingCoordinator::pageDestroyed();
66
67     m_scrollingStateTreeCommitterTimer.stop();
68
69     // Invalidating the scrolling tree will break the reference cycle between the ScrollingCoordinator and ScrollingTree objects.
70     releaseScrollingTree();
71 }
72
73 void ScrollingCoordinatorIOS::commitTreeStateIfNeeded()
74 {
75     if (!scrollingStateTree()->hasChangedProperties())
76         return;
77
78     commitTreeState();
79     m_scrollingStateTreeCommitterTimer.stop();
80 }
81
82 void ScrollingCoordinatorIOS::scheduleTreeStateCommit()
83 {
84     ASSERT(scrollingStateTree()->hasChangedProperties());
85
86     if (m_scrollingStateTreeCommitterTimer.isActive())
87         return;
88
89     m_scrollingStateTreeCommitterTimer.startOneShot(0_s);
90 }
91
92 void ScrollingCoordinatorIOS::commitTreeState()
93 {
94     ASSERT(scrollingStateTree()->hasChangedProperties());
95
96     scrollingStateTree()->commit(LayerRepresentation::PlatformLayerRepresentation);
97     // FIXME: figure out how to commit.
98 }
99
100
101 } // namespace WebCore
102
103 #endif // ENABLE(ASYNC_SCROLLING) && PLATFORM(IOS_FAMILY)