freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] GSoC-2019-moazin 0f589cc: Tracing implemented for OT-SVG cod


From: Moazin Khatti
Subject: [freetype2] GSoC-2019-moazin 0f589cc: Tracing implemented for OT-SVG code.
Date: Mon, 29 Jul 2019 10:42:27 -0400 (EDT)

branch: GSoC-2019-moazin
commit 0f589ccbe333c631f7bbb313095ca25d3b26f898
Author: Moazin Khatti <address@hidden>
Commit: Moazin Khatti <address@hidden>

    Tracing implemented for OT-SVG code.
---
 include/freetype/internal/fttrace.h |  1 +
 src/base/ftobjs.c                   |  1 +
 src/cff/cffgload.c                  |  3 +++
 src/sfnt/ttsvg.c                    | 27 +++++++++++++++++++++++++++
 src/svg/ftsvg.c                     |  7 +++++++
 src/truetype/ttgload.c              |  3 +++
 6 files changed, 42 insertions(+)

diff --git a/include/freetype/internal/fttrace.h 
b/include/freetype/internal/fttrace.h
index f5f9598..17fd8c9 100644
--- a/include/freetype/internal/fttrace.h
+++ b/include/freetype/internal/fttrace.h
@@ -39,6 +39,7 @@ FT_TRACE_DEF( mm )        /* MM interface            (ftmm.c) 
    */
 FT_TRACE_DEF( psprops )   /* PS driver properties    (ftpsprop.c) */
 FT_TRACE_DEF( raccess )   /* resource fork accessor  (ftrfork.c)  */
 FT_TRACE_DEF( raster )    /* monochrome rasterizer   (ftraster.c) */
+FT_TRACE_DEF( otsvg )    /* ot-svg renderer         (ftsvg.c)    */
 FT_TRACE_DEF( smooth )    /* anti-aliasing raster    (ftgrays.c)  */
 FT_TRACE_DEF( synth )     /* bold/slant synthesizer  (ftsynth.c)  */
 
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 626c93d..b4b6265 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -884,6 +884,7 @@
     if ( ( load_flags & FT_LOAD_COLOR ) &&
          ( ttface->svg ) )
     {
+      FT_TRACE3(( "SVG table exists, calling `FT_Load_Glyph' with 
`FT_LOAD_NO_SCALE'\n" ));
       /* load the TTF/CFF glyph without any scaling,
        * this is so that ultimately, these outlines
        * can be used to calculate the bounding box and
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c
index 58ba300..629b9b1 100644
--- a/src/cff/cffgload.c
+++ b/src/cff/cffgload.c
@@ -352,13 +352,16 @@
     if ( ( load_flags & FT_LOAD_COLOR ) &&
          ( ((TT_Face)glyph->root.face)->svg ) )
     {
+      FT_TRACE3(( "Attemping to load SVG glyph\n" ));
       SFNT_Service  sfnt = (SFNT_Service)((TT_Face)glyph->root.face)->sfnt;
       error = sfnt->load_svg_doc( (FT_GlyphSlot)glyph, glyph_index );
       if( error == FT_Err_Ok )
       {
+        FT_TRACE3(( "Successfully loaded SVG glyph\n" ));
         glyph->root.format = FT_GLYPH_FORMAT_SVG;
         return error;
       }
+      FT_TRACE3(( "Failed to load SVG glyph\n" ));
     }
 #endif
 
diff --git a/src/sfnt/ttsvg.c b/src/sfnt/ttsvg.c
index 4b8ef6a..f4a85ca 100644
--- a/src/sfnt/ttsvg.c
+++ b/src/sfnt/ttsvg.c
@@ -88,6 +88,9 @@
     p = svg->svg_doc_list;
     svg->num_entries = FT_NEXT_USHORT( p );
 
+    FT_TRACE3(( "version: %d\n", svg->version ));
+    FT_TRACE3(( "num entiries: %d\n", svg->num_entries ));
+
     svg->table =      table;
     svg->table_size = table_size;
 
@@ -182,8 +185,17 @@
       return error;
     }
 
+    FT_TRACE6(( "--- binary search glyph id: %d ---\n", glyph_index ));
+
     start_doc = extract_svg_doc( stream + start_index * 12 );
     end_doc   = extract_svg_doc( stream + end_index * 12 );
+
+    FT_TRACE6(( "--- start glyph ---\n" ));
+    FT_TRACE6(( "start_id: %d\n", start_doc.start_glyph_id ));
+    FT_TRACE6(( "end_id: %d\n", start_doc.end_glyph_id ));
+    FT_TRACE6(( "--- end glyph ---\n" ));
+    FT_TRACE6(( "start_id: %d\n", end_doc.start_glyph_id ));
+    FT_TRACE6(( "end_id: %d\n", end_doc.end_glyph_id ));
     if ( ( compare_svg_doc( start_doc, glyph_index ) == -1 ) ||
          ( compare_svg_doc( end_doc, glyph_index ) == 1 ) )
     {
@@ -195,27 +207,37 @@
     {
       i = ( start_index + end_index ) / 2;
       mid_doc = extract_svg_doc( stream + i * 12 );
+      FT_TRACE6(( "--- current glyph ---\n" ));
+      FT_TRACE6(( "start_id: %d\n", mid_doc.start_glyph_id ));
+      FT_TRACE6(( "end_id: %d\n", mid_doc.end_glyph_id ));
       comp_res = compare_svg_doc( mid_doc, glyph_index );
       if ( comp_res == 1 )
       {
         start_index = i + 1;
         start_doc = extract_svg_doc( stream + start_index * 4 );
+        FT_TRACE6(( "RIGHT\n" ));
       }
       else if ( comp_res == -1 )
       {
         end_index = i - 1;
         end_doc = extract_svg_doc( stream + end_index * 4 );
+        FT_TRACE6(( "LEFT\n" ));
       }
       else
       {
         found = TRUE;
+        FT_TRACE5(( "FOUND\n" ));
         break;
       }
     }
 
+    FT_TRACE5(( "--- binary search end ---\n" ));
     /* search algo end */
     if ( found != TRUE )
+    {
+      FT_TRACE5(( "NOT FOUND\n" ));
       error = FT_THROW( Invalid_Glyph_Index );
+    }
     else
     {
       *doc_offset = mid_doc.offset;
@@ -274,6 +296,7 @@
        * Since SVG docs will be lesser in size then 2^32, we can use this
        * accurately. The four bytes are stored in little-endian format.
        */
+      FT_TRACE4(( "SVG document found is GZIP compressed\n" ));
       uncomp_size = (FT_ULong)doc_list[doc_length - 1] << 24 |
                     (FT_ULong)doc_list[doc_length - 2] << 16 |
                     (FT_ULong)doc_list[doc_length - 3] << 8  |
@@ -300,6 +323,10 @@
     svg_document->start_glyph_id      = start_glyph_id;
     svg_document->end_glyph_id        = end_glyph_id;
 
+    FT_TRACE5(( "start_glyph_id: %d\n", start_glyph_id ));
+    FT_TRACE5(( "end_glyph_id:   %d\n", end_glyph_id ));
+    FT_TRACE5(( "svg_document:\n%.*s\n", doc_length, doc_list ));
+
     glyph->other = svg_document;
     glyph->metrics.horiAdvance *= ((float)glyph->face->size->metrics.x_ppem)/
                                   ((float)glyph->face->units_per_EM) * 64.0;
diff --git a/src/svg/ftsvg.c b/src/svg/ftsvg.c
index 4c0146c..2db947f 100644
--- a/src/svg/ftsvg.c
+++ b/src/svg/ftsvg.c
@@ -28,6 +28,9 @@
 
 #include "ftsvg.h"
 
+#undef  FT_COMPONENT
+#define FT_COMPONENT otsvg
+
 #ifdef FT_CONFIG_OPTION_SVG
   /* ft_svg_init */
   static FT_Error
@@ -36,12 +39,14 @@
     FT_Error    error = FT_Err_Ok;
     svg_module->loaded = FALSE;
 #ifdef FT_CONFIG_OPTION_DEFAULT_SVG
+    FT_TRACE3(( "ft_svg_init: Default hooks being set\n" ));
     svg_module->hooks.init_svg = (SVG_Lib_Init_Func)rsvg_port_init;
     svg_module->hooks.free_svg = (SVG_Lib_Free_Func)rsvg_port_free;
     svg_module->hooks.render_svg = (SVG_Lib_Render_Func)rsvg_port_render;
     svg_module->hooks.get_buffer_size = 
(SVG_Lib_Get_Buffer_Size_Func)rsvg_port_get_buffer_size;
     svg_module->hooks_set = TRUE;
 #else
+    FT_TRACE3(( "ft_svg_init: No default hooks set\n" ));
     svg_module->hooks_set = FALSE;
 #endif
     return error;
@@ -74,11 +79,13 @@
 
     if ( svg_renderer->hooks_set == FALSE )
     {
+      FT_TRACE1(( "Hooks are NOT set. Can't render OT-SVG glyphs\n" ));
       return FT_THROW( Missing_SVG_Hooks );
     }
 
     if ( svg_renderer->loaded == FALSE )
     {
+      FT_TRACE3(( "ft_svg_render: first rendering, calling init hook\n" ));
       error = hooks.init_svg( library );
       svg_renderer->loaded = TRUE;
     }
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index f65e003..817852a 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -2911,14 +2911,17 @@
     /* check for OT-SVG */
     if ( ( load_flags & FT_LOAD_COLOR ) && ( ((TT_Face)glyph->face)->svg ) )
     {
+      FT_TRACE3(( "Attemping to load SVG glyph\n" ));
       SFNT_Service  sfnt;
       sfnt = (SFNT_Service)((TT_Face)glyph->face)->sfnt;
       error = sfnt->load_svg_doc( glyph, glyph_index );
       if( error == FT_Err_Ok )
       {
+        FT_TRACE3(( "Successfully loaded SVG glyph\n" ));
         glyph->format = FT_GLYPH_FORMAT_SVG;
         return error;
       }
+      FT_TRACE3(( "Failed to load SVG glyph\n" ));
     }
 #endif
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]