diff options
author | Paul Rouget <me@paulrouget.com> | 2019-12-16 16:48:18 +0100 |
---|---|---|
committer | Paul Rouget <me@paulrouget.com> | 2019-12-16 16:50:36 +0100 |
commit | 016d9a62ab849d0114d8a25b6328f562f9e0b024 (patch) | |
tree | e921f589109acb28d4138084ca21d61645642cf4 /components/constellation | |
parent | b7aaff499501e0f1f0d411db5059f59e4828419d (diff) | |
download | servo-016d9a62ab849d0114d8a25b6328f562f9e0b024.tar.gz servo-016d9a62ab849d0114d8a25b6328f562f9e0b024.zip |
Do not wake up embedder on each animation tick
Diffstat (limited to 'components/constellation')
-rw-r--r-- | components/constellation/constellation.rs | 15 | ||||
-rw-r--r-- | components/constellation/pipeline.rs | 8 |
2 files changed, 15 insertions, 8 deletions
diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index f8c66c3a7a9..c5fd3a5fd39 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -3144,11 +3144,16 @@ where pipeline_id: PipelineId, animation_state: AnimationState, ) { - self.compositor_proxy - .send(ToCompositorMsg::ChangeRunningAnimationsState( - pipeline_id, - animation_state, - )) + if let Some(pipeline) = self.pipelines.get_mut(&pipeline_id) { + if pipeline.animation_state != animation_state { + pipeline.animation_state = animation_state; + self.compositor_proxy + .send(ToCompositorMsg::ChangeRunningAnimationsState( + pipeline_id, + animation_state, + )) + } + } } fn handle_tick_animation(&mut self, pipeline_id: PipelineId, tick_type: AnimationTickType) { diff --git a/components/constellation/pipeline.rs b/components/constellation/pipeline.rs index d2021646963..defa7f2e7a9 100644 --- a/components/constellation/pipeline.rs +++ b/components/constellation/pipeline.rs @@ -30,7 +30,9 @@ use net_traits::image_cache::ImageCache; use net_traits::{IpcSend, ResourceThreads}; use profile_traits::mem as profile_mem; use profile_traits::time; -use script_traits::{ConstellationControlMsg, DiscardBrowsingContext, ScriptToConstellationChan}; +use script_traits::{ + AnimationState, ConstellationControlMsg, DiscardBrowsingContext, ScriptToConstellationChan, +}; use script_traits::{DocumentActivity, InitialScriptState}; use script_traits::{LayoutControlMsg, LayoutMsg, LoadData}; use script_traits::{NewLayoutInfo, SWManagerMsg, SWManagerSenders}; @@ -81,7 +83,7 @@ pub struct Pipeline { /// Whether this pipeline is currently running animations. Pipelines that are running /// animations cause composites to be continually scheduled. - pub running_animations: bool, + pub animation_state: AnimationState, /// The child browsing contexts of this pipeline (these are iframes in the document). pub children: Vec<BrowsingContextId>, @@ -377,7 +379,7 @@ impl Pipeline { compositor_proxy: compositor_proxy, url: load_data.url.clone(), children: vec![], - running_animations: false, + animation_state: AnimationState::NoAnimationsPresent, load_data: load_data, history_state_id: None, history_states: HashSet::new(), |