Write mark PCF types for thread PVT
This commit is contained in:
parent
ea79c90c89
commit
b4d445b378
@ -23,6 +23,7 @@ struct mark_label {
|
||||
|
||||
struct mark_type {
|
||||
long type;
|
||||
long prvtype;
|
||||
long index; /* From 0 to ntypes - 1 */
|
||||
enum chan_type ctype;
|
||||
struct mark_label *labels; /* Hash table of labels */
|
||||
@ -155,6 +156,7 @@ create_mark_type(struct ovni_mark_emu *m, long type, const char *chan_type, cons
|
||||
}
|
||||
|
||||
t->type = type;
|
||||
t->prvtype = type + PRV_OVNI_MARK;
|
||||
t->index = m->ntypes;
|
||||
|
||||
int len = snprintf(t->title, MAX_PCF_LABEL, "%s", title);
|
||||
@ -352,7 +354,7 @@ connect_thread_prv(struct emu *emu, struct thread *sth, struct prv *prv)
|
||||
struct chan *ch = &mth->channels[i];
|
||||
long row = sth->gindex;
|
||||
long flags = 0;
|
||||
long prvtype = type->type + PRV_OVNI_MARK;
|
||||
long prvtype = type->prvtype;
|
||||
if (prv_register(prv, row, prvtype, &emu->bay, ch, flags)) {
|
||||
err("prv_register failed");
|
||||
return -1;
|
||||
@ -362,6 +364,41 @@ connect_thread_prv(struct emu *emu, struct thread *sth, struct prv *prv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
create_type(struct pcf *pcf, struct mark_type *type)
|
||||
{
|
||||
struct pcf_type *pcftype = pcf_add_type(pcf, type->prvtype, type->title);
|
||||
if (pcftype == NULL) {
|
||||
err("pcf_add_type failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
for (struct mark_label *l = type->labels; l; l = l->hh.next) {
|
||||
if (pcf_add_value(pcftype, l->value, l->label) == NULL) {
|
||||
err("pcf_add_value failed");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
init_pcf(struct emu *emu, struct pcf *pcf)
|
||||
{
|
||||
struct ovni_emu *oemu = EXT(emu, 'O');
|
||||
struct ovni_mark_emu *m = &oemu->mark;
|
||||
|
||||
for (struct mark_type *type = m->types; type; type = type->hh.next) {
|
||||
if (create_type(pcf, type) != 0) {
|
||||
err("create_type failed");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
connect_thread(struct emu *emu)
|
||||
{
|
||||
@ -381,7 +418,13 @@ connect_thread(struct emu *emu)
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO: Init thread PCF */
|
||||
/* Init thread PCF */
|
||||
struct pcf *pcf = pvt_get_pcf(pvt);
|
||||
if (init_pcf(emu, pcf) != 0) {
|
||||
err("init_pcf failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -29,4 +29,4 @@ test_emu(dummy.c NAME "ovniver" DRIVER "ovniver.driver.sh")
|
||||
test_emu(dummy.c NAME "match-doc-events" DRIVER "match-doc-events.sh")
|
||||
test_emu(dummy.c NAME "match-doc-version" DRIVER "match-doc-version.sh")
|
||||
test_emu(libovni-attr.c)
|
||||
test_emu(libovni-mark.c)
|
||||
test_emu(libovni-mark.c MP)
|
||||
|
@ -7,32 +7,34 @@
|
||||
|
||||
enum {
|
||||
MARK_COLORS = 1,
|
||||
COL_RED = 1,
|
||||
COL_BLUE = 2,
|
||||
COL_GREEN = 3,
|
||||
COL_BLUE = 1,
|
||||
COL_GRAY = 2,
|
||||
COL_RED = 3,
|
||||
};
|
||||
|
||||
/* Check ovni_mark_* API. */
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
instr_start(0, 1);
|
||||
int rank = atoi(getenv("OVNI_RANK"));
|
||||
int nranks = atoi(getenv("OVNI_NRANKS"));
|
||||
instr_start(rank, nranks);
|
||||
|
||||
ovni_mark_type(MARK_COLORS, OVNI_MARK_STACK, "Colors");
|
||||
|
||||
if(!ovni_attr_has("ovni.mark.1.title"))
|
||||
die("missing mark title");
|
||||
|
||||
ovni_mark_label(MARK_COLORS, 1, "Blue");
|
||||
ovni_mark_label(MARK_COLORS, 2, "Gray");
|
||||
ovni_mark_label(MARK_COLORS, 3, "Red");
|
||||
ovni_mark_label(MARK_COLORS, COL_BLUE, "Blue");
|
||||
ovni_mark_label(MARK_COLORS, COL_GRAY, "Gray");
|
||||
ovni_mark_label(MARK_COLORS, COL_RED, "Red");
|
||||
|
||||
sleep_us(10); ovni_mark_push(MARK_COLORS, COL_RED);
|
||||
sleep_us(10); ovni_mark_push(MARK_COLORS, COL_BLUE);
|
||||
sleep_us(10); ovni_mark_push(MARK_COLORS, COL_GREEN);
|
||||
sleep_us(10); ovni_mark_pop(MARK_COLORS, COL_GREEN);
|
||||
sleep_us(10); ovni_mark_push(MARK_COLORS, COL_GRAY);
|
||||
sleep_us(10); ovni_mark_push(MARK_COLORS, COL_RED);
|
||||
sleep_us(50); ovni_mark_pop(MARK_COLORS, COL_RED);
|
||||
sleep_us(10); ovni_mark_pop(MARK_COLORS, COL_GRAY);
|
||||
sleep_us(10); ovni_mark_pop(MARK_COLORS, COL_BLUE);
|
||||
sleep_us(10); ovni_mark_pop(MARK_COLORS, COL_RED);
|
||||
|
||||
instr_end();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user