9 #include "jdb_disasm.h"
10 #include "jdb_input.h"
11 #include "jdb_module.h"
12 #include "jdb_screen.h"
13 #include "jdb_symbol.h"
14 #include "jdb_regex.h"
16 #include "jdb_tbuf_output.h"
18 #include "kernel_console.h"
22 #include "static_init.h"
28 enum { Max_group_size = 10 };
29 typedef Tb_entry::Group_order Group_order;
36 Item() : e(0), y(0), order(Group_order::none()) {}
39 Entry_group() : _c(0) {}
41 Item const &operator [] (unsigned i) const { return _i[i]; }
42 Item &operator [] (unsigned i) { return _i[i]; }
43 unsigned size() const { return _c; }
44 bool full() const { return _c >= Max_group_size; }
45 unsigned push_back(Tb_entry const *e, Mword y, Group_order t)
57 Item _i[Max_group_size];
60 class Jdb_tbuf_show : public Jdb_module
63 Jdb_tbuf_show() FIASCO_INIT;
66 static char _search_str[40];
67 static char _filter_str[40];
68 static String_buf<512> _buffer_str;
69 static Mword _status_type;
73 static Mword _nr_pos[10];
74 static Mword y_offset;
78 Index_mode = 0, // number of event
79 Tsc_delta_mode = 1, // tsc ticks starting from last event
80 Tsc_ref_mode = 2, // tsc ticks starting from reference event
81 Tsc_start_mode = 3, // tsc ticks starting from 0
82 Kclock_ref_mode = 4, // kernel clock units (us) since reference event
83 Kclock_start_mode = 5, // kernel clock units (us) since start of system
84 Pmc1_delta_mode = 6, // ticks of ctr 1 starting from last event
85 Pmc2_delta_mode = 7, // ticks of ctr 2 starting from last event
86 Pmc1_ref_mode = 8, // ticks of ctr 1 starting from reference event
87 Pmc2_ref_mode = 9, // ticks of ctr 2 starting from reference event
108 char Jdb_tbuf_show::_search_str[40];
109 char Jdb_tbuf_show::_filter_str[40];
110 String_buf<512> Jdb_tbuf_show::_buffer_str;
111 Mword Jdb_tbuf_show::_status_type;
112 Mword Jdb_tbuf_show::_absy;
113 Mword Jdb_tbuf_show::_nr_cur;
114 Mword Jdb_tbuf_show::_nr_ref;
115 Mword Jdb_tbuf_show::_nr_pos[10] = { Nil, Nil, Nil, Nil, Nil,
116 Nil, Nil, Nil, Nil, Nil };
118 Mword Jdb_tbuf_show::y_offset = 0;
121 Jdb_tbuf_show::error(const char * const msg)
123 Jdb::printf_statline("tbuf", 0, "\033[31;1m=== %s! ===\033[m", msg);
124 _status_type = Status_error;
128 Jdb_tbuf_show::show_perf_event_unit_mask_entry(Mword nr, Mword idx,
129 Mword unit_mask, int exclusive)
134 Perf_cnt::get_unit_mask_entry(nr, idx, &value, &desc);
136 desc = "(no description?)";
137 printf(" %c %02lx %.59s\033[K",
138 exclusive ? unit_mask == value ? '+' : ' '
139 : unit_mask & value ? '+' : ' ',
144 Jdb_tbuf_show::show_perf_event(Mword nr)
146 const char *name, *desc;
148 Mword add_kcnt = Config::Jdb_accounting ? Kern_cnt_max : 0;
152 const char * const s = Kern_cnt::get_str(nr);
153 printf(" %-26.26s %.49s\033[K", s, "(kernel event counter)");
157 Perf_cnt::get_perf_event(nr - add_kcnt, &evntsel, &name, &desc);
161 desc = "(no description)";
163 printf("%02x %-26.26s %.49s\033[K", evntsel, name, desc);
167 Jdb_tbuf_show::select_perf_event_unit_mask(Mword nr, Mword unit_mask)
173 Mword cols = Jdb_screen::cols() - 1;
175 Mword default_value, nvalues, value;
176 Perf_cnt::Unit_mask_type type;
179 Perf_cnt::get_unit_mask(nr, &type, &default_value, &nvalues);
180 int exclusive = (type == Perf_cnt::Exclusive);
182 if (type == Perf_cnt::None)
185 if (type == Perf_cnt::Fixed || (nvalues < 1))
186 return default_value;
190 Perf_cnt::get_unit_mask_entry(nr, 0, &value, &desc);
197 Jdb::printf_statline("tbuf", "<Space>=set mask <CR>=done", "P?");
199 Jdb::cursor(Tbuf_start_line, 1);
201 show_perf_event(nr + (Config::Jdb_accounting ? Kern_cnt_max : 0));
202 printf("\033[m\033[K\n"
204 " \033[1;32mSelect Event Mask (%s):\033[m\033[K\n"
205 "\033[K\n", exclusive ? "exclusive" : "bitmap");
211 Jdb::cursor(Tbuf_start_line+4, 1);
212 for (i=0; i<lines; i++)
214 show_perf_event_unit_mask_entry(nr, i, unit_mask, exclusive);
217 for (; i<Jdb_screen::height()-Tbuf_start_line-5; i++)
220 for (bool redraw=false; !redraw; )
226 Jdb::cursor(addy+Tbuf_start_line+4, 1);
227 putstr(Jdb::esc_emph);
228 show_perf_event_unit_mask_entry(nr, absy+addy, unit_mask, exclusive);
230 Jdb::cursor(addy+Tbuf_start_line+4, 1);
231 c = Jdb_core::getchar();
232 show_perf_event_unit_mask_entry(nr, absy+addy, unit_mask, exclusive);
233 Perf_cnt::get_unit_mask_entry(nr, absy+addy, &value, &dummy);
235 if (Jdb::std_cursor_key(c, cols, lines, max_absy,
236 &absy, &addy, 0, &redraw))
255 if (Jdb::is_toplevel_cmd(c))
263 Jdb_tbuf_show::select_perf_event(Mword event)
267 Mword add_kcnt = Config::Jdb_accounting ? Kern_cnt_max : 0;
268 Mword nevents = Perf_cnt::get_max_perf_event() + add_kcnt;
269 Mword lines = (nevents < Jdb_screen::height()-6)
271 : Jdb_screen::height()-6;
272 Mword cols = Jdb_screen::cols() - 1;
273 Mword max_absy = nevents-lines;
276 // libperfctr not linked
282 Jdb::printf_statline("tbuf", "<CR>=select", "P?");
284 Jdb::cursor(Tbuf_start_line, 1);
285 printf("%sSelect Performance Counter\033[m\033[K\n\033[K", Jdb::esc_emph2);
287 if (event & 0x80000000)
291 Perf_cnt::split_event(event, &evntsel, &unit_mask);
292 addy = Perf_cnt::lookup_event(evntsel);
301 absy += (addy-lines+1);
309 Jdb::cursor(Tbuf_start_line+2, 1);
310 for (i=0; i<lines; i++)
312 show_perf_event(absy+i);
315 for (; i<Jdb_screen::height()-Tbuf_start_line-2; i++)
318 for (bool redraw=false; !redraw; )
322 Jdb::cursor(addy+Tbuf_start_line+2, 1);
323 putstr(Jdb::esc_emph);
324 show_perf_event(absy+addy);
326 Jdb::cursor(addy+Tbuf_start_line+2, 1);
327 int c = Jdb_core::getchar();
328 show_perf_event(absy+addy);
329 if (Jdb::std_cursor_key(c, cols, lines, max_absy,
330 &absy, &addy, 0, &redraw))
338 return absy | 0x80000000;
341 Perf_cnt::get_perf_event(absy, &evntsel, &dummy, &dummy);
342 unit_mask = select_perf_event_unit_mask(absy, unit_mask);
343 if (unit_mask != Nil)
345 Perf_cnt::combine_event(evntsel, unit_mask, &event);
352 if (Jdb::is_toplevel_cmd(c))
361 Jdb_tbuf_show::show_events(Mword n, Mword ref, Mword count, Unsigned8 mode,
362 Unsigned8 time_mode, int long_output)
365 Unsigned32 ref_kclock, ref_pmc1, ref_pmc2;
368 Jdb_tbuf::event(ref, &dummy, &ref_kclock, &ref_tsc, &ref_pmc1, &ref_pmc2);
370 for (i=0; i<count; i++)
376 Unsigned32 kclock, upmc1, upmc2;
378 Kconsole::console()->getchar_chance();
381 if (!Jdb_tbuf::event(n, &number, &kclock, &utsc, &upmc1, &upmc2))
387 Jdb_tbuf_output::print_entry(&_buffer_str, n);
389 if (!Jdb_tbuf::diff_tsc(n, &dtsc))
400 for (int i=0; i<10; i++)
401 if (number == _nr_pos[i])
409 String_buf<13> s_tsc_dc;
410 String_buf<15> s_tsc_ds;
411 String_buf<13> s_tsc_sc;
412 String_buf<15> s_tsc_ss;
413 Jdb::write_ll_dec(&s_tsc_dc, dtsc, false); s_tsc_dc.terminate();
414 Jdb::write_tsc_s (&s_tsc_ds, dtsc, false); s_tsc_ds.terminate();
415 Jdb::write_ll_dec(&s_tsc_sc, utsc, false); s_tsc_sc.terminate();
416 Jdb::write_tsc_s (&s_tsc_ss, utsc, false); s_tsc_ss.terminate();
418 printf("%-3s%10lu. %120.120s %13.13s (%14.14s) %13.13s (%14.14s) kclk=%u\n",
419 s, number, _buffer_str.begin()+y_offset, s_tsc_dc.begin(), s_tsc_ds.begin(),
420 s_tsc_sc.begin(), s_tsc_ss.begin(), kclock);
425 Jdb_tbuf_output::print_entry(&_buffer_str, n);
429 s.printf("%12lu", number);
432 if (!Jdb_tbuf::diff_tsc(n, &dtsc))
436 case 0: Jdb::write_ll_hex(&s, dtsc, false); break;
437 case 1: Jdb::write_tsc (&s, dtsc, false); break;
438 case 2: Jdb::write_ll_dec(&s, dtsc, false); break;
442 dtsc = (n == ref) ? 0 : utsc - ref_tsc;
445 case 0: Jdb::write_ll_hex(&s, dtsc, true); break;
446 case 1: Jdb::write_tsc (&s, dtsc, true); break;
447 case 2: Jdb::write_ll_dec(&s, dtsc, true); break;
454 case 0: Jdb::write_ll_hex(&s, dtsc, true); break;
455 case 1: Jdb::write_tsc (&s, dtsc, false); break;
456 case 2: Jdb::write_ll_dec(&s, dtsc, true); break;
459 case Kclock_ref_mode:
460 if (kclock == ref_kclock)
465 Jdb::write_ll_hex(&s, (Unsigned64)kclock-ref_kclock, true);
467 s.printf("%+12d", (int)kclock-(int)ref_kclock);
470 case Kclock_start_mode:
471 s.printf(time_mode != 1 ? "%012x" : "%12u", kclock);
473 case Pmc1_delta_mode:
474 case Pmc2_delta_mode:
475 if (!Jdb_tbuf::diff_pmc(n, (mode-Pmc1_delta_mode), &dpmc))
477 Jdb::write_ll_dec(&s, (Signed64)dpmc, false);
480 dpmc = (n == ref) ? 0 : upmc1 - ref_pmc1;
481 Jdb::write_ll_dec(&s, (Signed64)dpmc, true);
484 dpmc = (n == ref) ? 0 : upmc2 - ref_pmc2;
485 Jdb::write_ll_dec(&s, (Signed64)dpmc, true);
494 for (int i=0; i<10; i++)
495 if (number == _nr_pos[i])
501 printf("%s%-*.*s %12s\033[m%s",
502 c, (int)Jdb_screen::width()-13, (int)Jdb_screen::width()-13,
503 _buffer_str.begin() + y_offset, s.begin(), count != 1 ? "\n" : "");
509 // search in tracebuffer
511 Jdb_tbuf_show::search(Mword start, Mword entries, const char *str,
519 if (Jdb_regex::avail() && !Jdb_regex::start(str))
521 error("Error in regular expression");
525 for (Mword n=direction==1 ? start-1 : start+1; ; (direction==1) ? n-- : n++)
527 static String_buf<256> buffer;
530 // don't cycle through entries more than once
531 // (should not happen due to the following check)
535 if (!Jdb_tbuf::event_valid(n))
537 error(direction ? "Begin of tracebuffer reached"
538 : "End of tracebuffer reached");
542 if (!Jdb_tbuf::event_valid(n))
543 n = (direction==1) ? entries-1 : 0;
545 Jdb_tbuf_output::print_entry(&buffer, n);
551 Jdb::cursor(Jdb_screen::height(), 79);
552 putchar("|/-\\"[progress++]);
556 if (Jdb_regex::avail() && Jdb_regex::find(buffer.begin(), 0, 0))
561 else if (strstr(buffer.begin(), str))
569 Jdb::cursor(Jdb_screen::height(), 79);
577 Jdb_tbuf_show::find_group(Entry_group *g, Tb_entry const *e, bool older, unsigned lines,
580 typedef Entry_group::Group_order Group_order;
582 Tb_entry_formatter const *fmt = Tb_entry_formatter::get_fmt(e);
583 Mword idx = Jdb_tbuf::unfiltered_idx(e);
584 int dir = older ? 1 : -1;
585 while (idx > 0 && !g->full())
588 Tb_entry *e1 = Jdb_tbuf::unfiltered_lookup(idx);
593 Group_order t = fmt->is_pair(e, e1);
596 py = Jdb_tbuf::idx(e1);
597 if (py < _absy || py >= _absy + lines)
600 if (older && t.depth() >= depth)
602 if (!older && t.depth() <= depth)
605 g->push_back(e1, py, t);
607 if (older && t.is_first())
609 if (!older && t.is_last())
618 Tb_entry_formatter const *fmt2 = Tb_entry_formatter::get_fmt(e1);
619 if (fmt2 && fmt2->partner(e1) == e->number())
621 py = Jdb_tbuf::idx(e1);
622 if (py < _absy || py >= _absy + lines)
624 g->push_back(e1, py, older ? Group_order::first() : Group_order::last());
625 // HM: is one direct enry enough
632 Jdb_tbuf_show::show()
634 static Unsigned8 mode = Index_mode;
635 static Unsigned8 time_mode = 1;
636 static Unsigned8 direction = 0;
639 Jdb_tbuf_output::set_filter(_filter_str, &entries);
643 Mword refy; // idx of reference event
644 Mword posy[10]; // idx of mark{0..9}
645 Mword addy; // cursor position starting from top of screen
646 Mword lines = Jdb_screen::height()-4;
647 Mword cols = Jdb_screen::cols() - 1;
651 if (Jdb_tbuf::max_entries() < lines)
652 lines = Jdb_tbuf::max_entries();
658 Mword max_absy = entries > lines ? entries - lines : 0;
660 // Search reference element. If not found, use last entry.
661 if ((refy = Jdb_tbuf::search_to_idx(_nr_ref)) >= (Mword)-2)
667 // Search mark {0..9}. If not found, set Nil.
669 posy[n] = Jdb_tbuf::search_to_idx(_nr_pos[n]);
671 // Search current position. If beyond buffer, goto first entry.
672 if ((addy = Jdb_tbuf::search_to_idx(_nr_cur)))
681 Mword count, perf_event[2];
682 Mword perf_user[2] = { 0, 0 };
683 Mword perf_kern[2] = { 0, 0 };
684 Mword perf_edge[2] = { 0, 0 };
685 const char *perf_mode[2], *perf_name[2];
687 for (Mword i=0; i<2; i++)
688 if (Kern_cnt::mode (i, &perf_mode[i], &perf_name[i], &perf_event[i]) ||
689 Perf_cnt::mode (i, &perf_mode[i], &perf_name[i], &perf_event[i],
690 &perf_user[i], &perf_kern[i], &perf_edge[i])) {}
692 static const char * const mode_str[] =
693 { "index", "tsc diff", "tsc rel", "tsc start", "kclock rel",
694 "kclock", "pmc1 diff", "pmc2 diff", "pmc1 rel", "pmc2 rel" };
696 const char *perf_type = Perf_cnt::perf_type();
699 printf("%3lu%% of %-6lu Perf:%-4s 1=" L4_PTR_FMT
700 "(%s%s\033[m%s%s%s\033[m)\033[K",
701 Jdb_tbuf::unfiltered_entries()*100/Jdb_tbuf::max_entries(),
702 Jdb_tbuf::max_entries(),
703 perf_type, perf_event[0], Jdb::esc_emph, perf_mode[0],
704 perf_name[0] && *perf_name[0] ? ":" : "",
705 mode==Pmc1_delta_mode || mode==Pmc1_ref_mode ? Jdb::esc_emph : "",
710 "%24s 2=" L4_PTR_FMT "(%s%s\033[m%s%s%s\033[m)\033[K\n",
711 mode_str[(int)mode], "",
712 perf_event[1], Jdb::esc_emph, perf_mode[1],
713 perf_name[1] && *perf_name[1] ? ":" : "",
714 mode==Pmc2_delta_mode || mode==Pmc2_ref_mode ? Jdb::esc_emph : "",
719 printf("\033[31m%3lu%% filtered\033[m\n",
720 entries*100/Jdb_tbuf::max_entries());
722 for (Mword i=3; i<Tbuf_start_line; i++)
725 show_events(_absy, refy, lines, mode, time_mode, 0);
729 for (Mword i=Tbuf_start_line + lines; i<Jdb_screen::height(); i++)
732 _status_type = Status_redraw;
735 for (bool redraw=false; !redraw;)
738 Unsigned8 d = 0; // default search direction is forward
740 if (_status_type == Status_redraw)
742 Jdb::printf_statline("tbuf", "/?nN=search sj=mark c=clear r=ref "
743 "F=filter D=dump P=perf <CR>=select", "_");
744 _status_type = Status_ok;
746 else if (_status_type == Status_error)
747 _status_type = Status_redraw;
753 typedef Tb_entry::Group_order Group_order;
756 Tb_entry const *ce = Jdb_tbuf::lookup(_absy + addy);
760 Tb_entry_formatter const *fmt = Tb_entry_formatter::get_fmt(ce);
763 pt = fmt->has_partner(ce);
765 if (!pt.not_grouped())
768 find_group(&group, ce, true, lines, pt.depth());
770 find_group(&group, ce, false, lines, pt.depth());
773 for (unsigned i = 0; i < group.size(); ++i)
775 Entry_group::Item const &item = group[i];
776 Jdb::cursor(item.y - _absy + Tbuf_start_line, 3);
777 putstr(Jdb::esc_emph);
778 if (item.order.is_first())
780 else if (item.order.is_last())
782 else if (item.order.grouped())
789 Jdb::cursor(addy + Tbuf_start_line, 1);
790 putstr(Jdb::esc_emph);
791 show_events(_absy + addy, refy, 1, mode, time_mode, 0);
793 Jdb::cursor(addy + Tbuf_start_line, 1);
796 c=Jdb_core::getchar();
798 show_events(_absy + addy, refy, 1, mode, time_mode, 0);
799 for (unsigned i = 0; i < group.size(); ++i)
801 Entry_group::Item const &item = group[i];
802 Jdb::cursor(item.y - _absy + Tbuf_start_line, 1);
803 show_events(item.y, refy, 1, mode, time_mode, 0);
806 if (Jdb::std_cursor_key(c, cols, lines, max_absy,
807 &_absy, &addy, 0, &redraw))
821 if (y_offset<sizeof(_buffer_str)-82)
824 y_offset = sizeof(_buffer_str)-72;
828 case 'F': // filter view by regex
829 Jdb::printf_statline("tbuf", 0, "Filter(%s)=%s",
830 Jdb_regex::avail() ? "regex" : "instr",
832 _status_type = Status_redraw;
833 Jdb::cursor(Jdb_screen::height(), 21+strlen(_filter_str));
834 if (!Jdb_input::get_string(_filter_str, sizeof(_filter_str)))
836 if (!Jdb_tbuf_output::set_filter(_filter_str, &entries))
838 error("Error in regular expression");
844 case 'D': // dump to console
845 if (!Kconsole::console()->find_console(Console::GZIP))
847 Jdb::cursor(Jdb_screen::height(), 10);
850 if (Jdb_input::get_mword(&count, 7, 10))
854 Kconsole::console()->start_exclusive(Console::GZIP);
855 show_events(_absy, refy, count, mode, time_mode, 1);
856 Kconsole::console()->end_exclusive(Console::GZIP);
860 _status_type = Status_redraw;
862 case 'P': // set performance counter
865 int user, kern, edge, nr;
867 Jdb::printf_statline("tbuf", "1..2=select counter", "P");
868 Jdb::cursor(Jdb_screen::height(), 8);
871 nr = Jdb_core::getchar();
874 if (nr >= '1' && nr <= '2')
881 event = perf_event[nr];
882 user = perf_user[nr];
883 kern = perf_kern[nr];
884 edge = perf_edge[nr];
885 Jdb::printf_statline("tbuf", "d=duration e=edge u=user "
886 "k=kern +=both -=none ?=event",
887 "P%c", (char)'1'+nr);
889 Jdb::cursor(Jdb_screen::height(), 9);
890 switch(c=Jdb_core::getchar())
892 case '+': user = 1; kern = 1; break;
893 case '-': user = 0; kern = 0; event = 0; break;
894 case 'u': user = 1; kern = 0; break;
895 case 'k': user = 0; kern = 1; break;
896 case 'd': edge = 0; break;
897 case 'e': edge = 1; break;
899 case '_': if ((e = select_perf_event(event)) == Nil)
907 default: Jdb_input::get_mword(&event, 4, 16, c);
911 if (!Kern_cnt::setup_pmc(nr, event) &&
912 !Perf_cnt::setup_pmc(nr, event, user, kern, edge))
913 Tb_entry::set_rdcnt(nr, 0);
918 case KEY_RETURN: // disassemble eip of current entry
922 if (Jdb_tbuf_output::thread_ip(_absy+addy, &t, &eip))
924 if (Jdb_disasm::avail())
926 if (!Jdb_disasm::show(eip, t->space(), 1, 1))
930 { // hacky, we should get disasm working for arm too
931 // (at least without the disassembly itself)
932 printf("\n==========================\n"
934 "==========================\n", eip);
942 Jdb_tbuf_output::toggle_names();
945 case KEY_CURSOR_LEFT: // mode switch
946 if (mode == Index_mode)
947 mode = Pmc2_ref_mode;
952 case KEY_CURSOR_RIGHT: // mode switch
954 if (mode > Pmc2_ref_mode)
958 case ' ': // mode switch
959 if (mode != Index_mode)
961 time_mode = (time_mode+1) % 3;
965 case 'c': // clear tracebuffer
966 Jdb_tbuf::clear_tbuf();
974 case 's': // set mark
975 Jdb::printf_statline("tbuf", 0, "set mark [0-9] ");
976 _status_type = Status_redraw;
977 c = Jdb_core::getchar();
978 if (!entries || c < '0' || c > '9')
980 error("Invalid marker");
984 posy[n] = _absy + addy;
985 _nr_pos[n] = Jdb_tbuf::lookup(_absy+addy)->number();
988 case 'r': // set reference entry
992 _nr_ref = Jdb_tbuf::lookup(_absy+addy)->number();
995 case 'j': // jump to mark or reference element
996 Jdb::printf_statline("tbuf", 0, "jump to mark [0-9] or ref [r] ");
997 _status_type = Status_redraw;
998 c = Jdb_core::getchar();
999 if ((c < '0' || c > '9') && c != 'r')
1001 error("Invalid marker");
1004 n = (c == 'r') ? refy : posy[c-'0'];
1007 error("Mark unset");
1010 else if (n == (Mword)-2)
1012 error("Mark not visible within current filter");
1016 case '?': // search backward
1019 case '/': // search forward
1021 // search in tracebuffer events
1022 Jdb::printf_statline("tbuf", 0, "%s=%s",
1023 Jdb_regex::avail() ? "Regexp" : "Search",
1025 _status_type = Status_redraw;
1026 Jdb::cursor(Jdb_screen::height(), 14+strlen(_search_str));
1027 if (!Jdb_input::get_string(_search_str, sizeof(_search_str)) ||
1031 case 'n': // search next
1032 case 'N': // search next reverse
1033 n = search(_absy+addy, entries, _search_str,
1034 c == 'N' ? !direction : direction);
1039 if (n < _absy || n > _absy+lines-1)
1049 if (_absy > max_absy)
1062 Jdb::abort_command();
1065 if (Jdb::is_toplevel_cmd(c))
1072 _nr_cur = (e = Jdb_tbuf::lookup(_absy+addy)) ? e->number() : 0;
1076 Jdb_module::Action_code
1077 Jdb_tbuf_show::action(int cmd, void *&, char const *&, int &)
1086 Jdb_tbuf_output::set_filter(_filter_str, 0);
1087 show_events(0, 0, 1000000, 0, 0, 1);
1091 if (Kconsole::console()->find_console(Console::GZIP))
1093 Jdb_tbuf_output::set_filter(_filter_str, 0);
1094 Kconsole::console()->start_exclusive(Console::GZIP);
1095 show_events(0, 0, 1000000, 0, 0, 1);
1096 Kconsole::console()->end_exclusive(Console::GZIP);
1105 Jdb_module::Cmd const *
1106 Jdb_tbuf_show::cmds() const
1110 { 0, "T", "tbuf", "",
1111 "T{P{+|-|k|u|<event>}}\tenter tracebuffer, on/off/kernel/user perf",
1113 { 1, "", "tbufdumptext", "", 0 /* invisible */, 0 },
1114 { 2, "", "tbufdumpgzip", "", 0 /* invisible */, 0 },
1122 Jdb_tbuf_show::num_cmds() const
1128 Jdb_tbuf_show::Jdb_tbuf_show()
1129 : Jdb_module("MONITORING")
1132 static Jdb_tbuf_show jdb_tbuf_show INIT_PRIORITY(JDB_MODULE_INIT_PRIO);