Skip to content

Perf: Convert only the required source region in DrawImage#407

Open
christianrondeau wants to merge 1 commit into
SixLabors:mainfrom
mediaclip:perf/drawimage-region-conversion
Open

Perf: Convert only the required source region in DrawImage#407
christianrondeau wants to merge 1 commit into
SixLabors:mainfrom
mediaclip:perf/drawimage-region-conversion

Conversation

@christianrondeau

Copy link
Copy Markdown

Prerequisites

  • I have written a descriptive pull-request title
  • I have verified that there are no overlapping pull-requests open
  • I have verified that I am following matches the existing coding patterns and practice as demonstrated in the repository. These follow strict Stylecop rules 👮.
  • I have provided test coverage for my change (where applicable)

Description

While testing for performance improvement opportunities, I noticed that using the Draw API with an Image onto an Image, ALL pixels of the source image were converted before drawing (https://github.com/SixLabors/ImageSharp.Drawing/blob/main/src/ImageSharp.Drawing/Processing/DrawingCanvas%7BTPixel%7D.cs#L665).

This PR crops the source first and converts the cropped region after.

Impact

Measured on a 22.9 MP image (5700×4014), drawing a 1/8-area region using a custom MemoryAllocator for measuring:

Before: 103MB, 24.4ms (4.3x less memory)
After: 24MB, 14.4 ms (1.7x faster)

NOTE: This also fixes a small leak, this clone was never disposed: https://github.com/SixLabors/ImageSharp.Drawing/blob/main/src/ImageSharp.Drawing/Processing/DrawingCanvas%7BTPixel%7D.cs#L665

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant