mirror of
https://github.com/microsoft/terminal.git
synced 2025-12-11 13:56:33 -06:00
Fix a output marks performance regression (#19242)
An alternative approach for #18291. Improves perf by ~7%. (cherry picked from commit 6b19d218457697794faaf4794451ba5f8ebff252) Service-Card-Id: PVTI_lADOAF3p4s4AmhmQzgdm49Y Service-Version: 1.22
This commit is contained in:
parent
22af7736bb
commit
f259e20c53
@ -937,12 +937,12 @@ void ROW::_resizeChars(uint16_t colEndDirty, uint16_t chBegDirty, size_t chEndDi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
til::small_rle<TextAttribute, uint16_t, 1>& ROW::Attributes() noexcept
|
RowAttributes& ROW::Attributes() noexcept
|
||||||
{
|
{
|
||||||
return _attr;
|
return _attr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const til::small_rle<TextAttribute, uint16_t, 1>& ROW::Attributes() const noexcept
|
const RowAttributes& ROW::Attributes() const noexcept
|
||||||
{
|
{
|
||||||
return _attr;
|
return _attr;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,6 +14,11 @@
|
|||||||
class ROW;
|
class ROW;
|
||||||
class TextBuffer;
|
class TextBuffer;
|
||||||
|
|
||||||
|
// Because MarkKind::Output gets set only on the actually written text,
|
||||||
|
// most rows will end up having at least 2 runs: The start of the line
|
||||||
|
// with MarkKind::Output and the rest of the line with MarkKind::None.
|
||||||
|
using RowAttributes = til::small_rle<TextAttribute, uint16_t, 2>;
|
||||||
|
|
||||||
enum class DelimiterClass
|
enum class DelimiterClass
|
||||||
{
|
{
|
||||||
ControlChar,
|
ControlChar,
|
||||||
@ -148,8 +153,8 @@ public:
|
|||||||
void ReplaceText(RowWriteState& state);
|
void ReplaceText(RowWriteState& state);
|
||||||
void CopyTextFrom(RowCopyTextFromState& state);
|
void CopyTextFrom(RowCopyTextFromState& state);
|
||||||
|
|
||||||
til::small_rle<TextAttribute, uint16_t, 1>& Attributes() noexcept;
|
RowAttributes& Attributes() noexcept;
|
||||||
const til::small_rle<TextAttribute, uint16_t, 1>& Attributes() const noexcept;
|
const RowAttributes& Attributes() const noexcept;
|
||||||
TextAttribute GetAttrByColumn(til::CoordType column) const;
|
TextAttribute GetAttrByColumn(til::CoordType column) const;
|
||||||
std::vector<uint16_t> GetHyperlinks() const;
|
std::vector<uint16_t> GetHyperlinks() const;
|
||||||
ImageSlice* SetImageSlice(ImageSlice::Pointer imageSlice) noexcept;
|
ImageSlice* SetImageSlice(ImageSlice::Pointer imageSlice) noexcept;
|
||||||
@ -297,7 +302,7 @@ private:
|
|||||||
std::span<uint16_t> _charOffsets;
|
std::span<uint16_t> _charOffsets;
|
||||||
// _attr is a run-length-encoded vector of TextAttribute with a decompressed
|
// _attr is a run-length-encoded vector of TextAttribute with a decompressed
|
||||||
// length equal to _columnCount (= 1 TextAttribute per column).
|
// length equal to _columnCount (= 1 TextAttribute per column).
|
||||||
til::small_rle<TextAttribute, uint16_t, 1> _attr;
|
RowAttributes _attr;
|
||||||
// The width of the row in visual columns.
|
// The width of the row in visual columns.
|
||||||
uint16_t _columnCount = 0;
|
uint16_t _columnCount = 0;
|
||||||
// Stores double-width/height (DECSWL/DECDWL/DECDHL) attributes.
|
// Stores double-width/height (DECSWL/DECDWL/DECDHL) attributes.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user