Trace more functions by adding perfetto tracing events (#33417)

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
This commit is contained in:
atbrakhi 2024-09-13 07:51:19 +02:00 committed by GitHub
parent 03abf7751a
commit 497df024b1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 116 additions and 4 deletions

View file

@ -88,6 +88,7 @@ use style::values::computed::{CSSPixelLength, FontSize, Length, NonNegativeLengt
use style::values::specified::font::KeywordInfo;
use style::{driver, Zero};
use style_traits::{CSSPixel, DevicePixel, SpeculativePainter};
use tracing::{span, Level};
use url::Url;
use webrender_api::units::LayoutPixel;
use webrender_api::{units, ExternalScrollId, HitTestFlags};
@ -185,6 +186,7 @@ impl LayoutFactory for LayoutFactoryImpl {
}
}
#[derive(Debug)]
struct ScriptReflowResult {
script_reflow: ScriptReflow,
result: RefCell<Option<ReflowComplete>>,
@ -252,6 +254,7 @@ impl Layout for LayoutThread {
);
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn add_stylesheet(
&mut self,
stylesheet: ServoArc<Stylesheet>,
@ -271,6 +274,7 @@ impl Layout for LayoutThread {
}
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn remove_stylesheet(&mut self, stylesheet: ServoArc<Stylesheet>) {
let guard = stylesheet.shared_lock.read();
let stylesheet = DocumentStyleSheet(stylesheet.clone());
@ -279,18 +283,22 @@ impl Layout for LayoutThread {
.remove_all_web_fonts_from_stylesheet(&stylesheet);
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_content_box(&self, node: OpaqueNode) -> Option<UntypedRect<Au>> {
process_content_box_request(node, self.fragment_tree.borrow().clone())
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_content_boxes(&self, node: OpaqueNode) -> Vec<UntypedRect<Au>> {
process_content_boxes_request(node, self.fragment_tree.borrow().clone())
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_client_rect(&self, node: OpaqueNode) -> UntypedRect<i32> {
process_node_geometry_request(node, self.fragment_tree.borrow().clone())
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_element_inner_text(
&self,
node: script_layout_interface::TrustedNodeAddress,
@ -308,6 +316,7 @@ impl Layout for LayoutThread {
None
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_nodes_from_point(
&self,
point: UntypedPoint2D<f32>,
@ -330,10 +339,12 @@ impl Layout for LayoutThread {
results.iter().map(|result| result.node.into()).collect()
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_offset_parent(&self, node: OpaqueNode) -> OffsetParentResponse {
process_offset_parent_query(node, self.fragment_tree.borrow().clone())
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_resolved_style(
&self,
node: TrustedNodeAddress,
@ -369,6 +380,7 @@ impl Layout for LayoutThread {
)
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_resolved_font_style(
&self,
node: TrustedNodeAddress,
@ -401,10 +413,12 @@ impl Layout for LayoutThread {
)
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_scrolling_area(&self, node: Option<OpaqueNode>) -> UntypedRect<i32> {
process_node_scroll_area_request(node, self.fragment_tree.borrow().clone())
}
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn query_text_indext(
&self,
node: OpaqueNode,
@ -641,6 +655,7 @@ impl LayoutThread {
}
/// The high-level routine that performs layout.
#[tracing::instrument(skip(self), fields(servo_profiling = true))]
fn handle_reflow(&mut self, data: &mut ScriptReflowResult) {
let document = unsafe { ServoLayoutNode::new(&data.document) };
let document = document.as_document().unwrap();
@ -760,6 +775,8 @@ impl LayoutThread {
};
if token.should_traverse() {
let span = span!(Level::TRACE, "driver::traverse_dom", servo_profiling = true);
let _enter = span.enter();
let dirty_root: ServoLayoutNode =
driver::traverse_dom(&traversal, token, rayon_pool).as_node();