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

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

Issue 219413002: Hash iterators: Check for concurrent modification and fix 1 place where it happened (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: CR feedback Created 6 years, 8 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 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 91
92 void DocumentTimeline::serviceAnimations() 92 void DocumentTimeline::serviceAnimations()
93 { 93 {
94 TRACE_EVENT0("webkit", "DocumentTimeline::serviceAnimations"); 94 TRACE_EVENT0("webkit", "DocumentTimeline::serviceAnimations");
95 95
96 m_timing->cancelWake(); 96 m_timing->cancelWake();
97 m_hasOutdatedAnimationPlayer = false; 97 m_hasOutdatedAnimationPlayer = false;
98 98
99 double timeToNextEffect = std::numeric_limits<double>::infinity(); 99 double timeToNextEffect = std::numeric_limits<double>::infinity();
100 Vector<AnimationPlayer*> players; 100 Vector<AnimationPlayer*> players;
101 for (HashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUpdate .begin(); it != m_playersNeedingUpdate.end(); ++it) 101 for (ListHashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUp date.begin(); it != m_playersNeedingUpdate.end(); ++it)
102 players.append(it->get()); 102 players.append(it->get());
103 103
104 std::sort(players.begin(), players.end(), AnimationPlayer::hasLowerPriority) ; 104 std::sort(players.begin(), players.end(), AnimationPlayer::hasLowerPriority) ;
105 105
106 for (size_t i = 0; i < players.size(); ++i) { 106 for (size_t i = 0; i < players.size(); ++i) {
107 AnimationPlayer* player = players[i]; 107 AnimationPlayer* player = players[i];
108 if (player->update()) 108 if (player->update())
109 timeToNextEffect = std::min(timeToNextEffect, player->timeToEffectCh ange()); 109 timeToNextEffect = std::min(timeToNextEffect, player->timeToEffectCh ange());
110 else 110 else
111 m_playersNeedingUpdate.remove(player); 111 m_playersNeedingUpdate.remove(player);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } 152 }
153 153
154 double DocumentTimeline::effectiveTime() 154 double DocumentTimeline::effectiveTime()
155 { 155 {
156 double time = currentTime(); 156 double time = currentTime();
157 return std::isnan(time) ? 0 : time; 157 return std::isnan(time) ? 0 : time;
158 } 158 }
159 159
160 void DocumentTimeline::pauseAnimationsForTesting(double pauseTime) 160 void DocumentTimeline::pauseAnimationsForTesting(double pauseTime)
161 { 161 {
162 for (HashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUpdate .begin(); it != m_playersNeedingUpdate.end(); ++it) 162 for (ListHashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUp date.begin(); it != m_playersNeedingUpdate.end(); ++it)
163 (*it)->pauseForTesting(pauseTime); 163 (*it)->pauseForTesting(pauseTime);
164 serviceAnimations(); 164 serviceAnimations();
165 } 165 }
166 166
167 void DocumentTimeline::setOutdatedAnimationPlayer(AnimationPlayer* player) 167 void DocumentTimeline::setOutdatedAnimationPlayer(AnimationPlayer* player)
168 { 168 {
169 m_playersNeedingUpdate.add(player); 169 m_playersNeedingUpdate.add(player);
170 m_hasOutdatedAnimationPlayer = true; 170 m_hasOutdatedAnimationPlayer = true;
171 if (m_document && m_document->page() && !m_document->page()->animator().isSe rvicingAnimations()) 171 if (m_document && m_document->page() && !m_document->page()->animator().isSe rvicingAnimations())
172 m_timing->serviceOnNextFrame(); 172 m_timing->serviceOnNextFrame();
173 } 173 }
174 174
175 size_t DocumentTimeline::numberOfActiveAnimationsForTesting() const 175 size_t DocumentTimeline::numberOfActiveAnimationsForTesting() const
176 { 176 {
177 if (isNull(m_zeroTime)) 177 if (isNull(m_zeroTime))
178 return 0; 178 return 0;
179 // Includes all players whose directly associated timed items 179 // Includes all players whose directly associated timed items
180 // are current or in effect. 180 // are current or in effect.
181 if (isNull(m_zeroTime)) 181 if (isNull(m_zeroTime))
182 return 0; 182 return 0;
183 size_t count = 0; 183 size_t count = 0;
184 for (HashSet<RefPtr<AnimationPlayer> >::iterator it = m_playersNeedingUpdate .begin(); it != m_playersNeedingUpdate.end(); ++it) { 184 for (ListHashSet<RefPtr<AnimationPlayer> >::const_iterator it = m_playersNee dingUpdate.begin(); it != m_playersNeedingUpdate.end(); ++it) {
185 const TimedItem* timedItem = (*it)->source(); 185 const TimedItem* timedItem = (*it)->source();
186 if ((*it)->hasStartTime()) 186 if ((*it)->hasStartTime())
187 count += (timedItem && (timedItem->isCurrent() || timedItem->isInEff ect())); 187 count += (timedItem && (timedItem->isCurrent() || timedItem->isInEff ect()));
188 } 188 }
189 return count; 189 return count;
190 } 190 }
191 191
192 void DocumentTimeline::detachFromDocument() { 192 void DocumentTimeline::detachFromDocument() {
193 m_document = 0; 193 m_document = 0;
194 } 194 }
195 195
196 } // namespace 196 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698