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

Side by Side Diff: third_party/WebKit/Source/core/animation/Animation.cpp

Issue 1515573002: Safely finalize an AnimationTimeline's still-attached Animations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: dispose of AnimationTimelines irrespective of ENABLE(OILPAN) Created 5 years 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
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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 m_content->animation()->cancel(); 104 m_content->animation()->cancel();
105 m_content->animation()->setEffect(0); 105 m_content->animation()->setEffect(0);
106 } 106 }
107 m_content->attach(this); 107 m_content->attach(this);
108 } 108 }
109 InspectorInstrumentation::didCreateAnimation(m_timeline->document(), m_seque nceNumber); 109 InspectorInstrumentation::didCreateAnimation(m_timeline->document(), m_seque nceNumber);
110 } 110 }
111 111
112 Animation::~Animation() 112 Animation::~Animation()
113 { 113 {
114 destroyCompositorPlayer(); 114 destroyCompositorPlayer();
haraken 2015/12/09 14:02:04 Can we remove this now?
sof 2015/12/09 14:04:33 No, the AnimationTimeline keeps a weak reference t
115 } 115 }
116 116
117 void Animation::dispose()
118 {
119 destroyCompositorPlayer();
120 // If the AnimationTimeline and its Animation objects are
121 // finalized by the same GC, we have to eagerly clear out
122 // this Animation object's compositor player registration.
123 ASSERT(!m_compositorPlayer);
124 }
125
117 double Animation::effectEnd() const 126 double Animation::effectEnd() const
118 { 127 {
119 return m_content ? m_content->endTimeInternal() : 0; 128 return m_content ? m_content->endTimeInternal() : 0;
120 } 129 }
121 130
122 bool Animation::limited(double currentTime) const 131 bool Animation::limited(double currentTime) const
123 { 132 {
124 return (m_playbackRate < 0 && currentTime <= 0) || (m_playbackRate > 0 && cu rrentTime >= effectEnd()); 133 return (m_playbackRate < 0 && currentTime <= 0) || (m_playbackRate > 0 && cu rrentTime >= effectEnd());
125 } 134 }
126 135
(...skipping 795 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 attachCompositedLayers(); 931 attachCompositedLayers();
923 } 932 }
924 933
925 void Animation::destroyCompositorPlayer() 934 void Animation::destroyCompositorPlayer()
926 { 935 {
927 detachCompositedLayers(); 936 detachCompositedLayers();
928 937
929 if (m_compositorPlayer) { 938 if (m_compositorPlayer) {
930 detachCompositorTimeline(); 939 detachCompositorTimeline();
931 m_compositorPlayer->setAnimationDelegate(nullptr); 940 m_compositorPlayer->setAnimationDelegate(nullptr);
941 m_compositorPlayer.clear();
932 } 942 }
933 m_compositorPlayer.clear();
934 } 943 }
935 944
936 void Animation::attachCompositorTimeline() 945 void Animation::attachCompositorTimeline()
937 { 946 {
938 if (m_compositorPlayer) { 947 if (m_compositorPlayer) {
939 WebCompositorAnimationTimeline* timeline = m_timeline ? m_timeline->comp ositorTimeline() : nullptr; 948 WebCompositorAnimationTimeline* timeline = m_timeline ? m_timeline->comp ositorTimeline() : nullptr;
940 if (timeline) 949 if (timeline)
941 timeline->playerAttached(*this); 950 timeline->playerAttached(*this);
942 } 951 }
943 } 952 }
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 visitor->trace(m_content); 1096 visitor->trace(m_content);
1088 visitor->trace(m_timeline); 1097 visitor->trace(m_timeline);
1089 visitor->trace(m_pendingFinishedEvent); 1098 visitor->trace(m_pendingFinishedEvent);
1090 visitor->trace(m_finishedPromise); 1099 visitor->trace(m_finishedPromise);
1091 visitor->trace(m_readyPromise); 1100 visitor->trace(m_readyPromise);
1092 RefCountedGarbageCollectedEventTargetWithInlineData<Animation>::trace(visito r); 1101 RefCountedGarbageCollectedEventTargetWithInlineData<Animation>::trace(visito r);
1093 ActiveDOMObject::trace(visitor); 1102 ActiveDOMObject::trace(visitor);
1094 } 1103 }
1095 1104
1096 } // namespace 1105 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698