|
@@ -1252,7 +1252,7 @@ cl_idx_empty_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp,
|
|
|
}
|
|
|
|
|
|
static struct c2c_dimension dim_dcacheline = {
|
|
|
- .header = HEADER_LOW("Cacheline"),
|
|
|
+ .header = HEADER_SPAN("--- Cacheline ----", "Address", 1),
|
|
|
.name = "dcacheline",
|
|
|
.cmp = dcacheline_cmp,
|
|
|
.entry = dcacheline_entry,
|
|
@@ -1267,10 +1267,10 @@ static struct c2c_dimension dim_dcacheline_node = {
|
|
|
.width = 4,
|
|
|
};
|
|
|
|
|
|
-static struct c2c_header header_offset_tui = HEADER_LOW("Off");
|
|
|
+static struct c2c_header header_offset_tui = HEADER_SPAN("-----", "Off", 1);
|
|
|
|
|
|
static struct c2c_dimension dim_offset = {
|
|
|
- .header = HEADER_BOTH("Data address", "Offset"),
|
|
|
+ .header = HEADER_SPAN("--- Data address -", "Offset", 1),
|
|
|
.name = "offset",
|
|
|
.cmp = offset_cmp,
|
|
|
.entry = offset_entry,
|
|
@@ -2453,14 +2453,64 @@ static void perf_c2c_display(struct perf_session *session)
|
|
|
}
|
|
|
#endif /* HAVE_SLANG_SUPPORT */
|
|
|
|
|
|
-static void ui_quirks(void)
|
|
|
+static char *fill_line(const char *orig, int len)
|
|
|
{
|
|
|
+ int i, j, olen = strlen(orig);
|
|
|
+ char *buf;
|
|
|
+
|
|
|
+ buf = zalloc(len + 1);
|
|
|
+ if (!buf)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ j = len / 2 - olen / 2;
|
|
|
+
|
|
|
+ for (i = 0; i < j - 1; i++)
|
|
|
+ buf[i] = '-';
|
|
|
+
|
|
|
+ buf[i++] = ' ';
|
|
|
+
|
|
|
+ strcpy(buf + i, orig);
|
|
|
+
|
|
|
+ i += olen;
|
|
|
+
|
|
|
+ buf[i++] = ' ';
|
|
|
+
|
|
|
+ for (; i < len; i++)
|
|
|
+ buf[i] = '-';
|
|
|
+
|
|
|
+ return buf;
|
|
|
+}
|
|
|
+
|
|
|
+static int ui_quirks(void)
|
|
|
+{
|
|
|
+ const char *nodestr = "Data address";
|
|
|
+ char *buf;
|
|
|
+
|
|
|
if (!c2c.use_stdio) {
|
|
|
dim_offset.width = 5;
|
|
|
dim_offset.header = header_offset_tui;
|
|
|
+ nodestr = "CL";
|
|
|
}
|
|
|
|
|
|
dim_percent_hitm.header = percent_hitm_header[c2c.display];
|
|
|
+
|
|
|
+ /* Fix the zero line for dcacheline column. */
|
|
|
+ buf = fill_line("Cacheline", dim_dcacheline.width +
|
|
|
+ dim_dcacheline_node.width + 2);
|
|
|
+ if (!buf)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ dim_dcacheline.header.line[0].text = buf;
|
|
|
+
|
|
|
+ /* Fix the zero line for offset column. */
|
|
|
+ buf = fill_line(nodestr, dim_offset.width +
|
|
|
+ dim_offset_node.width + 2);
|
|
|
+ if (!buf)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ dim_offset.header.line[0].text = buf;
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
#define CALLCHAIN_DEFAULT_OPT "graph,0.5,caller,function,percent"
|
|
@@ -2760,7 +2810,10 @@ static int perf_c2c__report(int argc, const char **argv)
|
|
|
|
|
|
ui_progress__finish();
|
|
|
|
|
|
- ui_quirks();
|
|
|
+ if (ui_quirks()) {
|
|
|
+ pr_err("failed to setup UI\n");
|
|
|
+ goto out_mem2node;
|
|
|
+ }
|
|
|
|
|
|
perf_c2c_display(session);
|
|
|
|