Improve WriteCharsLegacy performance by increasing local buffer size (#10921)
Improve WriteCharsLegacy performance by increasing LocalBuffer size, allowing longer runs of characters to be submitted to the remaining parts of conhost. References #10563 -- vtebench tracking issue ## Validation Steps Performed * Ran `cat big.txt`, vtebench and termbench and noted ~5% performance improvements
This commit is contained in:
parent
f1dc649135
commit
d3f9859051
|
@ -28,8 +28,6 @@ using Microsoft::Console::VirtualTerminal::StateMachine;
|
||||||
// Used by WriteCharsLegacy.
|
// Used by WriteCharsLegacy.
|
||||||
#define IS_GLYPH_CHAR(wch) (((wch) >= L' ') && ((wch) != 0x007F))
|
#define IS_GLYPH_CHAR(wch) (((wch) >= L' ') && ((wch) != 0x007F))
|
||||||
|
|
||||||
constexpr unsigned int LOCAL_BUFFER_SIZE = 100;
|
|
||||||
|
|
||||||
// Routine Description:
|
// Routine Description:
|
||||||
// - This routine updates the cursor position. Its input is the non-special
|
// - This routine updates the cursor position. Its input is the non-special
|
||||||
// cased new location of the cursor. For example, if the cursor were being
|
// cased new location of the cursor. For example, if the cursor were being
|
||||||
|
@ -339,7 +337,6 @@ constexpr unsigned int LOCAL_BUFFER_SIZE = 100;
|
||||||
COORD CursorPosition = cursor.GetPosition();
|
COORD CursorPosition = cursor.GetPosition();
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
SHORT XPosition;
|
SHORT XPosition;
|
||||||
WCHAR LocalBuffer[LOCAL_BUFFER_SIZE];
|
|
||||||
size_t TempNumSpaces = 0;
|
size_t TempNumSpaces = 0;
|
||||||
const bool fUnprocessed = WI_IsFlagClear(screenInfo.OutputMode, ENABLE_PROCESSED_OUTPUT);
|
const bool fUnprocessed = WI_IsFlagClear(screenInfo.OutputMode, ENABLE_PROCESSED_OUTPUT);
|
||||||
const bool fWrapAtEOL = WI_IsFlagSet(screenInfo.OutputMode, ENABLE_WRAP_AT_EOL_OUTPUT);
|
const bool fWrapAtEOL = WI_IsFlagSet(screenInfo.OutputMode, ENABLE_WRAP_AT_EOL_OUTPUT);
|
||||||
|
@ -360,6 +357,9 @@ constexpr unsigned int LOCAL_BUFFER_SIZE = 100;
|
||||||
coordScreenBufferSize.X = textBuffer.GetLineWidth(CursorPosition.Y);
|
coordScreenBufferSize.X = textBuffer.GetLineWidth(CursorPosition.Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static constexpr unsigned int LOCAL_BUFFER_SIZE = 1024;
|
||||||
|
WCHAR LocalBuffer[LOCAL_BUFFER_SIZE];
|
||||||
|
|
||||||
while (*pcb < BufferSize)
|
while (*pcb < BufferSize)
|
||||||
{
|
{
|
||||||
// correct for delayed EOL
|
// correct for delayed EOL
|
||||||
|
|
Loading…
Reference in a new issue