aboutsummaryrefslogtreecommitdiffstats
path: root/trace-view-store.c
diff options
context:
space:
mode:
Diffstat (limited to 'trace-view-store.c')
-rw-r--r--trace-view-store.c75
1 files changed, 63 insertions, 12 deletions
diff --git a/trace-view-store.c b/trace-view-store.c
index 3ea7e3b..14d8b17 100644
--- a/trace-view-store.c
+++ b/trace-view-store.c
@@ -1249,7 +1249,17 @@ gint get_next_pid(TraceViewStore *store, struct pevent *pevent, struct record *r
1249 return val; 1249 return val;
1250} 1250}
1251 1251
1252void trace_view_store_filter_tasks(TraceViewStore *store, struct filter_task *filter) 1252static gboolean show_task(TraceViewStore *store, gint pid)
1253{
1254 return (!store->task_filter ||
1255 !filter_task_count(store->task_filter) ||
1256 filter_task_find_pid(store->task_filter, pid)) &&
1257 (!store->hide_tasks ||
1258 !filter_task_count(store->hide_tasks) ||
1259 !filter_task_find_pid(store->hide_tasks, pid));
1260}
1261
1262static void update_filter_tasks(TraceViewStore *store)
1253{ 1263{
1254 struct tracecmd_input *handle; 1264 struct tracecmd_input *handle;
1255 struct event_format *event; 1265 struct event_format *event;
@@ -1261,14 +1271,6 @@ void trace_view_store_filter_tasks(TraceViewStore *store, struct filter_task *fi
1261 gint cpu; 1271 gint cpu;
1262 gint i; 1272 gint i;
1263 1273
1264 g_return_if_fail (TRACE_VIEW_IS_LIST (store));
1265
1266 /* We may pass in the store->task_filter. Don't free it if we do */
1267 if (store->task_filter && store->task_filter != filter)
1268 filter_task_hash_free(store->task_filter);
1269
1270 store->task_filter = filter_task_hash_copy(filter);
1271
1272 handle = store->handle; 1274 handle = store->handle;
1273 pevent = tracecmd_get_pevent(store->handle); 1275 pevent = tracecmd_get_pevent(store->handle);
1274 1276
@@ -1305,7 +1307,7 @@ void trace_view_store_filter_tasks(TraceViewStore *store, struct filter_task *fi
1305 } 1307 }
1306 1308
1307 pid = pevent_data_pid(pevent, record); 1309 pid = pevent_data_pid(pevent, record);
1308 if (!filter || filter_task_find_pid(filter, pid)) 1310 if (show_task(store, pid))
1309 store->cpu_list[cpu][i].visible = 1; 1311 store->cpu_list[cpu][i].visible = 1;
1310 else { 1312 else {
1311 if (store->sched_switch_next_field && 1313 if (store->sched_switch_next_field &&
@@ -1313,7 +1315,7 @@ void trace_view_store_filter_tasks(TraceViewStore *store, struct filter_task *fi
1313 store->sched_switch_event->id) { 1315 store->sched_switch_event->id) {
1314 /* show sched switch to task */ 1316 /* show sched switch to task */
1315 pid = get_next_pid(store, pevent, record); 1317 pid = get_next_pid(store, pevent, record);
1316 if (filter_task_find_pid(filter, pid)) 1318 if (show_task(store, pid))
1317 store->cpu_list[cpu][i].visible = 1; 1319 store->cpu_list[cpu][i].visible = 1;
1318 else 1320 else
1319 store->cpu_list[cpu][i].visible = 0; 1321 store->cpu_list[cpu][i].visible = 0;
@@ -1331,11 +1333,60 @@ void trace_view_store_filter_tasks(TraceViewStore *store, struct filter_task *fi
1331 merge_sort_rows_ts(store); 1333 merge_sort_rows_ts(store);
1332} 1334}
1333 1335
1336void trace_view_store_filter_tasks(TraceViewStore *store, struct filter_task *filter)
1337{
1338 g_return_if_fail (TRACE_VIEW_IS_LIST (store));
1339
1340 /* We may pass in the store->task_filter. Don't free it if we do */
1341 if (store->task_filter && store->task_filter != filter)
1342 filter_task_hash_free(store->task_filter);
1343
1344 if (store->task_filter != filter)
1345 store->task_filter = filter_task_hash_copy(filter);
1346
1347 update_filter_tasks(store);
1348}
1349
1350void trace_view_store_hide_tasks(TraceViewStore *store, struct filter_task *filter)
1351{
1352 g_return_if_fail (TRACE_VIEW_IS_LIST (store));
1353
1354 /* We may pass in the store->task_filter. Don't free it if we do */
1355 if (store->hide_tasks && store->hide_tasks != filter)
1356 filter_task_hash_free(store->hide_tasks);
1357
1358 if (store->hide_tasks != filter)
1359 store->hide_tasks = filter_task_hash_copy(filter);
1360
1361 update_filter_tasks(store);
1362}
1363
1334void trace_view_store_update_filter(TraceViewStore *store) 1364void trace_view_store_update_filter(TraceViewStore *store)
1335{ 1365{
1336 g_return_if_fail (TRACE_VIEW_IS_LIST (store)); 1366 g_return_if_fail (TRACE_VIEW_IS_LIST (store));
1337 1367
1338 trace_view_store_filter_tasks(store, store->task_filter); 1368 update_filter_tasks(store);
1369}
1370
1371void trace_view_store_assign_filters(TraceViewStore *store,
1372 struct filter_task *task_filter,
1373 struct filter_task *hide_tasks)
1374{
1375 g_return_if_fail (TRACE_VIEW_IS_LIST (store));
1376
1377 /* We may pass in the store->task_filter. Don't free it if we do */
1378 if (store->task_filter && store->task_filter != task_filter)
1379 filter_task_hash_free(store->task_filter);
1380
1381 if (store->hide_tasks && store->hide_tasks != hide_tasks)
1382 filter_task_hash_free(store->hide_tasks);
1383
1384 if (store->hide_tasks != hide_tasks)
1385 store->hide_tasks = filter_task_hash_copy(hide_tasks);
1386
1387 if (store->task_filter != task_filter)
1388 store->task_filter = filter_task_hash_copy(task_filter);
1389
1339} 1390}
1340 1391
1341 1392