aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--trace-plot-task.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/trace-plot-task.c b/trace-plot-task.c
index ecbf873..c92adb9 100644
--- a/trace-plot-task.c
+++ b/trace-plot-task.c
@@ -377,7 +377,7 @@ task_plot_find_record(struct graph_info *ginfo, struct graph_plot *plot,
377 377
378static struct record * 378static struct record *
379find_previous_record(struct graph_info *ginfo, struct record *start_record, 379find_previous_record(struct graph_info *ginfo, struct record *start_record,
380 int pid, int cpu) 380 int pid, int cpu, unsigned long long time)
381{ 381{
382 struct record *last_record = start_record; 382 struct record *last_record = start_record;
383 struct record *record; 383 struct record *record;
@@ -399,6 +399,11 @@ find_previous_record(struct graph_info *ginfo, struct record *start_record,
399 399
400 if (last_record != start_record) 400 if (last_record != start_record)
401 free_record(last_record); 401 free_record(last_record);
402
403 if (record->ts < time) {
404 free_record(record);
405 return NULL;
406 }
402 last_record = record; 407 last_record = record;
403 } 408 }
404 409
@@ -414,6 +419,7 @@ get_display_record(struct graph_info *ginfo, int pid, unsigned long long time)
414 struct record *record; 419 struct record *record;
415 struct record **records; 420 struct record **records;
416 unsigned long long ts; 421 unsigned long long ts;
422 unsigned long long limit;
417 int next_cpu; 423 int next_cpu;
418 int cpu; 424 int cpu;
419 425
@@ -429,11 +435,15 @@ get_display_record(struct graph_info *ginfo, int pid, unsigned long long time)
429 free_record(record); 435 free_record(record);
430 } 436 }
431 437
438 /* Only search 5 pixels back */
439 limit = time - (5 / ginfo->resolution);
440
432 /* find a previous record */ 441 /* find a previous record */
433 records = malloc_or_die(sizeof(*records) * ginfo->cpus); 442 records = malloc_or_die(sizeof(*records) * ginfo->cpus);
434 for (cpu = 0; cpu < ginfo->cpus; cpu++) { 443 for (cpu = 0; cpu < ginfo->cpus; cpu++) {
435 record = tracecmd_read_data(ginfo->handle, cpu); 444 record = tracecmd_read_data(ginfo->handle, cpu);
436 records[cpu] = find_previous_record(ginfo, record, pid, cpu); 445 records[cpu] = find_previous_record(ginfo, record,
446 pid, cpu, limit);
437 free_record(record); 447 free_record(record);
438 } 448 }
439 449
@@ -459,7 +469,8 @@ get_display_record(struct graph_info *ginfo, int pid, unsigned long long time)
459 break; 469 break;
460 } 470 }
461 471
462 record = find_previous_record(ginfo, records[next_cpu], pid, next_cpu); 472 record = find_previous_record(ginfo, records[next_cpu],
473 pid, next_cpu, limit);
463 free_record(records[next_cpu]); 474 free_record(records[next_cpu]);
464 records[next_cpu] = record; 475 records[next_cpu] = record;
465 record = NULL; 476 record = NULL;