qint64 QV4ProfilerAdapter::sendMessages(qint64 until, QList<QByteArray> &messages)
{
    QByteArray message;
    while (true) {
        while (!stack.empty() && (data.empty() || stack.top() <= data.front().start)) {
            if (stack.top() > until) {
                qint64 memory_next = appendMemoryEvents(until, messages);
                return memory_next == -1 ? stack.top() : qMin(stack.top(), memory_next);
            }
            appendMemoryEvents(stack.top(), messages);
            QQmlDebugStream d(&message, QIODevice::WriteOnly);
            d << stack.pop() << RangeEnd << Javascript;
            messages.append(message);
        }
        while (!data.empty() && (stack.empty() || data.front().start < stack.top())) {
            const QV4::Profiling::FunctionCallProperties &props = data.front();
            if (props.start > until) {
                qint64 memory_next = appendMemoryEvents(until, messages);
                return memory_next == -1 ? props.start : qMin(props.start, memory_next);
            }
            appendMemoryEvents(props.start, messages);

            QQmlDebugStream d_start(&message, QIODevice::WriteOnly);
            d_start << props.start << RangeStart << Javascript;
            messages.push_back(message);
            message.clear();
            QQmlDebugStream d_location(&message, QIODevice::WriteOnly);
            d_location << props.start << RangeLocation << Javascript << props.file << props.line
                       << props.column;
            messages.push_back(message);
            message.clear();
            QQmlDebugStream d_data(&message, QIODevice::WriteOnly);
            d_data << props.start << RangeData << Javascript << props.name;
            messages.push_back(message);
            message.clear();
            stack.push(props.end);
            data.pop_front();
        }
        if (stack.empty() && data.empty())
            return appendMemoryEvents(until, messages);
    }
}
Esempio n. 2
0
qint64 QV4ProfilerAdapter::sendMessages(qint64 until, QList<QByteArray> &messages)
{
    QByteArray message;
    while (true) {
        while (!stack.isEmpty() && (dataPos == data.length() ||
                                    stack.top() <= data[dataPos].start)) {
            if (stack.top() > until)
                return finalizeMessages(until, messages, stack.top());

            appendMemoryEvents(stack.top(), messages);
            QQmlDebugStream d(&message, QIODevice::WriteOnly);
            d << stack.pop() << RangeEnd << Javascript;
            messages.append(message);
        }
        while (dataPos != data.length() && (stack.empty() || data[dataPos].start < stack.top())) {
            const QV4::Profiling::FunctionCallProperties &props = data[dataPos];
            if (props.start > until)
                return finalizeMessages(until, messages, props.start);

            appendMemoryEvents(props.start, messages);

            QQmlDebugStream d_start(&message, QIODevice::WriteOnly);
            d_start << props.start << RangeStart << Javascript;
            messages.push_back(message);
            message.clear();
            QQmlDebugStream d_location(&message, QIODevice::WriteOnly);
            d_location << props.start << RangeLocation << Javascript << props.file << props.line
                       << props.column;
            messages.push_back(message);
            message.clear();
            QQmlDebugStream d_data(&message, QIODevice::WriteOnly);
            d_data << props.start << RangeData << Javascript << props.name;
            messages.push_back(message);
            message.clear();
            stack.push(props.end);
            ++dataPos;
        }
        if (stack.empty() && dataPos == data.length())
            return finalizeMessages(until, messages, -1);
    }
}
Esempio n. 3
0
Data::Data(char const *filename, int bootSeed, bool const parallel)
  : d_cur(NONE), d_bootSeed(bootSeed)
{
  if (parallel)
  {
    int mpirank;
    MPI_Comm_rank(MPI_COMM_WORLD, &mpirank);

    // Broken LUSTRE forces us to use POSIX, then broadcast
    unsigned long int filesize = 0;
    char *buffer;

    // Detect if the data file even exists (otherwise things crash in a nasty way)
    size_t error = 0;
    if (mpirank == 0)
    {
      struct stat sbuf;
      if (stat(filename, &sbuf))
      {
        std::cerr << "Data file appears to be non-existent!" << std::endl;
        error = 1;
      }
    }
    MPI_Bcast(&error, 1, MPI_UNSIGNED_LONG, 0, MPI_COMM_WORLD);
    if (error)
    {
      MPI_Finalize();
      exit(1);
    }


    if (mpirank == 0)
    {
      std::ifstream instream(filename);
      instream.seekg(0, std::ios::end);
      filesize = instream.tellg();
      instream.seekg(0, std::ios::beg);
      MPI_Bcast(&filesize, 1, MPI_UNSIGNED_LONG, 0, MPI_COMM_WORLD);
      buffer = new char[filesize + 1]; // To avoid weirdness, assign a little extra memory
      instream.read(buffer, filesize);
      instream.close();
      buffer[filesize] = '\0';
    }
    else
    {
      MPI_Bcast(&filesize, 1, MPI_UNSIGNED_LONG, 0, MPI_COMM_WORLD);
      buffer = new char[filesize + 1]; // To avoid weirdness, assign a little extra memory
    }
    MPI_Bcast(buffer, filesize, MPI_CHAR, 0, MPI_COMM_WORLD);

    // Now buffer should be equal for everybody -- we can continue as before
    std::istringstream input(buffer + 1); // Skip comment #
    input >> d_nSamp >> d_minEv >> d_maxEv;

    d_data.resize(d_nSamp, d_maxEv - d_minEv); // Assuming minEv < 0 and the 0 is not included!

    for (size_t row = 0; row < d_nSamp; ++row)
      for (size_t col = 0; col < (d_maxEv - d_minEv); ++col)
        input >> d_data(row, col);
    delete[] buffer;
  }
  else
  {
Esempio n. 4
0
int main() {

	std::cout << "Lets start" << std::endl;

	struct settings_t settings;

	try {
		settings = ConfigReader::read_settings();
	} catch (std::exception& e) {
		std::cout << "Config file is incorrect: " << e.what() <<std::endl;
		return 0;
	}

	std::ifstream v_data(settings.v_data_file);
	std::ifstream d_data(settings.d_data_file);
	std::ifstream j_data(settings.j_data_file);
	std::ofstream output(settings.output_file);

	std::set<std::string> uniq_reads;
	std::map<std::string, Alignment> v_reads, d_reads, j_reads;
	std::cout << "Reading V data..." << std::endl;
	getMapForFile(v_data, v_reads, uniq_reads);
	std::cout << "Done.\nReading D data..." << std::endl;
	getMapForFile(d_data, d_reads, uniq_reads);
	std::cout << "Done.\nReading J data..." << std::endl;
	getMapForFile(j_data, j_reads, uniq_reads);
	std::cout << "Done." << std::endl;

	v_data.close();
	d_data.close();
	j_data.close();

	std::cout << "Start processing..." << std::endl;
	int counter = 0;
	for (auto it = uniq_reads.begin(); it != uniq_reads.end(); ++it) {
		output << *it << "\t";
		auto iter = v_reads.find(*it);
		if (v_reads.end() == iter) {
			output << "-\t-\t";
		} else {
			output << iter->second.getReadBegin() << "\t" << iter->second.getReadEnd() << "\t";
		}

		iter = d_reads.find(*it);
		if (d_reads.end() == iter) {
			output << "-\t-\t";
		} else {
			output << iter->second.getReadBegin() << "\t" << iter->second.getReadEnd() << "\t";
		}

		iter = j_reads.find(*it);
		if (j_reads.end() == iter) {
			output << "-\t-\t";
		} else {
			output << iter->second.getReadBegin() << "\t" << iter->second.getReadEnd() << "\t";
		}
		output << std::endl;
		if (++counter % 100) {
			std::cout << counter << " reads of " << uniq_reads.size() << " processed\r";
		}
	}

	output.close();
	std::cout << std::endl << "Done" << std::endl;

	return 0;
}