| OLD | NEW |
| 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 26 matching lines...) Expand all Loading... |
| 37 #include "core/page/Page.h" | 37 #include "core/page/Page.h" |
| 38 #include "platform/instrumentation/tracing/TraceEvent.h" | 38 #include "platform/instrumentation/tracing/TraceEvent.h" |
| 39 | 39 |
| 40 namespace blink { | 40 namespace blink { |
| 41 | 41 |
| 42 void CompositorPendingAnimations::Add(Animation* animation) { | 42 void CompositorPendingAnimations::Add(Animation* animation) { |
| 43 DCHECK(animation); | 43 DCHECK(animation); |
| 44 DCHECK_EQ(pending_.Find(animation), kNotFound); | 44 DCHECK_EQ(pending_.Find(animation), kNotFound); |
| 45 pending_.push_back(animation); | 45 pending_.push_back(animation); |
| 46 | 46 |
| 47 Document* document = animation->timeline()->GetDocument(); | 47 Document* document = animation->TimelineInternal()->GetDocument(); |
| 48 if (document->View()) | 48 if (document->View()) |
| 49 document->View()->ScheduleAnimation(); | 49 document->View()->ScheduleAnimation(); |
| 50 | 50 |
| 51 bool visible = document->GetPage() && document->GetPage()->IsPageVisible(); | 51 bool visible = document->GetPage() && document->GetPage()->IsPageVisible(); |
| 52 if (!visible && !timer_.IsActive()) { | 52 if (!visible && !timer_.IsActive()) { |
| 53 timer_.StartOneShot(0, BLINK_FROM_HERE); | 53 timer_.StartOneShot(0, BLINK_FROM_HERE); |
| 54 } | 54 } |
| 55 } | 55 } |
| 56 | 56 |
| 57 bool CompositorPendingAnimations::Update( | 57 bool CompositorPendingAnimations::Update( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 77 // Animations with a start time do not participate in compositor start-time | 77 // Animations with a start time do not participate in compositor start-time |
| 78 // grouping. | 78 // grouping. |
| 79 if (animation->PreCommit(animation->HasStartTime() ? 1 : compositor_group, | 79 if (animation->PreCommit(animation->HasStartTime() ? 1 : compositor_group, |
| 80 composited_element_ids, start_on_compositor)) { | 80 composited_element_ids, start_on_compositor)) { |
| 81 if (animation->HasActiveAnimationsOnCompositor() && | 81 if (animation->HasActiveAnimationsOnCompositor() && |
| 82 !had_compositor_animation) { | 82 !had_compositor_animation) { |
| 83 started_synchronized_on_compositor = true; | 83 started_synchronized_on_compositor = true; |
| 84 } | 84 } |
| 85 | 85 |
| 86 if (animation->Playing() && !animation->HasStartTime() && | 86 if (animation->Playing() && !animation->HasStartTime() && |
| 87 animation->timeline() && animation->timeline()->IsActive()) { | 87 animation->TimelineInternal() && |
| 88 animation->TimelineInternal()->IsActive()) { |
| 88 waiting_for_start_time.push_back(animation.Get()); | 89 waiting_for_start_time.push_back(animation.Get()); |
| 89 } | 90 } |
| 90 } else { | 91 } else { |
| 91 deferred.push_back(animation); | 92 deferred.push_back(animation); |
| 92 } | 93 } |
| 93 } | 94 } |
| 94 | 95 |
| 95 // If any synchronized animations were started on the compositor, all | 96 // If any synchronized animations were started on the compositor, all |
| 96 // remaining synchronized animations need to wait for the synchronized | 97 // remaining synchronized animations need to wait for the synchronized |
| 97 // start time. Otherwise they may start immediately. | 98 // start time. Otherwise they may start immediately. |
| 98 if (started_synchronized_on_compositor) { | 99 if (started_synchronized_on_compositor) { |
| 99 for (auto& animation : waiting_for_start_time) { | 100 for (auto& animation : waiting_for_start_time) { |
| 100 if (!animation->HasStartTime()) { | 101 if (!animation->HasStartTime()) { |
| 101 waiting_for_compositor_animation_start_.push_back(animation); | 102 waiting_for_compositor_animation_start_.push_back(animation); |
| 102 } | 103 } |
| 103 } | 104 } |
| 104 } else { | 105 } else { |
| 105 for (auto& animation : waiting_for_start_time) { | 106 for (auto& animation : waiting_for_start_time) { |
| 106 if (!animation->HasStartTime()) { | 107 if (!animation->HasStartTime()) { |
| 107 animation->NotifyCompositorStartTime( | 108 animation->NotifyCompositorStartTime( |
| 108 animation->timeline()->CurrentTimeInternal()); | 109 animation->TimelineInternal()->CurrentTimeInternal()); |
| 109 } | 110 } |
| 110 } | 111 } |
| 111 } | 112 } |
| 112 | 113 |
| 113 // FIXME: The postCommit should happen *after* the commit, not before. | 114 // FIXME: The postCommit should happen *after* the commit, not before. |
| 114 for (auto& animation : animations) | 115 for (auto& animation : animations) |
| 115 animation->PostCommit(animation->timeline()->CurrentTimeInternal()); | 116 animation->PostCommit(animation->TimelineInternal()->CurrentTimeInternal()); |
| 116 | 117 |
| 117 DCHECK(pending_.IsEmpty()); | 118 DCHECK(pending_.IsEmpty()); |
| 118 DCHECK(start_on_compositor || deferred.IsEmpty()); | 119 DCHECK(start_on_compositor || deferred.IsEmpty()); |
| 119 for (auto& animation : deferred) | 120 for (auto& animation : deferred) |
| 120 animation->SetCompositorPending(); | 121 animation->SetCompositorPending(); |
| 121 DCHECK_EQ(pending_.size(), deferred.size()); | 122 DCHECK_EQ(pending_.size(), deferred.size()); |
| 122 | 123 |
| 123 if (started_synchronized_on_compositor) | 124 if (started_synchronized_on_compositor) |
| 124 return true; | 125 return true; |
| 125 | 126 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 143 double monotonic_animation_start_time, | 144 double monotonic_animation_start_time, |
| 144 int compositor_group) { | 145 int compositor_group) { |
| 145 TRACE_EVENT0("blink", | 146 TRACE_EVENT0("blink", |
| 146 "CompositorPendingAnimations::notifyCompositorAnimationStarted"); | 147 "CompositorPendingAnimations::notifyCompositorAnimationStarted"); |
| 147 HeapVector<Member<Animation>> animations; | 148 HeapVector<Member<Animation>> animations; |
| 148 animations.swap(waiting_for_compositor_animation_start_); | 149 animations.swap(waiting_for_compositor_animation_start_); |
| 149 | 150 |
| 150 for (auto animation : animations) { | 151 for (auto animation : animations) { |
| 151 if (animation->HasStartTime() || | 152 if (animation->HasStartTime() || |
| 152 animation->PlayStateInternal() != Animation::kPending || | 153 animation->PlayStateInternal() != Animation::kPending || |
| 153 !animation->timeline() || !animation->timeline()->IsActive()) { | 154 !animation->TimelineInternal() || |
| 155 !animation->TimelineInternal()->IsActive()) { |
| 154 // Already started or no longer relevant. | 156 // Already started or no longer relevant. |
| 155 continue; | 157 continue; |
| 156 } | 158 } |
| 157 if (compositor_group && animation->CompositorGroup() != compositor_group) { | 159 if (compositor_group && animation->CompositorGroup() != compositor_group) { |
| 158 // Still waiting. | 160 // Still waiting. |
| 159 waiting_for_compositor_animation_start_.push_back(animation); | 161 waiting_for_compositor_animation_start_.push_back(animation); |
| 160 continue; | 162 continue; |
| 161 } | 163 } |
| 162 animation->NotifyCompositorStartTime(monotonic_animation_start_time - | 164 animation->NotifyCompositorStartTime( |
| 163 animation->timeline()->ZeroTime()); | 165 monotonic_animation_start_time - |
| 166 animation->TimelineInternal()->ZeroTime()); |
| 164 } | 167 } |
| 165 } | 168 } |
| 166 | 169 |
| 167 DEFINE_TRACE(CompositorPendingAnimations) { | 170 DEFINE_TRACE(CompositorPendingAnimations) { |
| 168 visitor->Trace(pending_); | 171 visitor->Trace(pending_); |
| 169 visitor->Trace(waiting_for_compositor_animation_start_); | 172 visitor->Trace(waiting_for_compositor_animation_start_); |
| 170 } | 173 } |
| 171 | 174 |
| 172 } // namespace blink | 175 } // namespace blink |
| OLD | NEW |