aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-02-03 22:51:28 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-02-03 22:51:28 -0500
commit5f41599c1cdfd567d4147d21305c4162e836538b (patch)
tree0ff6d35b24aaa10b0221d5900c386880c096ca5e
parentb0a475dbb01e802600e23a0d0695f7ebafe7105d (diff)
kernelshark: Create and use trace_view_store_get_visible_row()
The gtk_tree_selection_get_selected_rows returns the row of the entire list, no the visible row. The current trace_view_store_get_row() returns the record of the row passed in compared to the visible row. But the row that is passed in is the absolute row, and this causes us to index incorrectly. This patch creates trace_view_store_get_visible_row() for use when the row passed in is the visible row, and changes trace_view_store_get_row() to return record based off of the absolute row. Reported-by: Darren Hart <dvhltc@us.ibm.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--kernel-shark.c2
-rw-r--r--trace-view-store.c32
-rw-r--r--trace-view-store.h2
3 files changed, 27 insertions, 9 deletions
diff --git a/kernel-shark.c b/kernel-shark.c
index 9820ac3..1caedf2 100644
--- a/kernel-shark.c
+++ b/kernel-shark.c
@@ -315,7 +315,7 @@ static void row_double_clicked(GtkTreeView *treeview,
315 row = atoi(spath); 315 row = atoi(spath);
316 g_free(spath); 316 g_free(spath);
317 317
318 rec = trace_view_store_get_row(TRACE_VIEW_STORE(model), row); 318 rec = trace_view_store_get_visible_row(TRACE_VIEW_STORE(model), row);
319 time = rec->timestamp; 319 time = rec->timestamp;
320 trace_graph_select_by_time(info->ginfo, time); 320 trace_graph_select_by_time(info->ginfo, time);
321} 321}
diff --git a/trace-view-store.c b/trace-view-store.c
index 13da4ea..9e36493 100644
--- a/trace-view-store.c
+++ b/trace-view-store.c
@@ -336,7 +336,7 @@ trace_view_store_get_iter (GtkTreeModel *tree_model,
336 336
337 n = indices[0]; /* the n-th top level row */ 337 n = indices[0]; /* the n-th top level row */
338 338
339 record = trace_view_store_get_row(trace_view_store, n); 339 record = trace_view_store_get_visible_row(trace_view_store, n);
340 if (!record) 340 if (!record)
341 return FALSE; 341 return FALSE;
342 342
@@ -1222,10 +1222,31 @@ gint trace_view_store_get_timestamp_page(TraceViewStore *store, guint64 ts)
1222 return rec->pos / store->rows_per_page + 1; 1222 return rec->pos / store->rows_per_page + 1;
1223} 1223}
1224 1224
1225static TraceViewRecord *get_row(TraceViewStore *store, gint row)
1226{
1227 TraceViewRecord *record;
1228
1229 g_return_val_if_fail(row >= store->start_row && row < store->visible_rows, NULL);
1230
1231 record = store->rows[row];
1232 g_assert(record != NULL);
1233 g_assert(record->pos == row);
1234 return record;
1235}
1236
1237
1225TraceViewRecord * 1238TraceViewRecord *
1226trace_view_store_get_row(TraceViewStore *store, gint row) 1239trace_view_store_get_row(TraceViewStore *store, gint row)
1227{ 1240{
1228 TraceViewRecord *record; 1241 g_return_val_if_fail(TRACE_VIEW_IS_LIST(store), NULL);
1242
1243 return get_row(store, row);
1244}
1245
1246
1247TraceViewRecord *
1248trace_view_store_get_visible_row(TraceViewStore *store, gint row)
1249{
1229 g_return_val_if_fail(TRACE_VIEW_IS_LIST(store), NULL); 1250 g_return_val_if_fail(TRACE_VIEW_IS_LIST(store), NULL);
1230 1251
1231 /* If we don't have any visible rows, return NULL */ 1252 /* If we don't have any visible rows, return NULL */
@@ -1234,12 +1255,7 @@ trace_view_store_get_row(TraceViewStore *store, gint row)
1234 1255
1235 row += store->start_row; 1256 row += store->start_row;
1236 1257
1237 g_return_val_if_fail(row >= store->start_row && row < store->visible_rows, NULL); 1258 return get_row(store, row);
1238
1239 record = store->rows[row];
1240 g_assert(record != NULL);
1241 g_assert(record->pos == row);
1242 return record;
1243} 1259}
1244 1260
1245gint get_next_pid(TraceViewStore *store, struct pevent *pevent, struct record *record) 1261gint get_next_pid(TraceViewStore *store, struct pevent *pevent, struct record *record)
diff --git a/trace-view-store.h b/trace-view-store.h
index 5a9a7a7..8f660ff 100644
--- a/trace-view-store.h
+++ b/trace-view-store.h
@@ -135,6 +135,8 @@ void trace_view_store_assign_filters(TraceViewStore *store,
135 135
136TraceViewRecord *trace_view_store_get_row(TraceViewStore *store, gint row); 136TraceViewRecord *trace_view_store_get_row(TraceViewStore *store, gint row);
137 137
138TraceViewRecord *trace_view_store_get_visible_row(TraceViewStore *store, gint row);
139
138gboolean trace_view_store_system_enabled(TraceViewStore *store, const gchar *system); 140gboolean trace_view_store_system_enabled(TraceViewStore *store, const gchar *system);
139 141
140gboolean trace_view_store_event_enabled(TraceViewStore *store, gint event_id); 142gboolean trace_view_store_event_enabled(TraceViewStore *store, gint event_id);