aboutsummaryrefslogtreecommitdiffstats
path: root/components/constellation
diff options
context:
space:
mode:
authorPaul Rouget <me@paulrouget.com>2019-12-16 16:48:18 +0100
committerPaul Rouget <me@paulrouget.com>2019-12-16 16:50:36 +0100
commit016d9a62ab849d0114d8a25b6328f562f9e0b024 (patch)
treee921f589109acb28d4138084ca21d61645642cf4 /components/constellation
parentb7aaff499501e0f1f0d411db5059f59e4828419d (diff)
downloadservo-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.rs15
-rw-r--r--components/constellation/pipeline.rs8
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(),