mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Performance: Only measures the first fixed-width column row
This commit is contained in:
parent
a883c5ca41
commit
61e1401073
10 changed files with 49 additions and 17 deletions
|
@ -26,6 +26,9 @@
|
||||||
- Disable hooks in bash completion script. Hooks were previously able to
|
- Disable hooks in bash completion script. Hooks were previously able to
|
||||||
abort processing or output interfering data, breaking completion.
|
abort processing or output interfering data, breaking completion.
|
||||||
- Fix "task add due:tomorrow+3days" failing to work without spaces.
|
- Fix "task add due:tomorrow+3days" failing to work without spaces.
|
||||||
|
- Performance improvements:
|
||||||
|
+ Stops after measuring a fixed-width column format.
|
||||||
|
+ Reduced number of std::string copies.
|
||||||
|
|
||||||
------ current release ---------------------------
|
------ current release ---------------------------
|
||||||
|
|
||||||
|
|
|
@ -143,6 +143,11 @@ std::string ViewTask::render (std::vector <Task>& data, std::vector <int>& seque
|
||||||
|
|
||||||
if (min > global_min) global_min = min;
|
if (min > global_min) global_min = min;
|
||||||
if (ideal > global_ideal) global_ideal = ideal;
|
if (ideal > global_ideal) global_ideal = ideal;
|
||||||
|
|
||||||
|
// If a fixed-width column was just measured, there is no point repeating
|
||||||
|
// the measurement for all tasks.
|
||||||
|
if (_columns[i]->is_fixed_width ())
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (print_empty_columns || global_min != 0)
|
if (print_empty_columns || global_min != 0)
|
||||||
|
|
|
@ -132,6 +132,11 @@ std::string ViewText::render ()
|
||||||
|
|
||||||
if (min > global_min) global_min = min;
|
if (min > global_min) global_min = min;
|
||||||
if (ideal > global_ideal) global_ideal = ideal;
|
if (ideal > global_ideal) global_ideal = ideal;
|
||||||
|
|
||||||
|
// If a fixed-width column was just measured, there is no point repeating
|
||||||
|
// the measurement for all tasks.
|
||||||
|
if (_columns[i]->is_fixed_width ())
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
minimal.push_back (global_min);
|
minimal.push_back (global_min);
|
||||||
|
|
|
@ -83,8 +83,15 @@ void ColumnDepends::measure (Task& task, unsigned int& minimum, unsigned int& ma
|
||||||
std::vector <Task> blocking;
|
std::vector <Task> blocking;
|
||||||
dependencyGetBlocking (task, blocking);
|
dependencyGetBlocking (task, blocking);
|
||||||
|
|
||||||
if (_style == "indicator") minimum = maximum = utf8_width (context.config.get ("dependency.indicator"));
|
if (_style == "indicator")
|
||||||
else if (_style == "count") minimum = maximum = 2 + format ((int) blocking.size ()).length ();
|
{
|
||||||
|
minimum = maximum = utf8_width (context.config.get ("dependency.indicator"));
|
||||||
|
_fixed_width = true;
|
||||||
|
}
|
||||||
|
else if (_style == "count")
|
||||||
|
{
|
||||||
|
minimum = maximum = 2 + format ((int) blocking.size ()).length ();
|
||||||
|
}
|
||||||
else if (_style == "default" ||
|
else if (_style == "default" ||
|
||||||
_style == "list")
|
_style == "list")
|
||||||
{
|
{
|
||||||
|
|
|
@ -90,8 +90,8 @@ void ColumnRecur::measure (Task& task, unsigned int& minimum, unsigned int& maxi
|
||||||
}
|
}
|
||||||
else if (_style == "indicator")
|
else if (_style == "indicator")
|
||||||
{
|
{
|
||||||
if (task.has (_name))
|
minimum = maximum = utf8_width (context.config.get ("recurrence.indicator"));
|
||||||
minimum = maximum = utf8_width (context.config.get ("recurrence.indicator"));
|
_fixed_width = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw format (STRING_COLUMN_BAD_FORMAT, _name, _style);
|
throw format (STRING_COLUMN_BAD_FORMAT, _name, _style);
|
||||||
|
|
|
@ -76,8 +76,8 @@ void ColumnStart::measure (Task& task, unsigned int& minimum, unsigned int& maxi
|
||||||
{
|
{
|
||||||
if (_style == "active")
|
if (_style == "active")
|
||||||
{
|
{
|
||||||
if (! task.has ("end"))
|
minimum = maximum = utf8_width (context.config.get ("active.indicator"));
|
||||||
minimum = maximum = utf8_width (context.config.get ("active.indicator"));
|
_fixed_width = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
ColumnDate::measure (task, minimum, maximum);
|
ColumnDate::measure (task, minimum, maximum);
|
||||||
|
|
|
@ -88,8 +88,15 @@ void ColumnTags::measure (Task& task, unsigned int& minimum, unsigned int& maxim
|
||||||
|
|
||||||
if (task.has (_name))
|
if (task.has (_name))
|
||||||
{
|
{
|
||||||
if (_style == "indicator") minimum = maximum = utf8_width (context.config.get ("tag.indicator"));
|
if (_style == "indicator")
|
||||||
else if (_style == "count") minimum = maximum = 3;
|
{
|
||||||
|
minimum = maximum = utf8_width (context.config.get ("tag.indicator"));
|
||||||
|
_fixed_width = true;
|
||||||
|
}
|
||||||
|
else if (_style == "count")
|
||||||
|
{
|
||||||
|
minimum = maximum = 3;
|
||||||
|
}
|
||||||
else if (_style == "default" ||
|
else if (_style == "default" ||
|
||||||
_style == "list")
|
_style == "list")
|
||||||
{
|
{
|
||||||
|
|
|
@ -120,8 +120,8 @@ void ColumnUDA::measure (Task& task, unsigned int& minimum, unsigned int& maximu
|
||||||
}
|
}
|
||||||
else if (_style == "indicator")
|
else if (_style == "indicator")
|
||||||
{
|
{
|
||||||
if (task.has (_name))
|
minimum = maximum = utf8_width (context.config.get ("uda." + _name + ".indicator"));
|
||||||
minimum = maximum = utf8_width (context.config.get ("uda." + _name + ".indicator"));
|
_fixed_width = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
throw format (STRING_COLUMN_BAD_FORMAT, _name, _style);
|
throw format (STRING_COLUMN_BAD_FORMAT, _name, _style);
|
||||||
|
|
|
@ -208,19 +208,21 @@ Column::Column ()
|
||||||
, _report ("")
|
, _report ("")
|
||||||
, _modifiable (true)
|
, _modifiable (true)
|
||||||
, _uda (false)
|
, _uda (false)
|
||||||
|
, _fixed_width (false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
Column::Column (const Column& other)
|
Column::Column (const Column& other)
|
||||||
{
|
{
|
||||||
_name = other._name;
|
_name = other._name;
|
||||||
_type = other._type;
|
_type = other._type;
|
||||||
_style = other._style;
|
_style = other._style;
|
||||||
_label = other._label;
|
_label = other._label;
|
||||||
_label = other._report;
|
_label = other._report;
|
||||||
_modifiable = other._modifiable;
|
_modifiable = other._modifiable;
|
||||||
_uda = other._uda;
|
_uda = other._uda;
|
||||||
|
_fixed_width = other._fixed_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -235,6 +237,7 @@ Column& Column::operator= (const Column& other)
|
||||||
_report = other._report;
|
_report = other._report;
|
||||||
_modifiable = other._modifiable;
|
_modifiable = other._modifiable;
|
||||||
_uda = other._uda;
|
_uda = other._uda;
|
||||||
|
_fixed_width = other._fixed_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
|
|
|
@ -52,6 +52,7 @@ public:
|
||||||
const std::string& type () const { return _type; }
|
const std::string& type () const { return _type; }
|
||||||
bool modifiable () const { return _modifiable; }
|
bool modifiable () const { return _modifiable; }
|
||||||
bool is_uda () const { return _uda; }
|
bool is_uda () const { return _uda; }
|
||||||
|
bool is_fixed_width () const { return _fixed_width;}
|
||||||
std::vector <std::string> styles () const { return _styles; }
|
std::vector <std::string> styles () const { return _styles; }
|
||||||
std::vector <std::string> examples () const { return _examples; }
|
std::vector <std::string> examples () const { return _examples; }
|
||||||
|
|
||||||
|
@ -76,6 +77,7 @@ protected:
|
||||||
std::string _report;
|
std::string _report;
|
||||||
bool _modifiable;
|
bool _modifiable;
|
||||||
bool _uda;
|
bool _uda;
|
||||||
|
bool _fixed_width;
|
||||||
std::vector <std::string> _styles;
|
std::vector <std::string> _styles;
|
||||||
std::vector <std::string> _examples;
|
std::vector <std::string> _examples;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue