return 0;
 }
 
-static int sample_type_check(struct perf_session *session)
-{
-       if (!(session->sample_type & PERF_SAMPLE_RAW)) {
-               fprintf(stderr,
-                       "No trace sample to read. Did you call perf record "
-                       "without -R?");
-               return -1;
-       }
-
-       return 0;
-}
-
 static struct perf_event_ops event_ops = {
        .process_sample_event   = process_sample_event,
        .process_comm_event     = event__process_comm,
-       .sample_type_check      = sample_type_check,
+       .sample_type_check      = perf_session__has_traces,
 };
 
 static double fragmentation(unsigned long n_req, unsigned long n_alloc)
 
        return 0;
 }
 
-static int sample_type_check(struct perf_session *session __used)
-{
-       if (!(session->sample_type & PERF_SAMPLE_RAW)) {
-               fprintf(stderr,
-                       "No trace sample to read. Did you call perf record "
-                       "without -R?");
-               return -1;
-       }
-
-       return 0;
-}
-
 static struct perf_event_ops event_ops = {
        .process_sample_event   = process_sample_event,
        .process_comm_event     = event__process_comm,
        .process_lost_event     = process_lost_event,
-       .sample_type_check      = sample_type_check,
+       .sample_type_check      = perf_session__has_traces,
 };
 
 static int read_events(void)
 
        }
 }
 
-static int sample_type_check(struct perf_session *session)
-{
-       if (!(session->sample_type & PERF_SAMPLE_RAW)) {
-               fprintf(stderr, "No trace samples found in the file.\n"
-                               "Have you used 'perf timechart record' to record it?\n");
-               return -1;
-       }
-
-       return 0;
-}
-
 static struct perf_event_ops event_ops = {
        .process_comm_event     = process_comm_event,
        .process_fork_event     = process_fork_event,
        .process_exit_event     = process_exit_event,
        .process_sample_event   = queue_sample_event,
-       .sample_type_check      = sample_type_check,
+       .sample_type_check      = perf_session__has_traces,
 };
 
 static int __cmd_timechart(void)
 
        return 0;
 }
 
-static int sample_type_check(struct perf_session *session)
-{
-       if (!(session->sample_type & PERF_SAMPLE_RAW)) {
-               fprintf(stderr,
-                       "No trace sample to read. Did you call perf record "
-                       "without -R?");
-               return -1;
-       }
-
-       return 0;
-}
-
 static struct perf_event_ops event_ops = {
        .process_sample_event   = process_sample_event,
        .process_comm_event     = event__process_comm,
-       .sample_type_check      = sample_type_check,
+       .sample_type_check      = perf_session__has_traces,
 };
 
 static int __cmd_trace(struct perf_session *session)
 
 out_err:
        return err;
 }
+
+int perf_session__has_traces(struct perf_session *self)
+{
+       if (!(self->sample_type & PERF_SAMPLE_RAW)) {
+               pr_err("No trace sample to read. Did you call perf record "
+                      "without -R?");
+               return -1;
+       }
+
+       return 0;
+}
 
                                                struct ip_callchain *chain,
                                                struct symbol **parent);
 
+int perf_session__has_traces(struct perf_session *self);
+
 int perf_header__read_build_ids(int input, u64 offset, u64 file_size);
 
 #endif /* __PERF_SESSION_H */