[librsvg/librsvg-2.42] Keep track of how many elements get instanced through <use> nodes
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/librsvg-2.42] Keep track of how many elements get instanced through <use> nodes
- Date: Wed, 22 Aug 2018 18:15:57 +0000 (UTC)
commit 2aeaac79265f9e916fdd8ff3990287fc9cbf119b
Author: Federico Mena Quintero <federico gnome org>
Date: Wed Aug 22 11:00:19 2018 -0500
Keep track of how many elements get instanced through <use> nodes
librsvg/rsvg-base.c | 6 ++++++
librsvg/rsvg-private.h | 1 +
rsvg_internals/src/drawing_ctx.rs | 8 ++++++++
rsvg_internals/src/structure.rs | 2 ++
4 files changed, 17 insertions(+)
---
diff --git a/librsvg/rsvg-base.c b/librsvg/rsvg-base.c
index f9a0a1b4..2cd7ccb6 100644
--- a/librsvg/rsvg-base.c
+++ b/librsvg/rsvg-base.c
@@ -1740,6 +1740,12 @@ rsvg_drawing_ctx_release_node (RsvgDrawingCtx * ctx, RsvgNode *node)
ctx->acquired_nodes = g_slist_remove (ctx->acquired_nodes, node);
}
+void
+rsvg_drawing_ctx_increase_num_elements_rendered_through_use (RsvgDrawingCtx *draw_ctx)
+{
+ draw_ctx->num_elements_rendered_through_use++;
+}
+
void
rsvg_drawing_ctx_add_node_and_ancestors_to_stack (RsvgDrawingCtx *draw_ctx, RsvgNode *node)
{
diff --git a/librsvg/rsvg-private.h b/librsvg/rsvg-private.h
index 81555866..5424ebab 100644
--- a/librsvg/rsvg-private.h
+++ b/librsvg/rsvg-private.h
@@ -200,6 +200,7 @@ struct RsvgDrawingCtx {
RsvgState *state;
GError **error;
RsvgDefs *defs;
+ gsize num_elements_rendered_through_use;
PangoContext *pango_context;
double dpi_x, dpi_y;
RsvgViewBox vb;
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 54d1b92b..79f0c9f6 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -45,6 +45,8 @@ extern "C" {
fn rsvg_drawing_ctx_release_node(draw_ctx: *const RsvgDrawingCtx, node: *mut RsvgNode);
+ fn rsvg_drawing_ctx_increase_num_elements_rendered_through_use(draw_ctx: *const RsvgDrawingCtx);
+
fn rsvg_drawing_ctx_get_current_state_affine(draw_ctx: *const RsvgDrawingCtx) -> cairo::Matrix;
fn rsvg_drawing_ctx_set_current_state_affine(
@@ -288,6 +290,12 @@ pub fn state_pop(draw_ctx: *const RsvgDrawingCtx) {
}
}
+pub fn increase_num_elements_rendered_through_use(draw_ctx: *const RsvgDrawingCtx) {
+ unsafe {
+ rsvg_drawing_ctx_increase_num_elements_rendered_through_use(draw_ctx);
+ }
+}
+
pub struct AcquiredNode(*const RsvgDrawingCtx, *mut RsvgNode);
impl Drop for AcquiredNode {
diff --git a/rsvg_internals/src/structure.rs b/rsvg_internals/src/structure.rs
index 0b2e183e..71c9ff09 100644
--- a/rsvg_internals/src/structure.rs
+++ b/rsvg_internals/src/structure.rs
@@ -291,6 +291,8 @@ impl NodeTrait for NodeUse {
return;
}
+ drawing_ctx::increase_num_elements_rendered_through_use(draw_ctx);
+
let nx = self.x.get().normalize(draw_ctx);
let ny = self.y.get().normalize(draw_ctx);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]