Extend DFTE template engine debug API and refine renderer logging.

Add helpers in DeviceFrameworkTemplateEngineDebug and wire clearer
instrumentation in DeviceFrameworkTemplateRenderer; update README.
This commit is contained in:
2026-04-20 23:28:51 +10:00
parent 8940376db6
commit e3af7eacbf
4 changed files with 65 additions and 13 deletions
@@ -2,21 +2,39 @@
// Global logger pointer - starts as nullptr (disabled by default)
DeviceFrameworkTemplateEngineLogger* deviceFrameworkTemplateEngineLogger = nullptr;
const void* deviceFrameworkTemplateEngineLoggerOwner = nullptr;
// ============================================================================
// LOGGING CONFIGURATION IMPLEMENTATIONS
// ============================================================================
bool deviceFrameworkTemplateEngineEnableLogging(DeviceFrameworkTemplateEngineLogger* logger) {
return deviceFrameworkTemplateEngineEnableLogging(logger, nullptr);
}
bool deviceFrameworkTemplateEngineEnableLogging(DeviceFrameworkTemplateEngineLogger* logger, const void* ownerTag) {
if (logger == nullptr) {
return false;
}
deviceFrameworkTemplateEngineLogger = logger;
deviceFrameworkTemplateEngineLoggerOwner = ownerTag ? ownerTag : static_cast<const void*>(logger);
return true;
}
void deviceFrameworkTemplateEngineDisableLogging() {
deviceFrameworkTemplateEngineLogger = nullptr;
deviceFrameworkTemplateEngineLoggerOwner = nullptr;
}
bool deviceFrameworkTemplateEngineDisableLoggingForOwner(const void* ownerTag) {
if (deviceFrameworkTemplateEngineLogger == nullptr || ownerTag == nullptr) {
return false;
}
if (deviceFrameworkTemplateEngineLoggerOwner != ownerTag) {
return false;
}
deviceFrameworkTemplateEngineDisableLogging();
return true;
}
bool deviceFrameworkTemplateEngineIsLoggingEnabled() {
@@ -25,4 +43,8 @@ bool deviceFrameworkTemplateEngineIsLoggingEnabled() {
DeviceFrameworkTemplateEngineLogger* deviceFrameworkTemplateEngineGetLogger() {
return deviceFrameworkTemplateEngineLogger;
}
const void* deviceFrameworkTemplateEngineGetLoggerOwner() {
return deviceFrameworkTemplateEngineLoggerOwner;
}
+19 -10
View File
@@ -261,18 +261,24 @@ static DeviceFrameworkTemplateRenderer::RenderOutcome processIteratorContext(Dev
} // namespace
// Helper function to convert RenderingContextType to string
static String getContextTypeString(RenderingContextType type) {
switch (type) {
case RenderingContextType::TEMPLATE: return "TEMPLATE";
case RenderingContextType::PLACEHOLDER_DATA: return "PLACEHOLDER_DATA";
case RenderingContextType::PLACEHOLDER_TEMPLATE: return "PLACEHOLDER_TEMPLATE";
default: return "UNKNOWN";
}
}
// Helper function to log state transitions with stack state
static void logStateTransition(DeviceFrameworkTemplateContext& ctx, const String& fromState, const String& toState, const String& reason = "") {
#if !defined(DFTE_ENABLE_TRACE)
(void)ctx;
(void)fromState;
(void)toState;
(void)reason;
return;
#else
auto getContextTypeString = [](RenderingContextType type) -> String {
switch (type) {
case RenderingContextType::TEMPLATE: return "TEMPLATE";
case RenderingContextType::PLACEHOLDER_DATA: return "PLACEHOLDER_DATA";
case RenderingContextType::PLACEHOLDER_TEMPLATE: return "PLACEHOLDER_TEMPLATE";
default: return "UNKNOWN";
}
};
if (!deviceFrameworkTemplateEngineLogger) {
return;
}
@@ -287,6 +293,7 @@ static void logStateTransition(DeviceFrameworkTemplateContext& ctx, const String
msg += " | Current: " + String(currentCtx->name) + " (type=" + getContextTypeString(currentCtx->type) + ")";
}
deviceFrameworkTemplateEngineLogger->debug(msg);
#endif
}
static String getStateName(TemplateRenderState state) {
@@ -887,6 +894,8 @@ void DeviceFrameworkTemplateRenderer::initializeContext(DeviceFrameworkTemplateC
ctx.state = TemplateRenderState::TEXT;
logStateTransition(ctx, "INIT", "TEXT", "Initialized template context");
DFTE_LOG_TRACE("initializeContext len=" + String(rootCtx->context.templateCtx.templateLen) + " progmem=" +
String(templateInProgmem ? 1 : 0));
}
bool DeviceFrameworkTemplateRenderer::isComplete(const DeviceFrameworkTemplateContext& ctx) {