121 lines
5.5 KiB
Diff
121 lines
5.5 KiB
Diff
|
commit c2fa29f7f1bbde86f41417b198610253fff93667
|
||
|
Author: Rodrigo Arias <rodarima@gmail.com>
|
||
|
Date: Thu Mar 2 13:14:56 2023 +0100
|
||
|
|
||
|
Add the PCF option DONT_EXPAND_COLORS
|
||
|
|
||
|
Allows the user to specify the complete palette in the PCF, preventing
|
||
|
Paraver from expanding the colors.
|
||
|
|
||
|
diff --git a/api/semanticcolor.cpp b/api/semanticcolor.cpp
|
||
|
index 9f86960..22859eb 100644
|
||
|
--- a/api/semanticcolor.cpp
|
||
|
+++ b/api/semanticcolor.cpp
|
||
|
@@ -232,8 +232,9 @@ rgb CodeColor::getColor( PRV_UINT32 pos ) const
|
||
|
{
|
||
|
if( pos == 0 && ParaverConfig::getInstance()->getColorsTimelineUseZero() )
|
||
|
return ParaverConfig::getInstance()->getColorsTimelineColorZero();
|
||
|
- pos = pos % colors.size();
|
||
|
- return colors[ pos ];
|
||
|
+ // Skip the black at 0
|
||
|
+ pos = pos % (colors.size() - 1);
|
||
|
+ return colors[ pos + 1 ];
|
||
|
}
|
||
|
|
||
|
void CodeColor::setColor( PRV_UINT32 whichPos, rgb whichColor )
|
||
|
@@ -250,6 +251,12 @@ void CodeColor::setColor( PRV_UINT32 whichPos, rgb whichColor )
|
||
|
colors[ whichPos ] = whichColor;
|
||
|
}
|
||
|
|
||
|
+void CodeColor::cutAfter( PRV_UINT32 pos )
|
||
|
+{
|
||
|
+ if ( pos < colors.size() )
|
||
|
+ colors.erase( colors.begin() + pos, colors.end() );
|
||
|
+}
|
||
|
+
|
||
|
void CodeColor::setCustomColor( TSemanticValue whichValue, rgb color )
|
||
|
{
|
||
|
customPalette[ whichValue ] = color;
|
||
|
diff --git a/api/semanticcolor.h b/api/semanticcolor.h
|
||
|
index a079556..bddf3d8 100644
|
||
|
--- a/api/semanticcolor.h
|
||
|
+++ b/api/semanticcolor.h
|
||
|
@@ -98,6 +98,7 @@ class CodeColor: public SemanticColor
|
||
|
|
||
|
PRV_UINT32 getNumColors() const;
|
||
|
void setColor( PRV_UINT32 pos, rgb color );
|
||
|
+ void cutAfter( PRV_UINT32 pos );
|
||
|
void setCustomColor( TSemanticValue whichValue, rgb color );
|
||
|
bool existCustomColors() const;
|
||
|
const std::map<TSemanticValue, rgb>& getCustomPalette() const;
|
||
|
diff --git a/api/trace.cpp b/api/trace.cpp
|
||
|
index b0d2050..ee2ab69 100644
|
||
|
--- a/api/trace.cpp
|
||
|
+++ b/api/trace.cpp
|
||
|
@@ -461,12 +461,21 @@ void TraceProxy::parsePCF( const string& whichFile )
|
||
|
|
||
|
rgb tmpColor;
|
||
|
const std::map< uint32_t, PCFFileParser<>::rgb >& semanticColors = pcfParser.getSemanticColors();
|
||
|
+ uint32_t maxValue = 0;
|
||
|
+
|
||
|
for ( auto it : semanticColors )
|
||
|
{
|
||
|
std::tie( tmpColor.red, tmpColor.green, tmpColor.blue ) = it.second;
|
||
|
myCodeColor.setColor( it.first, tmpColor );
|
||
|
+ if (it.first > maxValue)
|
||
|
+ maxValue = it.first;
|
||
|
}
|
||
|
|
||
|
+ // Cut the palette after the highest defined value, so there are no
|
||
|
+ // extra expanded values
|
||
|
+ if ( !pcfParser.expandColors )
|
||
|
+ myCodeColor.cutAfter(maxValue);
|
||
|
+
|
||
|
myEventLabels = EventLabels( pcfParser );
|
||
|
myStateLabels = StateLabels( pcfParser );
|
||
|
|
||
|
diff --git a/utils/traceparser/pcffileparser.cpp b/utils/traceparser/pcffileparser.cpp
|
||
|
index 9245955..3a1aecb 100644
|
||
|
--- a/utils/traceparser/pcffileparser.cpp
|
||
|
+++ b/utils/traceparser/pcffileparser.cpp
|
||
|
@@ -286,6 +286,7 @@ constexpr char PCF_LABEL_SPEED[] = "SPEED";
|
||
|
constexpr char PCF_LABEL_FLAG_ICONS[] = "FLAG_ICONS";
|
||
|
constexpr char PCF_LABEL_NUM_OF_STATE_COLORS[] = "NUM_OF_STATE_COLORS";
|
||
|
constexpr char PCF_LABEL_YMAX_SCALE[] = "YMAX_SCALE";
|
||
|
+constexpr char PCF_LABEL_DONT_EXPAND_COLORS[] = "DONT_EXPAND_COLORS";
|
||
|
|
||
|
template< typename dummyParser = std::nullptr_t >
|
||
|
class DefaultOptionsParser : public PCFFileParser<>::SectionParser<>
|
||
|
@@ -293,12 +294,13 @@ class DefaultOptionsParser : public PCFFileParser<>::SectionParser<>
|
||
|
public:
|
||
|
DefaultOptionsParser( PCFFileParser<> *whichMainParser ) : PCFFileParser<>::SectionParser<>( whichMainParser )
|
||
|
{
|
||
|
- parameterSetter[ PCF_LABEL_LEVEL ] = [this]( std::string line ) { mainParser->level = line; };
|
||
|
- parameterSetter[ PCF_LABEL_UNITS ] = [this]( std::string line ) { mainParser->units = line; };
|
||
|
- parameterSetter[ PCF_LABEL_LOOK_BACK ] = [this]( std::string line ) { mainParser->lookBack = line; };
|
||
|
- parameterSetter[ PCF_LABEL_SPEED ] = [this]( std::string line ) { mainParser->speed = line; };
|
||
|
- parameterSetter[ PCF_LABEL_FLAG_ICONS ] = [this]( std::string line ) { mainParser->flagIcons = line; };
|
||
|
- parameterSetter[ PCF_LABEL_YMAX_SCALE ] = [this]( std::string line ) { mainParser->ymaxScale = line; };
|
||
|
+ parameterSetter[ PCF_LABEL_LEVEL ] = [this]( std::string line ) { mainParser->level = line; };
|
||
|
+ parameterSetter[ PCF_LABEL_UNITS ] = [this]( std::string line ) { mainParser->units = line; };
|
||
|
+ parameterSetter[ PCF_LABEL_LOOK_BACK ] = [this]( std::string line ) { mainParser->lookBack = line; };
|
||
|
+ parameterSetter[ PCF_LABEL_SPEED ] = [this]( std::string line ) { mainParser->speed = line; };
|
||
|
+ parameterSetter[ PCF_LABEL_FLAG_ICONS ] = [this]( std::string line ) { mainParser->flagIcons = line; };
|
||
|
+ parameterSetter[ PCF_LABEL_YMAX_SCALE ] = [this]( std::string line ) { mainParser->ymaxScale = line; };
|
||
|
+ parameterSetter[ PCF_LABEL_DONT_EXPAND_COLORS ] = [this]( std::string line ) { mainParser->expandColors = false; };
|
||
|
}
|
||
|
|
||
|
virtual ~DefaultOptionsParser() = default;
|
||
|
diff --git a/utils/traceparser/pcffileparser.h b/utils/traceparser/pcffileparser.h
|
||
|
index 5fe2634..c12ecc8 100644
|
||
|
--- a/utils/traceparser/pcffileparser.h
|
||
|
+++ b/utils/traceparser/pcffileparser.h
|
||
|
@@ -100,6 +100,7 @@ class PCFFileParser
|
||
|
void setEventLabel( TEventType eventType, const std::string& label );
|
||
|
void setEventValues( TEventType eventType, const std::map< TEventValue, std::string >& values );
|
||
|
void setEventValueLabel( TEventType eventType, TEventValue eventValue, const std::string& label );
|
||
|
+ bool expandColors = true;
|
||
|
|
||
|
private:
|
||
|
struct EventTypeData
|