Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(519)

Side by Side Diff: Source/core/animation/DocumentTimeline.cpp

Issue 225073004: Oilpan: Completely move core/animations/ to oilpan's heap (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 27 matching lines...) Expand all
38 #include "core/page/Page.h" 38 #include "core/page/Page.h"
39 #include "platform/TraceEvent.h" 39 #include "platform/TraceEvent.h"
40 40
41 namespace WebCore { 41 namespace WebCore {
42 42
43 // This value represents 1 frame at 30Hz plus a little bit of wiggle room. 43 // This value represents 1 frame at 30Hz plus a little bit of wiggle room.
44 // TODO: Plumb a nominal framerate through and derive this value from that. 44 // TODO: Plumb a nominal framerate through and derive this value from that.
45 const double DocumentTimeline::s_minimumDelay = 0.04; 45 const double DocumentTimeline::s_minimumDelay = 0.04;
46 46
47 47
48 PassRefPtr<DocumentTimeline> DocumentTimeline::create(Document* document, PassOw nPtr<PlatformTiming> timing) 48 PassRefPtrWillBeRawPtr<DocumentTimeline> DocumentTimeline::create(Document* docu ment, PassOwnPtrWillBeRawPtr<PlatformTiming> timing)
49 { 49 {
50 return adoptRef(new DocumentTimeline(document, timing)); 50 return adoptRefWillBeNoop(new DocumentTimeline(document, timing));
51 } 51 }
52 52
53 DocumentTimeline::DocumentTimeline(Document* document, PassOwnPtr<PlatformTiming > timing) 53 DocumentTimeline::DocumentTimeline(Document* document, PassOwnPtrWillBeRawPtr<Pl atformTiming> timing)
54 : m_zeroTime(nullValue()) 54 : m_zeroTime(nullValue())
55 , m_document(document) 55 , m_document(document)
56 { 56 {
57 if (!timing) 57 if (!timing)
58 m_timing = adoptPtr(new DocumentTimelineTiming(this)); 58 m_timing = adoptPtrWillBeNoop(new DocumentTimelineTiming(this));
59 else 59 else
60 m_timing = timing; 60 m_timing = timing;
61 61
62 ASSERT(document); 62 ASSERT(document);
63 } 63 }
64 64
65 DocumentTimeline::~DocumentTimeline() 65 DocumentTimeline::~DocumentTimeline()
66 { 66 {
67 for (HashSet<AnimationPlayer*>::iterator it = m_players.begin(); it != m_pla yers.end(); ++it) 67 #if !ENABLE(OILPAN)
68 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<AnimationPlayer> >::iterator i t = m_players.begin(); it != m_players.end(); ++it)
68 (*it)->timelineDestroyed(); 69 (*it)->timelineDestroyed();
70 #endif
69 } 71 }
70 72
71 AnimationPlayer* DocumentTimeline::createAnimationPlayer(TimedItem* child) 73 AnimationPlayer* DocumentTimeline::createAnimationPlayer(TimedItem* child)
72 { 74 {
73 RefPtr<AnimationPlayer> player = AnimationPlayer::create(*this, child); 75 RefPtrWillBeRawPtr<AnimationPlayer> player = AnimationPlayer::create(*this, child);
74 AnimationPlayer* result = player.get(); 76 AnimationPlayer* result = player.get();
75 m_players.add(result); 77 m_players.add(result);
76 setOutdatedAnimationPlayer(result); 78 setOutdatedAnimationPlayer(result);
77 return result; 79 return result;
78 } 80 }
79 81
80 AnimationPlayer* DocumentTimeline::play(TimedItem* child) 82 AnimationPlayer* DocumentTimeline::play(TimedItem* child)
81 { 83 {
82 if (!m_document) 84 if (!m_document)
83 return 0; 85 return 0;
84 AnimationPlayer* player = createAnimationPlayer(child); 86 AnimationPlayer* player = createAnimationPlayer(child);
85 player->setStartTimeInternal(effectiveTime()); 87 player->setStartTimeInternal(effectiveTime());
86 m_document->compositorPendingAnimations().add(player); 88 m_document->compositorPendingAnimations().add(player);
87 return player; 89 return player;
88 } 90 }
89 91
90 void DocumentTimeline::wake() 92 void DocumentTimeline::wake()
91 { 93 {
92 m_timing->serviceOnNextFrame(); 94 m_timing->serviceOnNextFrame();
93 } 95 }
94 96
95 void DocumentTimeline::serviceAnimations(TimingUpdateReason reason) 97 void DocumentTimeline::serviceAnimations(TimingUpdateReason reason)
96 { 98 {
97 TRACE_EVENT0("webkit", "DocumentTimeline::serviceAnimations"); 99 TRACE_EVENT0("webkit", "DocumentTimeline::serviceAnimations");
98 100
99 m_timing->cancelWake(); 101 m_timing->cancelWake();
100 102
101 double timeToNextEffect = std::numeric_limits<double>::infinity(); 103 double timeToNextEffect = std::numeric_limits<double>::infinity();
102 Vector<AnimationPlayer*> players; 104 WillBeHeapVector<RawPtrWillBeMember<AnimationPlayer> > players;
103 for (HashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUpdate .begin(); it != m_playersNeedingUpdate.end(); ++it) 105 for (WillBeHeapHashSet<RefPtrWillBeMember<AnimationPlayer> >::iterator it = m_playersNeedingUpdate.begin(); it != m_playersNeedingUpdate.end(); ++it)
104 players.append(it->get()); 106 players.append(it->get());
105 107
106 std::sort(players.begin(), players.end(), AnimationPlayer::hasLowerPriority) ; 108 std::sort(players.begin(), players.end(), AnimationPlayer::hasLowerPriority) ;
107 109
108 for (size_t i = 0; i < players.size(); ++i) { 110 for (size_t i = 0; i < players.size(); ++i) {
109 AnimationPlayer* player = players[i]; 111 AnimationPlayer* player = players[i];
110 if (player->update(reason)) 112 if (player->update(reason))
111 timeToNextEffect = std::min(timeToNextEffect, player->timeToEffectCh ange()); 113 timeToNextEffect = std::min(timeToNextEffect, player->timeToEffectCh ange());
112 else 114 else
113 m_playersNeedingUpdate.remove(player); 115 m_playersNeedingUpdate.remove(player);
(...skipping 24 matching lines...) Expand all
138 { 140 {
139 m_timer.stop(); 141 m_timer.stop();
140 } 142 }
141 143
142 void DocumentTimeline::DocumentTimelineTiming::serviceOnNextFrame() 144 void DocumentTimeline::DocumentTimelineTiming::serviceOnNextFrame()
143 { 145 {
144 if (m_timeline->m_document && m_timeline->m_document->view()) 146 if (m_timeline->m_document && m_timeline->m_document->view())
145 m_timeline->m_document->view()->scheduleAnimation(); 147 m_timeline->m_document->view()->scheduleAnimation();
146 } 148 }
147 149
150 void DocumentTimeline::DocumentTimelineTiming::trace(Visitor* visitor)
151 {
152 visitor->trace(m_timeline);
153 DocumentTimeline::PlatformTiming::trace(visitor);
154 }
155
148 double DocumentTimeline::currentTime(bool& isNull) 156 double DocumentTimeline::currentTime(bool& isNull)
149 { 157 {
150 return currentTimeInternal(isNull) * 1000; 158 return currentTimeInternal(isNull) * 1000;
151 } 159 }
152 160
153 double DocumentTimeline::currentTimeInternal(bool& isNull) 161 double DocumentTimeline::currentTimeInternal(bool& isNull)
154 { 162 {
155 if (!m_document) { 163 if (!m_document) {
156 isNull = true; 164 isNull = true;
157 return std::numeric_limits<double>::quiet_NaN(); 165 return std::numeric_limits<double>::quiet_NaN();
(...skipping 15 matching lines...) Expand all
173 } 181 }
174 182
175 double DocumentTimeline::effectiveTime() 183 double DocumentTimeline::effectiveTime()
176 { 184 {
177 double time = currentTimeInternal(); 185 double time = currentTimeInternal();
178 return std::isnan(time) ? 0 : time; 186 return std::isnan(time) ? 0 : time;
179 } 187 }
180 188
181 void DocumentTimeline::pauseAnimationsForTesting(double pauseTime) 189 void DocumentTimeline::pauseAnimationsForTesting(double pauseTime)
182 { 190 {
183 for (HashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUpdate .begin(); it != m_playersNeedingUpdate.end(); ++it) 191 for (WillBeHeapHashSet<RefPtrWillBeMember<AnimationPlayer> >::iterator it = m_playersNeedingUpdate.begin(); it != m_playersNeedingUpdate.end(); ++it)
184 (*it)->pauseForTesting(pauseTime); 192 (*it)->pauseForTesting(pauseTime);
185 serviceAnimations(TimingUpdateOnDemand); 193 serviceAnimations(TimingUpdateOnDemand);
186 } 194 }
187 195
188 bool DocumentTimeline::hasOutdatedAnimationPlayer() const 196 bool DocumentTimeline::hasOutdatedAnimationPlayer() const
189 { 197 {
190 for (HashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUpdate .begin(); it != m_playersNeedingUpdate.end(); ++it) { 198 for (WillBeHeapHashSet<RefPtrWillBeMember<AnimationPlayer> >::iterator it = m_playersNeedingUpdate.begin(); it != m_playersNeedingUpdate.end(); ++it) {
191 if ((*it)->outdated()) 199 if ((*it)->outdated())
192 return true; 200 return true;
193 } 201 }
194 return false; 202 return false;
195 } 203 }
196 204
197 void DocumentTimeline::setOutdatedAnimationPlayer(AnimationPlayer* player) 205 void DocumentTimeline::setOutdatedAnimationPlayer(AnimationPlayer* player)
198 { 206 {
199 ASSERT(player->outdated()); 207 ASSERT(player->outdated());
200 m_playersNeedingUpdate.add(player); 208 m_playersNeedingUpdate.add(player);
201 if (m_document && m_document->page() && !m_document->page()->animator().isSe rvicingAnimations()) 209 if (m_document && m_document->page() && !m_document->page()->animator().isSe rvicingAnimations())
202 m_timing->serviceOnNextFrame(); 210 m_timing->serviceOnNextFrame();
203 } 211 }
204 212
205 size_t DocumentTimeline::numberOfActiveAnimationsForTesting() const 213 size_t DocumentTimeline::numberOfActiveAnimationsForTesting() const
206 { 214 {
207 // Includes all players whose directly associated timed items 215 // Includes all players whose directly associated timed items
208 // are current or in effect. 216 // are current or in effect.
209 if (isNull(m_zeroTime)) 217 if (isNull(m_zeroTime))
210 return 0; 218 return 0;
211 size_t count = 0; 219 size_t count = 0;
212 for (HashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUpdate .begin(); it != m_playersNeedingUpdate.end(); ++it) { 220 for (WillBeHeapHashSet<RefPtrWillBeMember<AnimationPlayer> >::iterator it = m_playersNeedingUpdate.begin(); it != m_playersNeedingUpdate.end(); ++it) {
213 const TimedItem* timedItem = (*it)->source(); 221 const TimedItem* timedItem = (*it)->source();
214 if ((*it)->hasStartTime()) 222 if ((*it)->hasStartTime())
215 count += (timedItem && (timedItem->isCurrent() || timedItem->isInEff ect())); 223 count += (timedItem && (timedItem->isCurrent() || timedItem->isInEff ect()));
216 } 224 }
217 return count; 225 return count;
218 } 226 }
219 227
220 void DocumentTimeline::detachFromDocument() { 228 #if !ENABLE(OILPAN)
229 void DocumentTimeline::detachFromDocument()
230 {
221 // FIXME: DocumentTimeline should keep Document alive. 231 // FIXME: DocumentTimeline should keep Document alive.
222 m_document = 0; 232 m_document = nullptr;
233 }
234 #endif
235
236 void DocumentTimeline::trace(Visitor* visitor)
237 {
238 visitor->trace(m_document);
239 visitor->trace(m_timing);
240 visitor->trace(m_playersNeedingUpdate);
241 visitor->trace(m_players);
223 } 242 }
224 243
225 } // namespace 244 } // namespace
OLDNEW
« no previous file with comments | « Source/core/animation/DocumentTimeline.h ('k') | Source/core/animation/DocumentTimelineTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698