Skip to content

Commit e0cff0f

Browse files
committed
Reduce unnecessary chunking
1 parent 79cb629 commit e0cff0f

2 files changed

Lines changed: 21 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ SSD1306 monochrome OLED display.
1313
- Implement `embedded_graphics::draw_target::DrawTarget::fill_contiguous` to more improve performance when filling
1414
contiguous regions.
1515

16+
### Changed
17+
- Improved interface utilisation when the buffer to be sent is contiguous.
18+
1619
## [0.10.0] - 2025-03-22
1720
### Changed
1821
- Added `DisplaySize64x32` to the prelude

src/lib.rs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -502,15 +502,25 @@ where
502502
let page_lower = upper_left.0 as usize;
503503
let page_upper = lower_right.0 as usize;
504504

505-
for c in buffer
506-
.chunks(disp_width)
507-
.skip(starting_page)
508-
.take(num_pages)
509-
.map(|s| &s[page_lower..page_upper])
510-
{
511-
interface.send_data(U8(c)).await?
505+
let is_contiguous = page_lower == 0 && page_upper == SIZE::WIDTH as usize;
506+
507+
if is_contiguous {
508+
interface
509+
.send_data(U8(
510+
&buffer[starting_page * disp_width..][..num_pages * disp_width]
511+
))
512+
.await
513+
} else {
514+
for c in buffer
515+
.chunks(disp_width)
516+
.skip(starting_page)
517+
.take(num_pages)
518+
.map(|s| &s[page_lower..page_upper])
519+
{
520+
interface.send_data(U8(c)).await?;
521+
}
522+
Ok(())
512523
}
513-
Ok(())
514524
}
515525

516526
/// Release the contained interface.

0 commit comments

Comments
 (0)