diff options
Diffstat (limited to 'components/script/script_thread.rs')
-rw-r--r-- | components/script/script_thread.rs | 153 |
1 files changed, 116 insertions, 37 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 6d747b8111d..3d000e23cd5 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -74,7 +74,8 @@ use net_traits::{ }; use percent_encoding::percent_decode; use profile_traits::mem::{self as profile_mem, OpaqueSender, ReportsChan}; -use profile_traits::time::{self as profile_time, profile, ProfilerCategory}; +use profile_traits::time::{self as profile_time, ProfilerCategory}; +use profile_traits::time_profile; use script_layout_interface::{ node_id_from_scroll_id, LayoutConfig, LayoutFactory, ReflowGoal, ScriptThreadFactory, }; @@ -2165,48 +2166,126 @@ impl ScriptThread { self.notify_activity_to_hang_monitor(&category); let start = Instant::now(); let value = if self.profile_script_events { - let profiler_cat = match category { - ScriptThreadEventCategory::AttachLayout => ProfilerCategory::ScriptAttachLayout, - ScriptThreadEventCategory::ConstellationMsg => { - ProfilerCategory::ScriptConstellationMsg + let profiler_chan = self.time_profiler_chan.clone(); + match category { + ScriptThreadEventCategory::AttachLayout => { + time_profile!(ProfilerCategory::ScriptAttachLayout, None, profiler_chan, f) }, - ScriptThreadEventCategory::DevtoolsMsg => ProfilerCategory::ScriptDevtoolsMsg, - ScriptThreadEventCategory::DocumentEvent => ProfilerCategory::ScriptDocumentEvent, - ScriptThreadEventCategory::DomEvent => ProfilerCategory::ScriptDomEvent, - ScriptThreadEventCategory::FileRead => ProfilerCategory::ScriptFileRead, - ScriptThreadEventCategory::FormPlannedNavigation => { - ProfilerCategory::ScriptPlannedNavigation + ScriptThreadEventCategory::ConstellationMsg => time_profile!( + ProfilerCategory::ScriptConstellationMsg, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::DevtoolsMsg => { + time_profile!(ProfilerCategory::ScriptDevtoolsMsg, None, profiler_chan, f) }, - ScriptThreadEventCategory::HistoryEvent => ProfilerCategory::ScriptHistoryEvent, - ScriptThreadEventCategory::ImageCacheMsg => ProfilerCategory::ScriptImageCacheMsg, - ScriptThreadEventCategory::InputEvent => ProfilerCategory::ScriptInputEvent, - ScriptThreadEventCategory::NetworkEvent => ProfilerCategory::ScriptNetworkEvent, - ScriptThreadEventCategory::PortMessage => ProfilerCategory::ScriptPortMessage, - ScriptThreadEventCategory::Resize => ProfilerCategory::ScriptResize, - ScriptThreadEventCategory::ScriptEvent => ProfilerCategory::ScriptEvent, - ScriptThreadEventCategory::SetScrollState => ProfilerCategory::ScriptSetScrollState, - ScriptThreadEventCategory::UpdateReplacedElement => { - ProfilerCategory::ScriptUpdateReplacedElement + ScriptThreadEventCategory::DocumentEvent => time_profile!( + ProfilerCategory::ScriptDocumentEvent, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::DomEvent => { + time_profile!(ProfilerCategory::ScriptDomEvent, None, profiler_chan, f) }, - ScriptThreadEventCategory::StylesheetLoad => ProfilerCategory::ScriptStylesheetLoad, - ScriptThreadEventCategory::SetViewport => ProfilerCategory::ScriptSetViewport, - ScriptThreadEventCategory::TimerEvent => ProfilerCategory::ScriptTimerEvent, - ScriptThreadEventCategory::WebSocketEvent => ProfilerCategory::ScriptWebSocketEvent, - ScriptThreadEventCategory::WorkerEvent => ProfilerCategory::ScriptWorkerEvent, - ScriptThreadEventCategory::WorkletEvent => ProfilerCategory::ScriptWorkletEvent, - ScriptThreadEventCategory::ServiceWorkerEvent => { - ProfilerCategory::ScriptServiceWorkerEvent + ScriptThreadEventCategory::FileRead => { + time_profile!(ProfilerCategory::ScriptFileRead, None, profiler_chan, f) }, - ScriptThreadEventCategory::EnterFullscreen => { - ProfilerCategory::ScriptEnterFullscreen + ScriptThreadEventCategory::FormPlannedNavigation => time_profile!( + ProfilerCategory::ScriptPlannedNavigation, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::HistoryEvent => { + time_profile!(ProfilerCategory::ScriptHistoryEvent, None, profiler_chan, f) }, - ScriptThreadEventCategory::ExitFullscreen => ProfilerCategory::ScriptExitFullscreen, - ScriptThreadEventCategory::PerformanceTimelineTask => { - ProfilerCategory::ScriptPerformanceEvent + ScriptThreadEventCategory::ImageCacheMsg => time_profile!( + ProfilerCategory::ScriptImageCacheMsg, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::InputEvent => { + time_profile!(ProfilerCategory::ScriptInputEvent, None, profiler_chan, f) }, - ScriptThreadEventCategory::WebGPUMsg => ProfilerCategory::ScriptWebGPUMsg, - }; - profile(profiler_cat, None, self.time_profiler_chan.clone(), f) + ScriptThreadEventCategory::NetworkEvent => { + time_profile!(ProfilerCategory::ScriptNetworkEvent, None, profiler_chan, f) + }, + ScriptThreadEventCategory::PortMessage => { + time_profile!(ProfilerCategory::ScriptPortMessage, None, profiler_chan, f) + }, + ScriptThreadEventCategory::Resize => { + time_profile!(ProfilerCategory::ScriptResize, None, profiler_chan, f) + }, + ScriptThreadEventCategory::ScriptEvent => { + time_profile!(ProfilerCategory::ScriptEvent, None, profiler_chan, f) + }, + ScriptThreadEventCategory::SetScrollState => time_profile!( + ProfilerCategory::ScriptSetScrollState, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::UpdateReplacedElement => time_profile!( + ProfilerCategory::ScriptUpdateReplacedElement, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::StylesheetLoad => time_profile!( + ProfilerCategory::ScriptStylesheetLoad, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::SetViewport => { + time_profile!(ProfilerCategory::ScriptSetViewport, None, profiler_chan, f) + }, + ScriptThreadEventCategory::TimerEvent => { + time_profile!(ProfilerCategory::ScriptTimerEvent, None, profiler_chan, f) + }, + ScriptThreadEventCategory::WebSocketEvent => time_profile!( + ProfilerCategory::ScriptWebSocketEvent, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::WorkerEvent => { + time_profile!(ProfilerCategory::ScriptWorkerEvent, None, profiler_chan, f) + }, + ScriptThreadEventCategory::WorkletEvent => { + time_profile!(ProfilerCategory::ScriptWorkletEvent, None, profiler_chan, f) + }, + ScriptThreadEventCategory::ServiceWorkerEvent => time_profile!( + ProfilerCategory::ScriptServiceWorkerEvent, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::EnterFullscreen => time_profile!( + ProfilerCategory::ScriptEnterFullscreen, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::ExitFullscreen => time_profile!( + ProfilerCategory::ScriptExitFullscreen, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::PerformanceTimelineTask => time_profile!( + ProfilerCategory::ScriptPerformanceEvent, + None, + profiler_chan, + f + ), + ScriptThreadEventCategory::WebGPUMsg => { + time_profile!(ProfilerCategory::ScriptWebGPUMsg, None, profiler_chan, f) + }, + } } else { f() }; |