@@ -36,7 +36,8 @@ struct MultiplotData {
3636 int mod;
3737 size_t first;
3838 size_t size;
39- const void * points;
39+ const void * Y;
40+ const void * X;
4041 MetricType type;
4142};
4243} // namespace framework
@@ -163,6 +164,15 @@ void displayDeviceMetrics(const char* label, ImVec2 canvasSize, std::string cons
163164 size_t rangeBegin, size_t rangeEnd, size_t bins, bool useHistos,
164165 std::vector<DeviceSpec> const & specs, std::vector<DeviceMetricsInfo> const & metricsInfos)
165166{
167+ static std::vector<ImColor> palette = {
168+ ImColor{ 218 , 124 , 48 },
169+ ImColor{ 62 , 150 , 81 },
170+ ImColor{ 204 , 37 , 41 },
171+ ImColor{ 83 , 81 , 84 },
172+ ImColor{ 107 , 76 , 154 },
173+ ImColor{ 146 , 36 , 40 },
174+ ImColor{ 148 , 139 , 61 }
175+ };
166176 std::vector<void const *> metricsToDisplay;
167177 std::vector<const char *> deviceNames;
168178 std::vector<MultiplotData> userData;
@@ -172,6 +182,8 @@ void displayDeviceMetrics(const char* label, ImVec2 canvasSize, std::string cons
172182 assert (specs.size () == metricsInfos.size ());
173183 float maxValue = std::numeric_limits<float >::lowest ();
174184 float minValue = 0 ;
185+ size_t maxDomain = std::numeric_limits<size_t >::lowest ();
186+ size_t minDomain = std::numeric_limits<size_t >::max ();
175187
176188 for (int mi = 0 ; mi < metricsInfos.size (); ++mi) {
177189 auto vi = DeviceMetricsHelper::metricIdxByName (selectedMetricName, metricsInfos[mi]);
@@ -180,24 +192,27 @@ void displayDeviceMetrics(const char* label, ImVec2 canvasSize, std::string cons
180192 }
181193 auto & metric = metricsInfos[mi].metrics [vi];
182194 deviceNames.push_back (specs[mi].name .c_str ());
183- colors.emplace_back ( 220 , 220 , 220 );
195+ colors.push_back (palette[mi % palette. size ()] );
184196 metricType = metric.type ;
185197 MultiplotData data;
186198 data.mod = metricsInfos[mi].timestamps [vi].size ();
187199 data.first = metric.pos - data.mod ;
200+ data.X = metricsInfos[mi].timestamps [vi].data ();
188201 minValue = std::min (minValue, metricsInfos[mi].min [vi]);
189202 maxValue = std::max (maxValue, metricsInfos[mi].max [vi]);
203+ minDomain = std::min (minDomain, metricsInfos[mi].minDomain [vi]);
204+ maxDomain = std::max (maxDomain, metricsInfos[mi].maxDomain [vi]);
190205 switch (metric.type ) {
191206 case MetricType::Int: {
192207 data.size = metricsInfos[mi].intMetrics [metric.storeIdx ].size ();
193- data.points = metricsInfos[mi].intMetrics [metric.storeIdx ].data ();
208+ data.Y = metricsInfos[mi].intMetrics [metric.storeIdx ].data ();
194209 data.type = MetricType::Int;
195210 metricType = MetricType::Int;
196211 metricSize = metricsInfos[mi].intMetrics [metric.storeIdx ].size ();
197212 } break ;
198213 case MetricType::Float: {
199214 data.size = metricsInfos[mi].floatMetrics [metric.storeIdx ].size ();
200- data.points = metricsInfos[mi].floatMetrics [metric.storeIdx ].data ();
215+ data.Y = metricsInfos[mi].floatMetrics [metric.storeIdx ].data ();
201216 data.type = MetricType::Float;
202217 metricType = MetricType::Float;
203218 metricSize = metricsInfos[mi].floatMetrics [metric.storeIdx ].size ();
@@ -207,41 +222,58 @@ void displayDeviceMetrics(const char* label, ImVec2 canvasSize, std::string cons
207222 }
208223 userData.emplace_back (data);
209224 }
225+
226+ maxDomain = std::max (minDomain + 1024 , maxDomain);
227+
210228 for (size_t ui = 0 ; ui < userData.size (); ++ui) {
211229 metricsToDisplay.push_back (&(userData[ui]));
212230 }
213- auto getter = [](const void * hData, int idx) -> float {
231+ auto getterY = [](const void * hData, int idx) -> float {
214232 auto histoData = reinterpret_cast <const MultiplotData*>(hData);
215233 size_t pos = (histoData->first + static_cast <size_t >(idx)) % histoData->mod ;
234+ // size_t pos = (static_cast<size_t>(idx)) % histoData->mod;
216235 assert (pos >= 0 && pos < 1024 );
217236 if (histoData->type == MetricType::Int) {
218- return static_cast <const int *>(histoData->points )[pos];
237+ return static_cast <const int *>(histoData->Y )[pos];
219238 }
220- return static_cast <const float *>(histoData->points )[pos];
239+ return static_cast <const float *>(histoData->Y )[pos];
240+ };
241+ auto getterX = [](const void * hData, int idx) -> size_t {
242+ auto histoData = reinterpret_cast <const MultiplotData*>(hData);
243+ size_t pos = (histoData->first + static_cast <size_t >(idx)) % histoData->mod ;
244+ // size_t pos = (static_cast<size_t>(idx)) % histoData->mod;
245+ assert (pos >= 0 && pos < 1024 );
246+ return static_cast <const size_t *>(histoData->X )[pos];
221247 };
222248 if (useHistos) {
223249 ImGui::PlotMultiHistograms (
224250 label,
225251 userData.size (),
226252 deviceNames.data (),
227253 colors.data (),
228- getter,
254+ getterY,
255+ getterX,
229256 metricsToDisplay.data (),
230257 metricSize,
231258 minValue,
232259 maxValue * 1 .2f ,
260+ minDomain,
261+ maxDomain,
233262 canvasSize);
234263 } else {
235264 ImGui::PlotMultiLines (
236265 label,
237266 userData.size (),
238267 deviceNames.data (),
239268 colors.data (),
240- getter,
269+ getterY,
270+ getterX,
241271 metricsToDisplay.data (),
242272 metricSize,
243273 minValue,
244274 maxValue * 1 .2f ,
275+ minDomain,
276+ maxDomain,
245277 canvasSize);
246278 }
247279}
@@ -396,7 +428,7 @@ void displayDeviceHistograms(gui::WorkspaceGUIState& state,
396428 ImGui::EndGroup ();
397429 if (!currentMetricName.empty ()) {
398430 if (currentStyle == 0 || currentStyle == 1 ) {
399- displayDeviceMetrics (" ## Metrics" , ImVec2 (ImGui::GetIO ().DisplaySize .x - 10 , state.bottomPaneSize - ImGui::GetItemRectSize ().y - 20 ), currentMetricName, minTime, maxTime, 1024 , currentStyle, devices, metricsInfos);
431+ displayDeviceMetrics (" Metrics" , ImVec2 (ImGui::GetIO ().DisplaySize .x - 10 , state.bottomPaneSize - ImGui::GetItemRectSize ().y - 20 ), currentMetricName, minTime, maxTime, 1024 , currentStyle, devices, metricsInfos);
400432 } else {
401433 ImGui::BeginChild (" ##ScrollingRegion" , ImVec2 (ImGui::GetIO ().DisplaySize .x + state.leftPaneSize + state.rightPaneSize - 10 , -ImGui::GetItemsLineHeightWithSpacing ()), false ,
402434 ImGuiWindowFlags_HorizontalScrollbar);
0 commit comments