int QmcContext::lookupDesc(pmID pmid, QmcDesc **descriptor) { int sts; QmcDesc *descPtr; if ((sts = pmUseContext(my.context)) < 0) return sts; if (my.descCache.contains(pmid) == false) { descPtr = new QmcDesc(pmid); if (descPtr->status() < 0) { sts = descPtr->status(); delete descPtr; return sts; } my.descCache.insert(pmid, descPtr); if (pmDebug & DBG_TRACE_PMC) { QTextStream cerr(stderr); cerr << "QmcContext::lookupDesc: Add descriptor for " << pmIDStr(descPtr->id()) << endl; } } else { descPtr = my.descCache.value(pmid); if (pmDebug & DBG_TRACE_PMC) { QTextStream cerr(stderr); cerr << "QmcContext::lookupDesc: Reusing descriptor " << pmIDStr(descPtr->id()) << endl; } } *descriptor = descPtr; return 0; }
int QmcEventRecord::setParameter(int index, pmID pmid, QmcContext *context, pmValueSet const *vsp) { QString *name; QmcDesc *desc; QmcIndom *indom; int sts, type; if (vsp->numval <= 0) // no value or an error return vsp->numval; if ((sts = context->lookup(pmid, &name, &desc, &indom)) < 0) return sts; QmcEventParameter ¶meter = my.parameters[index]; parameter.setPMID(pmid); parameter.setNamePtr(name); parameter.setDescPtr(desc); parameter.setIndomPtr(indom); parameter.setValueCount(vsp->numval); type = desc->desc().type; for (int i = 0; i < vsp->numval; i++) { pmAtomValue result; const pmValue *vp = &vsp->vlist[i]; QmcMetricValue *value = parameter.valuePtr(i); sts = PM_ERR_TYPE; // no nesting events if (QmcMetric::real(type) == true) { if ((sts = pmExtractValue(vsp->valfmt, vp, type, &result, PM_TYPE_DOUBLE)) >= 0) value->setCurrentValue(result.d); } else if (QmcMetric::aggregate(type) == true) { char buffer[32]; QmcMetric::aggregateAsString(vp, buffer, sizeof(buffer)); value->setStringValue(buffer); } else if (QmcMetric::event(type) == false) { if ((sts = pmExtractValue(vsp->valfmt, vp, type, &result, PM_TYPE_STRING)) >= 0) { value->setStringValue(result.cp); free(result.cp); } } value->setInstance(vp->inst); if (sts < 0) value->setCurrentError(sts); } return 0; }
void Launch::postColor(const QmcDesc &desc, const char *instance, QString &str) { const pmDesc d = desc.desc(); if (_version == PM_LAUNCH_VERSION2) { str.setNum(d.type).append(' '); str.setNum(d.sem).append(' '); str.setNum(d.units.scaleSpace).append(' '); str.setNum(d.units.scaleTime).append(' '); str.setNum(d.units.scaleCount).append(' '); } str.setNum(d.units.dimSpace).append(' '); str.setNum(d.units.dimTime).append(' '); str.setNum(d.units.dimCount).append(' '); str.setNum((int)(d.indom)).append(" ["); if (instance != NULL) str.append(instance); str.append("]\n"); }
int main(int argc, char* argv[]) { int fail = 0, sts = 0; int c; char buf[MAXHOSTNAMELEN]; QString source; pmSetProgname(argv[0]); while ((c = getopt(argc, argv, "D:?")) != EOF) { switch (c) { case 'D': sts = pmSetDebug(optarg); if (sts < 0) { pmprintf("%s: unrecognized debug options specification (%s)\n", pmGetProgname(), optarg); fail = 1; } break; case '?': default: sts = 1; break; } } if (fail) { pmprintf("Usage: %s\n", pmGetProgname()); pmflush(); exit(1); } (void)gethostname(buf, MAXHOSTNAMELEN); buf[MAXHOSTNAMELEN-1] = '\0'; fprintf(stderr, "*** Simple connection ***\n"); source = QString("oview-short"); QmcSource *src1 = QmcSource::getSource(PM_CONTEXT_ARCHIVE, source, false); if (src1->status() < 0) { pmprintf("%s: Error: Unable to create context to \"%s\": %s\n", pmGetProgname(), (const char *)source.toLatin1(), pmErrStr(src1->status())); pmflush(); fail = 1; } QmcContext context1(src1); if (context1.handle() < 0) { pmflush(); fail = 1; } context1.dump(cout); pmID pmid; uint32_t indomIndex; fprintf(stderr, "\n*** Cacheing of descriptors and indoms ***\n"); QmcDesc *desc; QmcIndom *indom = NULL; sts = context1.lookupInDom("hinv.ncpu", indomIndex); if (sts < 0) { pmprintf("%s: Error: hinv.ncpu: %s\n", pmGetProgname(), pmErrStr(sts)); pmflush(); fail = 1; } else { sts = context1.lookupPMID("hinv.ncpu", pmid); if (sts < 0) { pmprintf("%s: Error: hinv.ncpu PMID: %s\n", pmGetProgname(), pmErrStr(sts)); pmflush(); fail = 1; } desc = &context1.desc(pmid); if (desc->status() < 0) { pmprintf("%s: Error: hinv.ncpu descriptor: %s\n", pmGetProgname(), pmErrStr(desc->status())); pmflush(); fail = 1; } else if (indomIndex < UINT_MAX) { pmprintf("%s: Error: hinv.ncpu indom is not NULL\n", pmGetProgname()); pmflush(); fail = 1; } } sts = context1.lookupInDom("hinv.cputype", indomIndex); if (sts < 0) { pmprintf("%s: Error: hinv.cputype: %s\n", pmGetProgname(), pmErrStr(sts)); pmflush(); fail = 1; } else { sts = context1.lookupPMID("hinv.cputype", pmid); if (sts < 0) { pmprintf("%s: Error: hinv.cputype PMID: %s\n", pmGetProgname(), pmErrStr(sts)); pmflush(); fail = 1; } desc = &context1.desc(pmid); indom = &context1.indom(indomIndex); if (desc->status() < 0) { pmprintf("%s: Error: hinv.cputype descriptor: %s\n", pmGetProgname(), pmErrStr(desc->status())); pmflush(); fail = 1; } else if (indom->status() < 0) { pmprintf("%s: Error: hinv.cputype indom: %s\n", pmGetProgname(), pmErrStr(indom->status())); pmflush(); fail = 1; } } QmcIndom *indom2; sts = context1.lookupInDom("hinv.map.cpu", indomIndex); if (sts < 0) { pmprintf("%s: Error: hinv.map.cpu: %s\n", pmGetProgname(), pmErrStr(sts)); pmflush(); fail = 1; } else { sts = context1.lookupPMID("hinv.map.cpu", pmid); if (sts < 0) { pmprintf("%s: Error: hinv.map.cpu PMID: %s\n", pmGetProgname(), pmErrStr(sts)); pmflush(); fail = 1; } desc = &context1.desc(pmid); indom2 = &context1.indom(indomIndex); if (desc->status() < 0) { pmprintf("%s: Error: hinv.map.cpu descriptor: %s\n", pmGetProgname(), pmErrStr(desc->status())); pmflush(); fail = 1; } else if (indom2->status() < 0) { pmprintf("%s: Error: hinv.map.cpu indom: %s\n", pmGetProgname(), pmErrStr(indom2->status())); pmflush(); fail = 1; } else if (indom != indom2) { pmprintf("%s: Error: hinv.cputype and hinv.map.cpu indoms are not the same\n", pmGetProgname()); pmflush(); fail = 1; } } sts = context1.lookupInDom("hinv.ncpu", indomIndex); if (sts < 0) { pmprintf("%s: Error: hinv.ncpu: %s\n", pmGetProgname(), pmErrStr(sts)); pmflush(); fail = 1; } else { sts = context1.lookupPMID("hinv.ncpu", pmid); if (sts < 0) { pmprintf("%s: Error: hinv.ncpu PMID: %s\n", pmGetProgname(), pmErrStr(sts)); pmflush(); fail = 1; } desc = &context1.desc(pmid); if (desc->status() < 0) { pmprintf("%s: Error: hinv.ncpu descriptor: %s\n", pmGetProgname(), pmErrStr(desc->status())); pmflush(); fail = 1; } else if (indomIndex < UINT_MAX) { pmprintf("%s: Error: hinv.ncpu indom is not NULL\n", pmGetProgname()); pmflush(); fail = 1; } } context1.dump(cout); fprintf(stderr, "\n*** Bad Context ***\n"); source = QString("no-such-host"); QmcSource *src2 = QmcSource::getSource(PM_CONTEXT_HOST, source); if (src2->status() >= 0) { pmprintf("%s: Error: Able to create context to \"%s\": %s\n", pmGetProgname(), (const char *)source.toLatin1(), pmErrStr(src1->status())); pmflush(); fail = 1; } QmcContext context2(src2); if (context2.handle() >= 0) { pmprintf("%s: Error: Created a valid context to an invalid host\n", pmGetProgname()); fail = 1; } pmflush(); context2.dump(cout); fprintf(stderr, "\n*** Exiting ***\n"); pmflush(); return fail; }