* include/freetype/ftlogging.h (FT_Trace_Set_Level): Use more relevant
parameters name in function declaration. (FT_Custom_Log_Handler): Changed function name `ft_custom_log_handler'-> `FT_Custom_Log_Handler'. Updated documentation. * include/freetype/ftchapters.h: Added `debugging_apis' section under `support_api' chapter. * .gitmodules: Updated submodule to track recent changes in dlg library. * src/base/ftdebug.c (ft_log_handler): Updated code according to the recent updates in dlg library. (ft_logging_init): Added environment variable `FT_LOGGING_FILE', the variable `ft_fileptr' stores it's value. Changed function name `ft_custom_log_handler'-> `FT_Custom_Log_Handler'. * include/freetype/internal/ftdebug.h: Changed function name `ft_custom_log_handler'-> `FT_Custom_Log_Handler'. * README.git: Updated documentation. * docs/DEBUG: Updated documentation.
This commit is contained in:
parent
17700d419b
commit
4f472b5799
|
@ -1,4 +1,3 @@
|
|||
|
||||
[submodule "submodules/dlg"]
|
||||
path = submodules/dlg
|
||||
url = https://github.com/nyorain/dlg.git
|
||||
|
|
|
@ -35,6 +35,13 @@ Similarly, a build with `cmake' can be done directly from the git
|
|||
repository.
|
||||
|
||||
|
||||
For using the `FT_LOGGING' macro while debugging(see docs/DEBUG for
|
||||
more information) use the following git commands to checkout `dlg'
|
||||
library as a git submodule.
|
||||
|
||||
git submodule init
|
||||
git submodule update
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Copyright (C) 2005-2020 by
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
2020-08-24 Priyesh Kumar <priyeshkkumar@gmail.com>
|
||||
|
||||
* include/freetype/ftlogging.h (FT_Trace_Set_Level): Use more relevant
|
||||
parameters name in function declaration.
|
||||
(FT_Custom_Log_Handler): Changed function name `ft_custom_log_handler'->
|
||||
`FT_Custom_Log_Handler'.
|
||||
Updated documentation.
|
||||
|
||||
* include/freetype/ftchapters.h: Added `debugging_apis' section under
|
||||
`support_api' chapter.
|
||||
|
||||
* .gitmodules: Updated submodule to track recent changes in dlg library.
|
||||
|
||||
* src/base/ftdebug.c (ft_log_handler): Updated code according to the
|
||||
recent updates in dlg library.
|
||||
(ft_logging_init): Added environment variable `FT_LOGGING_FILE', the
|
||||
variable `ft_fileptr' stores it's value.
|
||||
Changed function name `ft_custom_log_handler'->
|
||||
`FT_Custom_Log_Handler'.
|
||||
|
||||
* include/freetype/internal/ftdebug.h: Changed function name
|
||||
`ft_custom_log_handler'-> `FT_Custom_Log_Handler'.
|
||||
|
||||
* README.git: Updated documentation.
|
||||
|
||||
* docs/DEBUG: Updated documentation.
|
||||
|
||||
2020-08-21 Priyesh Kumar <priyeshkkumar@gmail.com>
|
||||
|
||||
* include/freetype/internal/ftdebug.h (FT_LOG ): Use more relevant
|
||||
|
|
116
docs/DEBUG
116
docs/DEBUG
|
@ -26,6 +26,33 @@ located in the file `ftoption.h'. The macros are:
|
|||
appropriate `debug level' is configured at runtime through the
|
||||
`FT2_DEBUG' environment variable (more on this later).
|
||||
|
||||
FT_LOGGING
|
||||
|
||||
As mentioned above if `FT_DEBUG_LEVEL_ERROR' and
|
||||
`FT_DEBUG_LEVEL_TRACE' macros are defined, FreeType will send the
|
||||
debug and trace logs outputted from `FT_ERROR' and `FT_TRACE'
|
||||
macros to `stderr'.
|
||||
|
||||
`FT_LOGGING' is a new macro which is introduced to enhance the
|
||||
capabilities of `FT_TRACE' and `FT_ERROR' macros.
|
||||
`FT_LOGGING' macro depends on `FT_DEBUG_LEVEL_TRACE' and
|
||||
`FT_DEBUG_LEVEL_ERROR', therefore these macros will automatically
|
||||
be #defined once `FT_LOGGING' macro is #defined and
|
||||
the behaviour of `FT_TRACE' and `FT_ERROR' macros will change.
|
||||
Now, `FT_TRACE' and `FT_ERROR' macros will start sending the
|
||||
tracing and debugging messages to the file system instead of
|
||||
`stderr'.
|
||||
On the file system the log file with name `freetype2.log' will be
|
||||
generated in the same directory where the executable is placed.
|
||||
|
||||
There is an additional support of logging Time and the name of
|
||||
the `FT_COMPONENT' from which the current log is generated along
|
||||
with the actual tracing and debugging message, and for this user
|
||||
will have to define additional tags under the `FT2_DEBUG'
|
||||
environment variable(More details under section `FT2_DEBUG' under
|
||||
Environment Variables heading).
|
||||
|
||||
|
||||
FT_DEBUG_MEMORY
|
||||
|
||||
If this macro is #defined, the FreeType engine is linked with a
|
||||
|
@ -150,6 +177,31 @@ behaviour of FreeType at runtime.
|
|||
the memory and io components, which are set to the trace levels 5
|
||||
and 4, respectively.
|
||||
|
||||
`FT_LOGGING' related tags:
|
||||
|
||||
As mentioned above in the `FT_LOGGING' section below are the
|
||||
additional tags which can be added in `FT2_DEBUG' environment
|
||||
variable to log the time and the value of `FT_COMPONENT' in the
|
||||
actual log message:
|
||||
* -v: For printing the name of FreeType's component from which
|
||||
the current log is produced.
|
||||
* -t: For printing the time(in milliseconds) along with actual
|
||||
log message.
|
||||
|
||||
Example:
|
||||
|
||||
Case 1: FT2_DEBUG="any:7 memory:5 -vt"
|
||||
|
||||
[20:32:02:44969 {ttload}] table directory loaded
|
||||
|
||||
Case 2: FT2_DEBUG="any:7 memory:5 -t"
|
||||
|
||||
[20:32:02:44969 {ttload}] table directory loaded
|
||||
|
||||
Case 3: FT2_DEBUG="any:7 memory:5 -v"
|
||||
|
||||
[{ttload}] table directory loaded
|
||||
|
||||
|
||||
FT2_DEBUG_MEMORY
|
||||
|
||||
|
@ -201,6 +253,70 @@ behaviour of FreeType at runtime.
|
|||
If it is undefined, or if its value is not strictly positive,
|
||||
freed blocks are released at runtime.
|
||||
|
||||
|
||||
IV. Additional Capabilities with `FT_LOGGING'
|
||||
--------------------------------------------
|
||||
|
||||
With the support of `FT_LOGGING', four APIs have been introduced for
|
||||
providing additional debugging support to the applications using
|
||||
FreeType.
|
||||
|
||||
FT_Trace_Set_Level( const char* )
|
||||
|
||||
If FreeType is configured with `FT_LOGGING' the levels of tracing
|
||||
component set using `FT2_DEBUG' environment variable is considered
|
||||
as a default value.
|
||||
And this function can be used change/set the value of the levels
|
||||
of tracing components at run-time.
|
||||
|
||||
NOTE: If the environment variable `FT2_DEBUG is not defined the
|
||||
default value of the levels of tracing components will be NULL.
|
||||
|
||||
FT_Trace_Set_Default_Level():
|
||||
|
||||
If previously, `FT_Trace_Set_Level' functions is used to set new
|
||||
values of the tracing components of FreeType, this function could
|
||||
be used to reset the level of tracing components to the default
|
||||
value.
|
||||
Hence, the functions `FT_Trace_Set_Default_Level' and
|
||||
`FT_Trace_Set_Level' could be combined and used together to
|
||||
change the trace levels of FreeType's components for a particular
|
||||
block of code.
|
||||
|
||||
FT_Set_Log_Handler( ft_custom_log_handler ):
|
||||
|
||||
This API has been provided under the `FT_LOGGING' macro to support
|
||||
a feature wherein a custom log handler can be provided based on
|
||||
user’s choice. Doing so, FreeType will start calling the custom
|
||||
handler for new log messages and will no longer write these
|
||||
messages in predefined log file of FreeType. It will totally
|
||||
depend on user how the log messages will be handled.
|
||||
User just need to call this API with an argument of type
|
||||
ft_custom_log_handler which should match following function
|
||||
prototype:
|
||||
|
||||
void (*ft_custom_log_handler)( const char* ft_component, \
|
||||
const char* fmt, va_list args );
|
||||
|
||||
|
||||
|
||||
FT_Set_Default_Log_Handler():
|
||||
|
||||
If the user has chosen to set a custom log handler using the
|
||||
`FT_Set_Log_Handler' API above, the current API can be used to
|
||||
reset back the log handler to the Freetype's inbuilt log handler.
|
||||
Hence, the functions `FT_Set_Default_Log_Handler' and
|
||||
`FT_Set_Log_Handler' in combination can be used to separately
|
||||
handle the trace or error logs generated by a particular block
|
||||
of code.
|
||||
|
||||
|
||||
Applications need to #include the following header file to avail the
|
||||
above APIs:
|
||||
|
||||
#include<freetype/ftlogging.h>
|
||||
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Copyright (C) 2002-2020 by
|
||||
|
|
|
@ -123,6 +123,7 @@
|
|||
* gzip
|
||||
* lzw
|
||||
* bzip2
|
||||
* debugging_apis
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
|
@ -1,47 +1,144 @@
|
|||
#include FT_CONFIG_CONFIG_H
|
||||
/****************************************************************************
|
||||
*
|
||||
* ftlogging.h
|
||||
*
|
||||
* Additional debugging APIs.
|
||||
*
|
||||
* Copyright (C) 2008-2020 by
|
||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||
*
|
||||
* This file is part of the FreeType project, and may only be used,
|
||||
* modified, and distributed under the terms of the FreeType project
|
||||
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
||||
* this file you indicate that you have read the license and
|
||||
* understand and accept it fully.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#ifndef FTLOGGING_H_
|
||||
#define FTLOGGING_H_
|
||||
|
||||
#include <ft2build.h>
|
||||
#include FT_CONFIG_CONFIG_H
|
||||
|
||||
FT_BEGIN_HEADER
|
||||
|
||||
/***************************************************************************
|
||||
*
|
||||
* If FT_LOGGING is enabled, user can change the trace level at run time
|
||||
* using the function `FT_Trace_Set_Level()` by passing the desired trace
|
||||
* level as an argument.
|
||||
* User can also set the default trace level which is supplied by
|
||||
* environment variable `FT2_DEBUG`
|
||||
* See ftdebug.c for definitions
|
||||
*
|
||||
*/
|
||||
/**************************************************************************
|
||||
*
|
||||
* @section:
|
||||
* debugging_apis
|
||||
*
|
||||
* @title:
|
||||
* External Debugginng APIs
|
||||
*
|
||||
* @abstract:
|
||||
* Pubic APIs to use while debugging using `FT_LOGGING' macro
|
||||
*
|
||||
* @description:
|
||||
* This section contains the declaration the public APIs which can be
|
||||
* used to debug an application using `FT_LOGGING'.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Trace_Set_Level
|
||||
*
|
||||
* @description:
|
||||
* To change the levels of tracing components at run time.
|
||||
*
|
||||
* @input:
|
||||
*
|
||||
* tracing_level ::
|
||||
* New levels of of tracing components.
|
||||
*
|
||||
* @example:
|
||||
* This function can be used to change the tracing levels of FreeType's
|
||||
* component as follows:
|
||||
*
|
||||
* ```
|
||||
* new_levels = "any:7 memory:0";
|
||||
* FT_Trace_Set_Level( new_levels );
|
||||
* ```
|
||||
*/
|
||||
FT_EXPORT( void )
|
||||
FT_Trace_Set_Level( const char* level );
|
||||
FT_Trace_Set_Level( const char* tracing_level );
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Trace_Set_Default_Level
|
||||
*
|
||||
* @description:
|
||||
* If previously, `FT_Trace_Set_Level' functions is used to set new
|
||||
* values of the tracing components of FreeType, this function could
|
||||
* be used to reset the level of tracing components to the default
|
||||
* value.
|
||||
*
|
||||
*/
|
||||
FT_EXPORT( void )
|
||||
FT_Trace_Set_Default_Level( void );
|
||||
|
||||
|
||||
/* An external callback function to be used to define an output handler */
|
||||
/**************************************************************************
|
||||
*
|
||||
* @functype:
|
||||
* FT_Custom_Log_Handler
|
||||
*
|
||||
* @description:
|
||||
* A function used to handle the logging of tracing and debug messages
|
||||
* on a file system.
|
||||
*
|
||||
* @input:
|
||||
* ft_component ::
|
||||
* The name of `FT_COMPONENT' from which the current debug or error
|
||||
* message is produced.
|
||||
*
|
||||
* fmt ::
|
||||
* Actual debug or tracing message.
|
||||
*
|
||||
* args::
|
||||
* Arguments of debug or tracing messages.
|
||||
*
|
||||
*/
|
||||
typedef void
|
||||
(*ft_custom_log_handler)( const char* ft_component, const char* fmt,
|
||||
(*FT_Custom_Log_Handler)( const char* ft_component, const char* fmt,
|
||||
va_list args );
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* If FT_LOGGING is enabled user can provide their own function to handle
|
||||
* the log messages using the function `FT_Set_Log_Handler()` by passing
|
||||
* the function name which they want to use.
|
||||
* User could also revert back to use FreeType's inbuilt function to
|
||||
* handle logs using function `FT_Set_Default_Log_Handler()`
|
||||
* Defined in src/base/ftdebug.c
|
||||
*
|
||||
*/
|
||||
* @function:
|
||||
* FT_Set_Log_Handler
|
||||
*
|
||||
* @description:
|
||||
* A function to set a custom log handler
|
||||
*
|
||||
* @input:
|
||||
*
|
||||
* handler ::
|
||||
* New logging function
|
||||
*
|
||||
*/
|
||||
FT_EXPORT( void )
|
||||
FT_Set_Log_Handler( ft_custom_log_handler handler );
|
||||
FT_Set_Log_Handler( FT_Custom_Log_Handler handler );
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
*
|
||||
* @function:
|
||||
* FT_Set_Default_Log_Handler
|
||||
*
|
||||
* @description:
|
||||
* If previously, `FT_Set_Log_Handler' functions is used to set new
|
||||
* custom logging function, this API could be used to reset the back
|
||||
* the log handler to FreeType's inbuilt log handler.
|
||||
*
|
||||
*/
|
||||
|
||||
FT_EXPORT( void )
|
||||
FT_Set_Default_Log_Handler( void );
|
||||
|
|
|
@ -388,7 +388,7 @@ ft_remove_tag( const char* tag );
|
|||
*
|
||||
* These are defined in ftdebug.c
|
||||
*/
|
||||
extern ft_custom_log_handler custom_output_handler;
|
||||
extern FT_Custom_Log_Handler custom_output_handler;
|
||||
extern dlg_handler ft_default_log_handler;
|
||||
|
||||
/**************************************************************************
|
||||
|
|
|
@ -79,25 +79,9 @@
|
|||
static bool ft_timestamp_flag = false;
|
||||
static bool ft_have_newline_char = true;
|
||||
|
||||
ft_custom_log_handler custom_output_handler = NULL;
|
||||
FT_Custom_Log_Handler custom_output_handler = NULL;
|
||||
dlg_handler ft_default_log_handler = NULL;
|
||||
|
||||
/* different types of dlg features to be used according to the flags */
|
||||
/* passed in FT2_DEBUG environment variable */
|
||||
|
||||
static unsigned int features_component = dlg_output_threadsafe
|
||||
| dlg_output_tags;
|
||||
static unsigned int features_timestamp = dlg_output_threadsafe
|
||||
| dlg_output_time
|
||||
| dlg_output_time_msecs;
|
||||
static unsigned int features_both = dlg_output_threadsafe
|
||||
| dlg_output_time_msecs
|
||||
|dlg_output_time
|
||||
| dlg_output_tags ;
|
||||
static unsigned int features_none = dlg_output_threadsafe;
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -428,7 +412,7 @@ else
|
|||
{
|
||||
ft_default_log_handler = ft_log_handler;
|
||||
ft_default_trace_level = ft_getenv( "FT2_DEBUG" );
|
||||
ft_fileptr = fopen( "freetype2.log", "w" );
|
||||
ft_fileptr = fopen( ft_getenv( "FT_LOGGING_FILE" ), "w" );
|
||||
|
||||
ft_debug_init();
|
||||
/* We need to set the default FreeType specific dlg's output handler */
|
||||
|
@ -452,19 +436,19 @@ else
|
|||
const char* string, void* data )
|
||||
{
|
||||
( void ) data;
|
||||
static unsigned int features ;
|
||||
const char* features ;
|
||||
if( ft_timestamp_flag && ft_component_flag && ft_have_newline_char )
|
||||
features = features_both;
|
||||
features = "[%h:%m %t] %c";
|
||||
else if( ft_component_flag && ft_have_newline_char)
|
||||
features = features_component;
|
||||
features = "[%t] %c";
|
||||
else if( ft_timestamp_flag && ft_have_newline_char )
|
||||
features = features_timestamp;
|
||||
features = "[%t] %c";
|
||||
else
|
||||
features = features_none;
|
||||
features = "%c";
|
||||
|
||||
dlg_generic_outputf_stream( ft_fileptr, features, origin, string,
|
||||
dlg_default_output_styles, true );
|
||||
|
||||
|
||||
dlg_generic_output_stream( ft_fileptr, features, origin, string,
|
||||
dlg_default_output_styles );
|
||||
|
||||
if( strchr( string, '\n' ) )
|
||||
ft_have_newline_char = true;
|
||||
|
@ -509,7 +493,7 @@ else
|
|||
*/
|
||||
|
||||
FT_EXPORT_DEF( void )
|
||||
FT_Set_Log_Handler( ft_custom_log_handler handler )
|
||||
FT_Set_Log_Handler( FT_Custom_Log_Handler handler )
|
||||
{
|
||||
custom_output_handler = handler;
|
||||
}
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 407e385d2e40e11a1f1643cdf698fd09d62561ca
|
||||
Subproject commit a4897614699fb8e76f23a2d50a63b4d674e39f90
|
Loading…
Reference in New Issue