diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2017-08-01 14:57:55 +0200 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2017-08-17 11:48:34 +0200 |
commit | 52348f1fccea3e4abc2ad80d001a43f5f51cbdc8 (patch) | |
tree | 5e6b6edd3b2bf5368d9ccdd681b49f88bbac2889 /components/script/task_source/performance_timeline.rs | |
parent | 24270f93571e0a1254d402f1c897bcc1ebbbd459 (diff) | |
download | servo-52348f1fccea3e4abc2ad80d001a43f5f51cbdc8.tar.gz servo-52348f1fccea3e4abc2ad80d001a43f5f51cbdc8.zip |
Performance Timeline API
Diffstat (limited to 'components/script/task_source/performance_timeline.rs')
-rw-r--r-- | components/script/task_source/performance_timeline.rs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/components/script/task_source/performance_timeline.rs b/components/script/task_source/performance_timeline.rs new file mode 100644 index 00000000000..272d971737d --- /dev/null +++ b/components/script/task_source/performance_timeline.rs @@ -0,0 +1,58 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// XXX The spec says that the performance timeline task source should be +// a low priority task and it should be processed during idle periods. +// We are currently treating this task queue as a normal priority queue. + +use dom::bindings::inheritance::Castable; +use dom::bindings::refcounted::Trusted; +use dom::performance::{NotifyPerformanceObserverRunnable, Performance}; +use dom::window::Window; +use script_thread::{MainThreadScriptMsg, Runnable, RunnableWrapper, ScriptThread}; +use std::fmt; +use std::result::Result; +use std::sync::mpsc::Sender; +use task_source::TaskSource; + +#[derive(JSTraceable, Clone)] +pub struct PerformanceTimelineTaskSource(pub Sender<MainThreadScriptMsg>); + +impl fmt::Debug for PerformanceTimelineTaskSource { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "PerformanceTimelineTaskSource(...)") + } +} + +impl TaskSource for PerformanceTimelineTaskSource { + fn queue_with_wrapper<T>(&self, + msg: Box<T>, + wrapper: &RunnableWrapper) -> Result<(), ()> + where T: Runnable + Send + 'static { + let msg = PerformanceTimelineTask(wrapper.wrap_runnable(msg)); + self.0.send(MainThreadScriptMsg::PerformanceTimeline(msg)).map_err(|_| ()) + } +} + +impl PerformanceTimelineTaskSource { + pub fn queue_notification(&self, owner: &Performance, window: &Window) { + let owner = Trusted::new(owner); + let runnable = box NotifyPerformanceObserverRunnable::new(owner); + let _ = self.queue(runnable, window.upcast()); + } +} + +pub struct PerformanceTimelineTask(pub Box<Runnable + Send>); + +impl fmt::Debug for PerformanceTimelineTask { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "PerformanceTimelineTask(...)") + } +} + +impl PerformanceTimelineTask { + pub fn handle_task(self, script_thread: &ScriptThread) { + self.0.main_thread_handler(script_thread); + } +} |