aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_thread.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/script_thread.rs')
-rw-r--r--components/script/script_thread.rs153
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()
};