lkml.org 
[lkml]   [2017]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCHv2 29/35] perf annotate browser: Change selection to struct annotation_line
    On Wed, Oct 11, 2017 at 05:01:52PM +0200, Jiri Olsa wrote:
    > Use struct annotation_line as a browser::selection.
    >

    v2 with updated changelog attached

    jirka


    ---
    Use struct annotation_line as a browser::selection.

    We want to be able to use the annotate_browser for all sorts
    of source data, so it needs to be able to work over the generic
    struct annotation_line.

    Link: http://lkml.kernel.org/n/tip-hq5alvt759wne4pd1doj2ix7@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/ui/browsers/annotate.c | 63 +++++++++++++++++++++------------------
    1 file changed, 34 insertions(+), 29 deletions(-)

    diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c
    index f6259d06ee61..17e8759e0ce2 100644
    --- a/tools/perf/ui/browsers/annotate.c
    +++ b/tools/perf/ui/browsers/annotate.c
    @@ -46,26 +46,26 @@ static struct annotate_browser_opt {
    struct arch;

    struct annotate_browser {
    - struct ui_browser b;
    - struct rb_root entries;
    - struct rb_node *curr_hot;
    - struct disasm_line *selection;
    - struct disasm_line **offsets;
    - struct arch *arch;
    - int nr_events;
    - u64 start;
    - int nr_asm_entries;
    - int nr_entries;
    - int max_jump_sources;
    - int nr_jumps;
    - bool searching_backwards;
    - bool have_cycles;
    - u8 addr_width;
    - u8 jumps_width;
    - u8 target_width;
    - u8 min_addr_width;
    - u8 max_addr_width;
    - char search_bf[128];
    + struct ui_browser b;
    + struct rb_root entries;
    + struct rb_node *curr_hot;
    + struct annotation_line *selection;
    + struct disasm_line **offsets;
    + struct arch *arch;
    + int nr_events;
    + u64 start;
    + int nr_asm_entries;
    + int nr_entries;
    + int max_jump_sources;
    + int nr_jumps;
    + bool searching_backwards;
    + bool have_cycles;
    + u8 addr_width;
    + u8 jumps_width;
    + u8 target_width;
    + u8 min_addr_width;
    + u8 max_addr_width;
    + char search_bf[128];
    };

    static inline struct browser_line *browser_line(struct disasm_line *dl)
    @@ -264,7 +264,7 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
    }

    if (current_entry)
    - ab->selection = dl;
    + ab->selection = &dl->al;
    }

    static bool disasm_line__is_valid_jump(struct disasm_line *dl, struct symbol *sym)
    @@ -300,7 +300,8 @@ static bool is_fused(struct annotate_browser *ab, struct disasm_line *cursor)
    static void annotate_browser__draw_current_jump(struct ui_browser *browser)
    {
    struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
    - struct disasm_line *cursor = ab->selection, *target;
    + struct disasm_line *cursor = disasm_line(ab->selection);
    + struct disasm_line *target;
    struct browser_line *btarget, *bcursor;
    unsigned int from, to;
    struct map_symbol *ms = ab->b.priv;
    @@ -522,7 +523,7 @@ static bool annotate_browser__callq(struct annotate_browser *browser,
    struct hist_browser_timer *hbt)
    {
    struct map_symbol *ms = browser->b.priv;
    - struct disasm_line *dl = browser->selection;
    + struct disasm_line *dl = disasm_line(browser->selection);
    struct annotation *notes;
    struct addr_map_symbol target = {
    .map = ms->map,
    @@ -580,7 +581,7 @@ struct disasm_line *annotate_browser__find_offset(struct annotate_browser *brows

    static bool annotate_browser__jump(struct annotate_browser *browser)
    {
    - struct disasm_line *dl = browser->selection;
    + struct disasm_line *dl = disasm_line(browser->selection);
    u64 offset;
    s64 idx;

    @@ -606,7 +607,7 @@ struct disasm_line *annotate_browser__find_string(struct annotate_browser *brows
    struct map_symbol *ms = browser->b.priv;
    struct symbol *sym = ms->sym;
    struct annotation *notes = symbol__annotation(sym);
    - struct disasm_line *pos = browser->selection;
    + struct disasm_line *pos = disasm_line(browser->selection);

    *idx = browser->b.index;
    list_for_each_entry_continue(pos, &notes->src->source, al.node) {
    @@ -645,7 +646,7 @@ struct disasm_line *annotate_browser__find_string_reverse(struct annotate_browse
    struct map_symbol *ms = browser->b.priv;
    struct symbol *sym = ms->sym;
    struct annotation *notes = symbol__annotation(sym);
    - struct disasm_line *pos = browser->selection;
    + struct disasm_line *pos = disasm_line(browser->selection);

    *idx = browser->b.index;
    list_for_each_entry_continue_reverse(pos, &notes->src->source, al.node) {
    @@ -878,13 +879,16 @@ static int annotate_browser__run(struct annotate_browser *browser,
    continue;
    case K_ENTER:
    case K_RIGHT:
    + {
    + struct disasm_line *dl = disasm_line(browser->selection);
    +
    if (browser->selection == NULL)
    ui_helpline__puts("Huh? No selection. Report to linux-kernel@vger.kernel.org");
    - else if (browser->selection->al.offset == -1)
    + else if (browser->selection->offset == -1)
    ui_helpline__puts("Actions are only available for assembly lines.");
    - else if (!browser->selection->ins.ops)
    + else if (!dl->ins.ops)
    goto show_sup_ins;
    - else if (ins__is_ret(&browser->selection->ins))
    + else if (ins__is_ret(&dl->ins))
    goto out;
    else if (!(annotate_browser__jump(browser) ||
    annotate_browser__callq(browser, evsel, hbt))) {
    @@ -892,6 +896,7 @@ static int annotate_browser__run(struct annotate_browser *browser,
    ui_helpline__puts("Actions are only available for function call/return & jump/branch instructions.");
    }
    continue;
    + }
    case 't':
    if (annotate_browser__opts.show_total_period) {
    annotate_browser__opts.show_total_period = false;
    --
    2.13.6
    \
     
     \ /
      Last update: 2017-11-06 11:56    [W:4.106 / U:0.128 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site