diff options
-rw-r--r-- | tools/perf/util/newt.c | 36 | ||||
-rw-r--r-- | tools/perf/util/ui/browser.c | 57 | ||||
-rw-r--r-- | tools/perf/util/ui/browser.h | 6 |
3 files changed, 49 insertions, 50 deletions
diff --git a/tools/perf/util/newt.c b/tools/perf/util/newt.c index 266a9e06525b..9768be31f9c5 100644 --- a/tools/perf/util/newt.c +++ b/tools/perf/util/newt.c | |||
@@ -450,8 +450,8 @@ static int map_browser__search(struct map_browser *self) | |||
450 | if (sym != NULL) { | 450 | if (sym != NULL) { |
451 | u32 *idx = symbol__browser_index(sym); | 451 | u32 *idx = symbol__browser_index(sym); |
452 | 452 | ||
453 | self->b.first_visible_entry = &sym->rb_node; | 453 | self->b.top = &sym->rb_node; |
454 | self->b.index = self->b.first_visible_entry_idx = *idx; | 454 | self->b.index = self->b.top_idx = *idx; |
455 | } else | 455 | } else |
456 | ui_helpline__fpush("%s not found!", target); | 456 | ui_helpline__fpush("%s not found!", target); |
457 | 457 | ||
@@ -967,7 +967,7 @@ static int hist_browser__show_callchain_node_rb_tree(struct hist_browser *self, | |||
967 | } | 967 | } |
968 | 968 | ||
969 | SLsmg_set_color(color); | 969 | SLsmg_set_color(color); |
970 | SLsmg_gotorc(self->b.top + row, self->b.left); | 970 | SLsmg_gotorc(self->b.y + row, self->b.x); |
971 | slsmg_write_nstring(" ", offset + extra_offset); | 971 | slsmg_write_nstring(" ", offset + extra_offset); |
972 | slsmg_printf("%c ", folded_sign); | 972 | slsmg_printf("%c ", folded_sign); |
973 | slsmg_write_nstring(str, width); | 973 | slsmg_write_nstring(str, width); |
@@ -1030,7 +1030,7 @@ static int hist_browser__show_callchain_node(struct hist_browser *self, | |||
1030 | } | 1030 | } |
1031 | 1031 | ||
1032 | s = callchain_list__sym_name(chain, ipstr, sizeof(ipstr)); | 1032 | s = callchain_list__sym_name(chain, ipstr, sizeof(ipstr)); |
1033 | SLsmg_gotorc(self->b.top + row, self->b.left); | 1033 | SLsmg_gotorc(self->b.y + row, self->b.x); |
1034 | SLsmg_set_color(color); | 1034 | SLsmg_set_color(color); |
1035 | slsmg_write_nstring(" ", offset); | 1035 | slsmg_write_nstring(" ", offset); |
1036 | slsmg_printf("%c ", folded_sign); | 1036 | slsmg_printf("%c ", folded_sign); |
@@ -1110,7 +1110,7 @@ static int hist_browser__show_entry(struct hist_browser *self, | |||
1110 | } | 1110 | } |
1111 | 1111 | ||
1112 | SLsmg_set_color(color); | 1112 | SLsmg_set_color(color); |
1113 | SLsmg_gotorc(self->b.top + row, self->b.left); | 1113 | SLsmg_gotorc(self->b.y + row, self->b.x); |
1114 | if (symbol_conf.use_callchain) { | 1114 | if (symbol_conf.use_callchain) { |
1115 | slsmg_printf("%c ", folded_sign); | 1115 | slsmg_printf("%c ", folded_sign); |
1116 | width -= 2; | 1116 | width -= 2; |
@@ -1138,10 +1138,10 @@ static unsigned int hist_browser__refresh(struct ui_browser *self) | |||
1138 | struct rb_node *nd; | 1138 | struct rb_node *nd; |
1139 | struct hist_browser *hb = container_of(self, struct hist_browser, b); | 1139 | struct hist_browser *hb = container_of(self, struct hist_browser, b); |
1140 | 1140 | ||
1141 | if (self->first_visible_entry == NULL) | 1141 | if (self->top == NULL) |
1142 | self->first_visible_entry = rb_first(&hb->hists->entries); | 1142 | self->top = rb_first(&hb->hists->entries); |
1143 | 1143 | ||
1144 | for (nd = self->first_visible_entry; nd; nd = rb_next(nd)) { | 1144 | for (nd = self->top; nd; nd = rb_next(nd)) { |
1145 | struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node); | 1145 | struct hist_entry *h = rb_entry(nd, struct hist_entry, rb_node); |
1146 | 1146 | ||
1147 | if (h->filtered) | 1147 | if (h->filtered) |
@@ -1244,7 +1244,7 @@ static void ui_browser__hists_seek(struct ui_browser *self, | |||
1244 | nd = hists__filter_entries(rb_first(self->entries)); | 1244 | nd = hists__filter_entries(rb_first(self->entries)); |
1245 | break; | 1245 | break; |
1246 | case SEEK_CUR: | 1246 | case SEEK_CUR: |
1247 | nd = self->first_visible_entry; | 1247 | nd = self->top; |
1248 | goto do_offset; | 1248 | goto do_offset; |
1249 | case SEEK_END: | 1249 | case SEEK_END: |
1250 | nd = hists__filter_prev_entries(rb_last(self->entries)); | 1250 | nd = hists__filter_prev_entries(rb_last(self->entries)); |
@@ -1258,7 +1258,7 @@ static void ui_browser__hists_seek(struct ui_browser *self, | |||
1258 | * Moves not relative to the first visible entry invalidates its | 1258 | * Moves not relative to the first visible entry invalidates its |
1259 | * row_offset: | 1259 | * row_offset: |
1260 | */ | 1260 | */ |
1261 | h = rb_entry(self->first_visible_entry, struct hist_entry, rb_node); | 1261 | h = rb_entry(self->top, struct hist_entry, rb_node); |
1262 | h->row_offset = 0; | 1262 | h->row_offset = 0; |
1263 | 1263 | ||
1264 | /* | 1264 | /* |
@@ -1286,7 +1286,7 @@ do_offset: | |||
1286 | } else { | 1286 | } else { |
1287 | h->row_offset += offset; | 1287 | h->row_offset += offset; |
1288 | offset = 0; | 1288 | offset = 0; |
1289 | self->first_visible_entry = nd; | 1289 | self->top = nd; |
1290 | break; | 1290 | break; |
1291 | } | 1291 | } |
1292 | } | 1292 | } |
@@ -1294,7 +1294,7 @@ do_offset: | |||
1294 | if (nd == NULL) | 1294 | if (nd == NULL) |
1295 | break; | 1295 | break; |
1296 | --offset; | 1296 | --offset; |
1297 | self->first_visible_entry = nd; | 1297 | self->top = nd; |
1298 | } while (offset != 0); | 1298 | } while (offset != 0); |
1299 | } else if (offset < 0) { | 1299 | } else if (offset < 0) { |
1300 | while (1) { | 1300 | while (1) { |
@@ -1307,7 +1307,7 @@ do_offset: | |||
1307 | } else { | 1307 | } else { |
1308 | h->row_offset += offset; | 1308 | h->row_offset += offset; |
1309 | offset = 0; | 1309 | offset = 0; |
1310 | self->first_visible_entry = nd; | 1310 | self->top = nd; |
1311 | break; | 1311 | break; |
1312 | } | 1312 | } |
1313 | } else { | 1313 | } else { |
@@ -1317,7 +1317,7 @@ do_offset: | |||
1317 | } else { | 1317 | } else { |
1318 | h->row_offset = h->nr_rows + offset; | 1318 | h->row_offset = h->nr_rows + offset; |
1319 | offset = 0; | 1319 | offset = 0; |
1320 | self->first_visible_entry = nd; | 1320 | self->top = nd; |
1321 | break; | 1321 | break; |
1322 | } | 1322 | } |
1323 | } | 1323 | } |
@@ -1327,7 +1327,7 @@ do_offset: | |||
1327 | if (nd == NULL) | 1327 | if (nd == NULL) |
1328 | break; | 1328 | break; |
1329 | ++offset; | 1329 | ++offset; |
1330 | self->first_visible_entry = nd; | 1330 | self->top = nd; |
1331 | if (offset == 0) { | 1331 | if (offset == 0) { |
1332 | /* | 1332 | /* |
1333 | * Last unfiltered hist_entry, check if it is | 1333 | * Last unfiltered hist_entry, check if it is |
@@ -1342,7 +1342,7 @@ do_offset: | |||
1342 | first = false; | 1342 | first = false; |
1343 | } | 1343 | } |
1344 | } else { | 1344 | } else { |
1345 | self->first_visible_entry = nd; | 1345 | self->top = nd; |
1346 | h = rb_entry(nd, struct hist_entry, rb_node); | 1346 | h = rb_entry(nd, struct hist_entry, rb_node); |
1347 | h->row_offset = 0; | 1347 | h->row_offset = 0; |
1348 | } | 1348 | } |
@@ -1463,7 +1463,7 @@ static int hist_browser__run(struct hist_browser *self, const char *title, | |||
1463 | switch (es->u.key) { | 1463 | switch (es->u.key) { |
1464 | case 'd': { /* Debug */ | 1464 | case 'd': { /* Debug */ |
1465 | static int seq; | 1465 | static int seq; |
1466 | struct hist_entry *h = rb_entry(self->b.first_visible_entry, | 1466 | struct hist_entry *h = rb_entry(self->b.top, |
1467 | struct hist_entry, rb_node); | 1467 | struct hist_entry, rb_node); |
1468 | ui_helpline__pop(); | 1468 | ui_helpline__pop(); |
1469 | ui_helpline__fpush("%d: nr_ent=(%d,%d), height=%d, idx=%d, fve: idx=%d, row_off=%d, nrows=%d", | 1469 | ui_helpline__fpush("%d: nr_ent=(%d,%d), height=%d, idx=%d, fve: idx=%d, row_off=%d, nrows=%d", |
@@ -1471,7 +1471,7 @@ static int hist_browser__run(struct hist_browser *self, const char *title, | |||
1471 | self->hists->nr_entries, | 1471 | self->hists->nr_entries, |
1472 | self->b.height, | 1472 | self->b.height, |
1473 | self->b.index, | 1473 | self->b.index, |
1474 | self->b.first_visible_entry_idx, | 1474 | self->b.top_idx, |
1475 | h->row_offset, h->nr_rows); | 1475 | h->row_offset, h->nr_rows); |
1476 | } | 1476 | } |
1477 | continue; | 1477 | continue; |
diff --git a/tools/perf/util/ui/browser.c b/tools/perf/util/ui/browser.c index 0b2b9306312d..edbb7dd9eb2e 100644 --- a/tools/perf/util/ui/browser.c +++ b/tools/perf/util/ui/browser.c | |||
@@ -49,7 +49,7 @@ void ui_browser__list_head_seek(struct ui_browser *self, off_t offset, int whenc | |||
49 | pos = head->next; | 49 | pos = head->next; |
50 | break; | 50 | break; |
51 | case SEEK_CUR: | 51 | case SEEK_CUR: |
52 | pos = self->first_visible_entry; | 52 | pos = self->top; |
53 | break; | 53 | break; |
54 | case SEEK_END: | 54 | case SEEK_END: |
55 | pos = head->prev; | 55 | pos = head->prev; |
@@ -66,7 +66,7 @@ void ui_browser__list_head_seek(struct ui_browser *self, off_t offset, int whenc | |||
66 | pos = pos->prev; | 66 | pos = pos->prev; |
67 | } | 67 | } |
68 | 68 | ||
69 | self->first_visible_entry = pos; | 69 | self->top = pos; |
70 | } | 70 | } |
71 | 71 | ||
72 | void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence) | 72 | void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence) |
@@ -79,7 +79,7 @@ void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence) | |||
79 | nd = rb_first(root); | 79 | nd = rb_first(root); |
80 | break; | 80 | break; |
81 | case SEEK_CUR: | 81 | case SEEK_CUR: |
82 | nd = self->first_visible_entry; | 82 | nd = self->top; |
83 | break; | 83 | break; |
84 | case SEEK_END: | 84 | case SEEK_END: |
85 | nd = rb_last(root); | 85 | nd = rb_last(root); |
@@ -96,7 +96,7 @@ void ui_browser__rb_tree_seek(struct ui_browser *self, off_t offset, int whence) | |||
96 | nd = rb_prev(nd); | 96 | nd = rb_prev(nd); |
97 | } | 97 | } |
98 | 98 | ||
99 | self->first_visible_entry = nd; | 99 | self->top = nd; |
100 | } | 100 | } |
101 | 101 | ||
102 | unsigned int ui_browser__rb_tree_refresh(struct ui_browser *self) | 102 | unsigned int ui_browser__rb_tree_refresh(struct ui_browser *self) |
@@ -104,13 +104,13 @@ unsigned int ui_browser__rb_tree_refresh(struct ui_browser *self) | |||
104 | struct rb_node *nd; | 104 | struct rb_node *nd; |
105 | int row = 0; | 105 | int row = 0; |
106 | 106 | ||
107 | if (self->first_visible_entry == NULL) | 107 | if (self->top == NULL) |
108 | self->first_visible_entry = rb_first(self->entries); | 108 | self->top = rb_first(self->entries); |
109 | 109 | ||
110 | nd = self->first_visible_entry; | 110 | nd = self->top; |
111 | 111 | ||
112 | while (nd != NULL) { | 112 | while (nd != NULL) { |
113 | SLsmg_gotorc(self->top + row, self->left); | 113 | SLsmg_gotorc(self->y + row, self->x); |
114 | self->write(self, nd, row); | 114 | self->write(self, nd, row); |
115 | if (++row == self->height) | 115 | if (++row == self->height) |
116 | break; | 116 | break; |
@@ -122,7 +122,7 @@ unsigned int ui_browser__rb_tree_refresh(struct ui_browser *self) | |||
122 | 122 | ||
123 | bool ui_browser__is_current_entry(struct ui_browser *self, unsigned row) | 123 | bool ui_browser__is_current_entry(struct ui_browser *self, unsigned row) |
124 | { | 124 | { |
125 | return (self->first_visible_entry_idx + row) == self->index; | 125 | return self->top_idx + row == self->index; |
126 | } | 126 | } |
127 | 127 | ||
128 | void ui_browser__refresh_dimensions(struct ui_browser *self) | 128 | void ui_browser__refresh_dimensions(struct ui_browser *self) |
@@ -135,13 +135,13 @@ void ui_browser__refresh_dimensions(struct ui_browser *self) | |||
135 | self->height = rows - 5; | 135 | self->height = rows - 5; |
136 | if (self->height > self->nr_entries) | 136 | if (self->height > self->nr_entries) |
137 | self->height = self->nr_entries; | 137 | self->height = self->nr_entries; |
138 | self->top = (rows - self->height) / 2; | 138 | self->y = (rows - self->height) / 2; |
139 | self->left = (cols - self->width) / 2; | 139 | self->x = (cols - self->width) / 2; |
140 | } | 140 | } |
141 | 141 | ||
142 | void ui_browser__reset_index(struct ui_browser *self) | 142 | void ui_browser__reset_index(struct ui_browser *self) |
143 | { | 143 | { |
144 | self->index = self->first_visible_entry_idx = 0; | 144 | self->index = self->top_idx = 0; |
145 | self->seek(self, 0, SEEK_SET); | 145 | self->seek(self, 0, SEEK_SET); |
146 | } | 146 | } |
147 | 147 | ||
@@ -180,7 +180,7 @@ int ui_browser__refresh(struct ui_browser *self) | |||
180 | newtScrollbarSet(self->sb, self->index, self->nr_entries - 1); | 180 | newtScrollbarSet(self->sb, self->index, self->nr_entries - 1); |
181 | row = self->refresh(self); | 181 | row = self->refresh(self); |
182 | SLsmg_set_color(HE_COLORSET_NORMAL); | 182 | SLsmg_set_color(HE_COLORSET_NORMAL); |
183 | SLsmg_fill_region(self->top + row, self->left, | 183 | SLsmg_fill_region(self->y + row, self->x, |
184 | self->height - row, self->width, ' '); | 184 | self->height - row, self->width, ' '); |
185 | 185 | ||
186 | return 0; | 186 | return 0; |
@@ -205,8 +205,8 @@ int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es) | |||
205 | if (self->index == self->nr_entries - 1) | 205 | if (self->index == self->nr_entries - 1) |
206 | break; | 206 | break; |
207 | ++self->index; | 207 | ++self->index; |
208 | if (self->index == self->first_visible_entry_idx + self->height) { | 208 | if (self->index == self->top_idx + self->height) { |
209 | ++self->first_visible_entry_idx; | 209 | ++self->top_idx; |
210 | self->seek(self, +1, SEEK_CUR); | 210 | self->seek(self, +1, SEEK_CUR); |
211 | } | 211 | } |
212 | break; | 212 | break; |
@@ -214,34 +214,34 @@ int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es) | |||
214 | if (self->index == 0) | 214 | if (self->index == 0) |
215 | break; | 215 | break; |
216 | --self->index; | 216 | --self->index; |
217 | if (self->index < self->first_visible_entry_idx) { | 217 | if (self->index < self->top_idx) { |
218 | --self->first_visible_entry_idx; | 218 | --self->top_idx; |
219 | self->seek(self, -1, SEEK_CUR); | 219 | self->seek(self, -1, SEEK_CUR); |
220 | } | 220 | } |
221 | break; | 221 | break; |
222 | case NEWT_KEY_PGDN: | 222 | case NEWT_KEY_PGDN: |
223 | case ' ': | 223 | case ' ': |
224 | if (self->first_visible_entry_idx + self->height > self->nr_entries - 1) | 224 | if (self->top_idx + self->height > self->nr_entries - 1) |
225 | break; | 225 | break; |
226 | 226 | ||
227 | offset = self->height; | 227 | offset = self->height; |
228 | if (self->index + offset > self->nr_entries - 1) | 228 | if (self->index + offset > self->nr_entries - 1) |
229 | offset = self->nr_entries - 1 - self->index; | 229 | offset = self->nr_entries - 1 - self->index; |
230 | self->index += offset; | 230 | self->index += offset; |
231 | self->first_visible_entry_idx += offset; | 231 | self->top_idx += offset; |
232 | self->seek(self, +offset, SEEK_CUR); | 232 | self->seek(self, +offset, SEEK_CUR); |
233 | break; | 233 | break; |
234 | case NEWT_KEY_PGUP: | 234 | case NEWT_KEY_PGUP: |
235 | if (self->first_visible_entry_idx == 0) | 235 | if (self->top_idx == 0) |
236 | break; | 236 | break; |
237 | 237 | ||
238 | if (self->first_visible_entry_idx < self->height) | 238 | if (self->top_idx < self->height) |
239 | offset = self->first_visible_entry_idx; | 239 | offset = self->top_idx; |
240 | else | 240 | else |
241 | offset = self->height; | 241 | offset = self->height; |
242 | 242 | ||
243 | self->index -= offset; | 243 | self->index -= offset; |
244 | self->first_visible_entry_idx -= offset; | 244 | self->top_idx -= offset; |
245 | self->seek(self, -offset, SEEK_CUR); | 245 | self->seek(self, -offset, SEEK_CUR); |
246 | break; | 246 | break; |
247 | case NEWT_KEY_HOME: | 247 | case NEWT_KEY_HOME: |
@@ -253,7 +253,7 @@ int ui_browser__run(struct ui_browser *self, struct newtExitStruct *es) | |||
253 | offset = self->nr_entries - 1; | 253 | offset = self->nr_entries - 1; |
254 | 254 | ||
255 | self->index = self->nr_entries - 1; | 255 | self->index = self->nr_entries - 1; |
256 | self->first_visible_entry_idx = self->index - offset; | 256 | self->top_idx = self->index - offset; |
257 | self->seek(self, -offset, SEEK_END); | 257 | self->seek(self, -offset, SEEK_END); |
258 | break; | 258 | break; |
259 | default: | 259 | default: |
@@ -271,14 +271,13 @@ unsigned int ui_browser__list_head_refresh(struct ui_browser *self) | |||
271 | struct list_head *head = self->entries; | 271 | struct list_head *head = self->entries; |
272 | int row = 0; | 272 | int row = 0; |
273 | 273 | ||
274 | if (self->first_visible_entry == NULL || | 274 | if (self->top == NULL || self->top == self->entries) |
275 | self->first_visible_entry == self->entries) | 275 | self->top = head->next; |
276 | self->first_visible_entry = head->next; | ||
277 | 276 | ||
278 | pos = self->first_visible_entry; | 277 | pos = self->top; |
279 | 278 | ||
280 | list_for_each_from(pos, head) { | 279 | list_for_each_from(pos, head) { |
281 | SLsmg_gotorc(self->top + row, self->left); | 280 | SLsmg_gotorc(self->y + row, self->x); |
282 | self->write(self, pos, row); | 281 | self->write(self, pos, row); |
283 | if (++row == self->height) | 282 | if (++row == self->height) |
284 | break; | 283 | break; |
diff --git a/tools/perf/util/ui/browser.h b/tools/perf/util/ui/browser.h index bcc4391405bd..8eed24cf2854 100644 --- a/tools/perf/util/ui/browser.h +++ b/tools/perf/util/ui/browser.h | |||
@@ -13,9 +13,9 @@ | |||
13 | 13 | ||
14 | struct ui_browser { | 14 | struct ui_browser { |
15 | newtComponent form, sb; | 15 | newtComponent form, sb; |
16 | u64 index, first_visible_entry_idx; | 16 | u64 index, top_idx; |
17 | void *first_visible_entry, *entries; | 17 | void *top, *entries; |
18 | u16 top, left, width, height; | 18 | u16 y, x, width, height; |
19 | void *priv; | 19 | void *priv; |
20 | unsigned int (*refresh)(struct ui_browser *self); | 20 | unsigned int (*refresh)(struct ui_browser *self); |
21 | void (*write)(struct ui_browser *self, void *entry, int row); | 21 | void (*write)(struct ui_browser *self, void *entry, int row); |