Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca59bcbc authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo
Browse files

perf ui progress: Reimplement using slang

Just another step in stopping the use of libnewt in perf.

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-vkb9jh5kkzl5ep3puoatd6an@git.kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 727ab04e
Loading
Loading
Loading
Loading
+2 −10
Original line number Original line Diff line number Diff line
@@ -19,16 +19,8 @@ static inline int ui_helpline__show_help(const char *format __used, va_list ap _
	return 0;
	return 0;
}
}


static inline struct ui_progress *ui_progress__new(const char *title __used,
static inline void ui_progress__update(u64 curr __used, u64 total __used,
						   u64 total __used)
				       const char *title __used) {}
{
	return (struct ui_progress *)1;
}

static inline void ui_progress__update(struct ui_progress *self __used,
				       u64 curr __used) {}

static inline void ui_progress__delete(struct ui_progress *self __used) {}
#else
#else
extern char ui_helpline__last_msg[];
extern char ui_helpline__last_msg[];
int ui_helpline__show_help(const char *format, va_list ap);
int ui_helpline__show_help(const char *format, va_list ap);
+2 −6
Original line number Original line Diff line number Diff line
@@ -1012,7 +1012,6 @@ int __perf_session__process_events(struct perf_session *session,
{
{
	u64 head, page_offset, file_offset, file_pos, progress_next;
	u64 head, page_offset, file_offset, file_pos, progress_next;
	int err, mmap_prot, mmap_flags, map_idx = 0;
	int err, mmap_prot, mmap_flags, map_idx = 0;
	struct ui_progress *progress;
	size_t	page_size, mmap_size;
	size_t	page_size, mmap_size;
	char *buf, *mmaps[8];
	char *buf, *mmaps[8];
	union perf_event *event;
	union perf_event *event;
@@ -1030,9 +1029,6 @@ int __perf_session__process_events(struct perf_session *session,
		file_size = data_offset + data_size;
		file_size = data_offset + data_size;


	progress_next = file_size / 16;
	progress_next = file_size / 16;
	progress = ui_progress__new("Processing events...", file_size);
	if (progress == NULL)
		return -1;


	mmap_size = session->mmap_window;
	mmap_size = session->mmap_window;
	if (mmap_size > file_size)
	if (mmap_size > file_size)
@@ -1095,7 +1091,8 @@ int __perf_session__process_events(struct perf_session *session,


	if (file_pos >= progress_next) {
	if (file_pos >= progress_next) {
		progress_next += file_size / 16;
		progress_next += file_size / 16;
		ui_progress__update(progress, file_pos);
		ui_progress__update(file_pos, file_size,
				    "Processing events...");
	}
	}


	if (file_pos < file_size)
	if (file_pos < file_size)
@@ -1106,7 +1103,6 @@ int __perf_session__process_events(struct perf_session *session,
	session->ordered_samples.next_flush = ULLONG_MAX;
	session->ordered_samples.next_flush = ULLONG_MAX;
	flush_sample_queue(session, ops);
	flush_sample_queue(session, ops);
out_err:
out_err:
	ui_progress__delete(progress);
	perf_session__warn_about_errors(session, ops);
	perf_session__warn_about_errors(session, ops);
	perf_session_free_sample_buffers(session);
	perf_session_free_sample_buffers(session);
	return err;
	return err;
+16 −48
Original line number Original line Diff line number Diff line
#include <stdlib.h>
#include <newt.h>
#include "../cache.h"
#include "../cache.h"
#include "progress.h"
#include "progress.h"
#include "libslang.h"
#include "ui.h"
#include "browser.h"


struct ui_progress {
void ui_progress__update(u64 curr, u64 total, const char *title)
	newtComponent form, scale;
};

struct ui_progress *ui_progress__new(const char *title, u64 total)
{
	struct ui_progress *self = malloc(sizeof(*self));

	if (self != NULL) {
		int cols;

		if (use_browser <= 0)
			return self;
		newtGetScreenSize(&cols, NULL);
		cols -= 4;
		newtCenteredWindow(cols, 1, title);
		self->form  = newtForm(NULL, NULL, 0);
		if (self->form == NULL)
			goto out_free_self;
		self->scale = newtScale(0, 0, cols, total);
		if (self->scale == NULL)
			goto out_free_form;
		newtFormAddComponent(self->form, self->scale);
		newtRefresh();
	}

	return self;

out_free_form:
	newtFormDestroy(self->form);
out_free_self:
	free(self);
	return NULL;
}

void ui_progress__update(struct ui_progress *self, u64 curr)
{
{
	int bar, y;
	/*
	/*
	 * FIXME: We should have a per UI backend way of showing progress,
	 * FIXME: We should have a per UI backend way of showing progress,
	 * stdio will just show a percentage as NN%, etc.
	 * stdio will just show a percentage as NN%, etc.
	 */
	 */
	if (use_browser <= 0)
	if (use_browser <= 0)
		return;
		return;
	newtScaleSet(self->scale, curr);
	newtRefresh();
}


void ui_progress__delete(struct ui_progress *self)
	pthread_mutex_lock(&ui__lock);
{
	y = SLtt_Screen_Rows / 2 - 2;
	if (use_browser > 0) {
	SLsmg_set_color(0);
		newtFormDestroy(self->form);
	SLsmg_draw_box(y, 0, 3, SLtt_Screen_Cols);
		newtPopWindow();
	SLsmg_gotorc(y++, 1);
	}
	SLsmg_write_string((char *)title);
	free(self);
	SLsmg_set_color(HE_COLORSET_SELECTED);
	bar = ((SLtt_Screen_Cols - 2) * curr) / total;
	SLsmg_fill_region(y, 1, 1, bar, ' ');
	SLsmg_refresh();
	pthread_mutex_unlock(&ui__lock);
}
}
+2 −5
Original line number Original line Diff line number Diff line
#ifndef _PERF_UI_PROGRESS_H_
#ifndef _PERF_UI_PROGRESS_H_
#define _PERF_UI_PROGRESS_H_ 1
#define _PERF_UI_PROGRESS_H_ 1


struct ui_progress;
#include <../types.h>


struct ui_progress *ui_progress__new(const char *title, u64 total);
void ui_progress__update(u64 curr, u64 total, const char *title);
void ui_progress__delete(struct ui_progress *self);

void ui_progress__update(struct ui_progress *self, u64 curr);


#endif
#endif