Esempio n. 1
0
void DATFileUpdaterTest::WriteDatFile(const std::string& filename)
{
	DATData data(filename);
	data.SetPixelCount(10);
	data.SetStatsCount(10);
	data.SetPixelSize(.7F);
	data.SetScannerID(L"main");
	data.SetScannerType(L"M10");
	data.SetArrayType(L"Hg-small");
	data.SetRows(4);
	data.SetCols(5);
	DATFileWriter* writer = new DATFileWriter(data);
	u_int16_t s[] = { 16, 22, 14, 39, 26, 36 };
	Uint16Vector stats;
	for(int i = 0; i < 6; i++)
	{
		stats.push_back(s[i]);
	}
	writer->WriteStats(stats);

	u_int16_t p[] = { 36, 3, 7, 8, 11, 2 };
	Uint16Vector pixels;
	for(int i = 0; i < 6; i++)
	{
		pixels.push_back(p[i]);
	}
	writer->WritePixels(pixels);
	delete writer;
}
void DATFileWriterTest::WriteTest()
{
	DATData data("DAT_file");
	data.SetPixelCount(10);
	data.SetStatsCount(10);
	DATFileWriter* writer = new DATFileWriter(data);
	u_int16_t stat1 = 16;
	u_int16_t stat2 = 22;
	Uint16Vector stats;
	stats.push_back(stat1);
	stats.push_back(stat2);
	writer->WriteStats(stats);

	u_int16_t p1 = 36;
	u_int16_t p2 = 3;
	Uint16Vector pixels;
	pixels.push_back(p1);
	pixels.push_back(p2);
	writer->WritePixels(pixels);
	CPPUNIT_ASSERT(1);
	delete writer;
}
Esempio n. 3
0
RCType
TraceGen::generate(J9TDFOptions *options, const char *currentTDFFile)
{
	RCType rc = RC_FAILED;
	unsigned int groupCount = 0;
	J9TDFGroup *groups = NULL;
	J9TDFFile *tdf = NULL;

	FileReader reader;
	TDFParser parser;

	Path *current = _visitedFile;
	char *realPath = NULL;

	/**
	 * User might specify multiple scan roots for example -root src,src/omr
	 * To avoid processing trace files multiple times keep the record of processed files.
	 * To handle relative paths omrfile_realpath is used to resolve canonicalized absolute pathname.
	 */
	if (NULL == (realPath = Port::omrfile_realpath(currentTDFFile))) {
		FileUtils::printError("Failed to resolve full path to file: %s\n", currentTDFFile);
		goto done;
	}
	while (NULL != current) {
		if (0 == strcmp(current->path, realPath)) {
			break;
		}
		current = current->next;
	}
	if (NULL == current) {
		Path *tmp = (Path *) Port::omrmem_calloc(1, sizeof(Path));
		tmp->path = realPath;
		tmp->next = _visitedFile;
		_visitedFile = tmp;
	} else if (options->debugOutput) {
		FileUtils::printError("File %s was already processed\n", realPath);
		goto done;
	}

	printf("Processing tdf file %s\n", currentTDFFile);

	rc = reader.init(currentTDFFile);
	if (RC_OK != rc) {
		FileUtils::printError("Failed to read from file: %s\n", currentTDFFile);
		goto done;
	}

	parser.init(&reader, options->treatWarningAsError);
	tdf = parser.parse();
	if (NULL == tdf) {
		rc = RC_FAILED;
		goto done;
	}

	tdf->fileName = strdup(currentTDFFile);
	if (NULL == tdf->fileName) {
		eprintf("Failed to allocate memory");
		rc = RC_FAILED;
		goto done;
	}

	groups = calculateGroups(tdf, &groupCount);
	if (NULL == groups) {
		FileUtils::printError("Failed to calculate tracepoint groups");
		rc = RC_FAILED;
		goto done;
	}

	TraceHeaderWriter hfw;
	DATFileWriter dfw;
	CFileWriter cfw;

	rc = hfw.writeOutputFiles(options, tdf);
	if (RC_OK != rc) {
		FileUtils::printError("Failed to generate header file for %s\n", currentTDFFile);
		goto done;
	}
	rc = dfw.writeOutputFiles(options, tdf);
	if (RC_OK != rc) {
		FileUtils::printError("Failed to generate DAT file for %s\n", currentTDFFile);
		goto done;
	}

	if (options->generateCFiles) {
		rc = cfw.writeOutputFiles(options, tdf, groups, groupCount);
		if (RC_OK != rc) {
			FileUtils::printError("Failed to generate C file for %s\n", currentTDFFile);
			goto done;
		}
	}

done:
	if (NULL != tdf) {
		Port::omrmem_free((void **)&tdf->fileName);
		Port::omrmem_free((void **)&tdf->header.datfilename);
		Port::omrmem_free((void **)&tdf->header.executable);
		Port::omrmem_free((void **)&tdf->header.submodules);

		J9TDFTracepoint *tp = tdf->tracepoints;
		while (NULL != tp) {
			J9TDFTracepoint *next = tp->nexttp;
			Port::omrmem_free((void **)&tp->name);
			if (NULL != tp->groups) {
				unsigned int groupIndex = 0;
				while (NULL != tp->groups[groupIndex]) {
					Port::omrmem_free((void **)&tp->groups[groupIndex]);
					groupIndex += 1;
				}
				tp->groups = NULL;
			}
			Port::omrmem_free((void **)&tp->format);
			Port::omrmem_free((void **)&tp->parameters);

			tp = next;
		}
	}

	if (NULL != groups) {
		freeGroups(groups);
		groups = NULL;
	}
	return rc;
}