| 472 | } |
| 473 | |
| 474 | bool Tools::initTool(Tools::PerformanceType pt) |
| 475 | { |
| 476 | std::cout << __FUNCTION__ << " : " |
| 477 | << enumElemName<PerformanceType>(pt) |
| 478 | << std::endl; |
| 479 | |
| 480 | if (d->attachPID <= 0) { |
| 481 | qCritical() << "unknown process from attach PID" << d->attachPID; |
| 482 | } |
| 483 | |
| 484 | QProcess* process = new QProcess; |
| 485 | process->setEnvironment({"LINES=1000", "COLUMNS=1000"}); |
| 486 | if (PerformanceType::function == pt) { |
| 487 | process->setProperty(package_name.c_str(), "perf-tools-unstable"); |
| 488 | process->setProperty(::enumName<PerformanceType>(), function); |
| 489 | process->setProgram("/usr/bin/perf"); |
| 490 | process->setArguments({"top", |
| 491 | "--delay", "1", |
| 492 | "--fields","overhead,sample,period,dso,symbol,srcline", |
| 493 | "--hide_kernel_symbols", |
| 494 | "--verbose", |
| 495 | "--stdio", |
| 496 | "-p", QString::number(d->attachPID)}); |
| 497 | QDir tempDir(QDir::tempPath()); |
| 498 | if (!tempDir.exists("perf_top_redirect_stdout")) { |
| 499 | qInfo() << "create redirect output from perf top"; |
| 500 | QFile file(tempDir.filePath("perf_top_redirect_stdout")); |
| 501 | file.open(QFile::OpenModeFlag::NewOnly); |
| 502 | file.close(); |
| 503 | } |
| 504 | process->setStandardInputFile(tempDir.filePath("perf_top_redirect_stdout")); |
| 505 | } |
| 506 | if (PerformanceType::global == pt) { |
| 507 | process->setProperty(package_name.c_str(), system_default.c_str()); |
| 508 | process->setProperty(::enumName<PerformanceType>(), global); |
| 509 | process->setProgram("/usr/bin/top"); |
| 510 | process->setArguments({"-b", |
| 511 | "-d","1", |
| 512 | "-p", QString::number(d->attachPID)}); |
| 513 | } |
| 514 | |
| 515 | if (PerformanceType::vfs == pt) { |
| 516 | process->setProperty(package_name.c_str(), system_default.c_str()); |
| 517 | process->setProperty(::enumName<PerformanceType>(), vfs); |
| 518 | process->setProgram("/usr/bin/lsof"); |
| 519 | process->setArguments({"-r", "1", |
| 520 | "-p", QString::number(d->attachPID)}); |
| 521 | } |
| 522 | |
| 523 | if (PerformanceType::socket == pt) { |
| 524 | Template::checkSocketScript(); |
| 525 | process->setProperty(package_name.c_str(), system_default.c_str()); |
| 526 | process->setProperty(::enumName<PerformanceType>(), socket); |
| 527 | process->setProgram(Template::scriptsPathFrom(socket)); |
| 528 | process->setArguments({QString::number(d->attachPID), QString::number(QCoreApplication::applicationPid())}); |
| 529 | } |
| 530 | |
| 531 | if (PerformanceType::deviceIO == pt) { |
nothing calls this directly
no test coverage detected