8000
Skip to content

[spi_device] Combine log statements to reduce loop blocking - #12967

Merged
bdraco merged 1 commit into
devfrom
combine-logs-spi_device
Jan 5, 2026
Merged

[spi_device] Combine log statements to reduce loop blocking#12967
bdraco merged 1 commit into
devfrom
combine-logs-spi_device

Conversation

@bdraco
@bdraco bdraco commented Jan 5, 2026
Copy link
Copy Markdown
Member

What does this implement/fix?

Combine consecutive log statements into single calls using multi-line string literals.

Logging is one of the most intensive operations in ESPHome and blocks the event loop longer than most other operations. Each ESP_LOG* call involves formatting, memory allocation, serial output, and network packet transmission. Combining consecutive log statements reduces event loop blocking and the number of network packets sent to connected clients.

Note: The log processor reformats multi-line output so each line gets its own timestamp and log level prefix - the final output format is unchanged. Minor reordering of dump_config output may occur when LOG_PIN or other logging macros cannot be combined with ESP_LOG* calls - this is acceptable as it does not affect functionality.

See https://developers.esphome.io/architecture/logging/ for more details.

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Developer breaking change (an API change that could break external components)
  • Code quality improvements to existing code or addition of tests
  • Other

Related issue or feature (if applicable):

Pull request in esphome-docs with documentation (if applicable):

Test Environment

  • ESP32
  • ESP32 IDF
  • ESP8266
  • RP2040
  • BK72xx
  • RTL87xx
  • nRF52840

Example entry for config.yaml:

# N/A - no config changes

Checklist:

  • The code change is tested and works locally.
  • Tests have been added to verify that the new code works (under tests/ folder).

If user exposed functionality or configuration variables are added/changed:

Copilot AI review requested due to automatic review settings January 5, 2026 02:13
@bdraco
bdraco requested a review from clydebarrow as a code owner January 5, 2026 02:13
@codecov-commenter
codecov-commenter commented Jan 5, 2026
Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 73.46%. Comparing base (1202756) to head (a939d89).
⚠️ Report is 1 commits behind head on dev.

Additional details and impacted files
@@           Coverage Diff           @@
##              dev   #12967   +/-   ##
=======================================
  Coverage   73.46%   73.46%           
=======================================
  Files          53       53           
  Lines       11310    11310           
  Branches     1535     1535           
=======================================
  Hits         8309     8309           
  Misses       2602     2602           
  Partials      399      399           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions
github-actions Bot commented Jan 5, 2026
Copy link
Copy Markdown
Contributor

👋 Hi there! I've automatically requested reviews from codeowners based on the files changed in this PR.

@clydebarrow - You've been requested to review this PR as codeowner(s) of 1 file(s) that were modified. Thanks for your time! 🙏

@github-actions
github-actions Bot commented Jan 5, 2026
Copy link
Copy Markdown
Contributor

To use the changes from this PR as an external component, add the following to your ESPHome configuration YAML file:

external_components:
  - source: github://pr#12967
    components: [spi_device]
    refresh: 1h

(Added by the PR bot)

Copilot AI left a comment
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR combines consecutive ESP_LOGCONFIG statements in the spi_device component into a single call using multi-line string literals to reduce event loop blocking during logging operations.

Key Changes:

  • Consolidates two separate ESP_LOGCONFIG calls into one multi-line log statement
  • Reduces the number of log processing operations from 2 to 1 (LOG_PIN cannot be combined as it's a separate macro)
  • Results in minor reordering of dump_config output (CS pin now appears after Mode instead of before)

@github-actions
github-actions Bot commented Jan 5, 2026
Copy link
Copy Markdown
Contributor

Memory Impact Analysis

Components: spi_device
Platform: esp8266-ard

Metric Target Branch This PR Change
RAM 28,392 bytes 28,392 bytes ➡️ +0 bytes (0.00%)
Flash 280,775 bytes 280,759 bytes 📉 ✅ -16 bytes (-0.01%)
📊 Component Memory Breakdown
Component Target Flash PR Flash Change
[esphome]spi_device 281 bytes 269 bytes 📉 🎉 -12 bytes (-4.27%)
🔍 Symbol-Level Changes (click to expand)

Changed Symbols

Symbol Target Size PR Size Change
esphome::spi_device::SPIDeviceComponent::dump_config() 115 bytes 103 bytes 📉 -12 bytes (-10.43%)

Note: This analysis measures static RAM and Flash usage only (compile-time allocation).
Dynamic memory (heap) cannot be measured automatically.
⚠️ You must test this PR on a real device to measure free heap and ensure no runtime memory issues.

This analysis runs automatically when components change. Memory usage is measured from a representative test configuration.

@bdraco
bdraco commented Jan 5, 2026
Copy link
Copy Markdown
Member Author

thanks

@bdraco
bdraco merged commit 9cd0030 into dev Jan 5, 2026
42 checks passed
@bdraco
bdraco deleted the combine-logs-spi_device branch January 5, 2026 02:55
@github-actions github-actions Bot locked and limited conversation to collaborators Jan 7, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

0