SyntroCVCamConsole::SyntroCVCamConsole(bool daemonMode, QObject *parent) : QThread(parent) { m_daemonMode = daemonMode; m_logTag = PRODUCT_TYPE; m_fps = 0; m_frameCount = 0; m_camera = NULL; if (m_daemonMode) { registerSigHandler(); if (daemon(1, 1)) { perror("daemon"); return; } } SyntroUtils::syntroAppInit(); m_client = new CameraClient(this); m_client->resumeThread(); if (m_daemonMode) m_frameRateTimer = 0; else m_frameRateTimer = startTimer(STAT_REFRESH_SECS * SYNTRO_CLOCKS_PER_SEC); m_frameRefreshTimer = startTimer(SYNTRO_CLOCKS_PER_SEC / FRAME_RATE_DIVISOR); start(); }
SyntroHAServer::SyntroHAServer(bool daemonMode, QObject *parent) : QThread(parent) { m_daemonMode = daemonMode; #ifndef WIN32 if (m_daemonMode) { registerSigHandler(); if (daemon(1, 1)) { perror("daemon"); return; } } #endif SyntroUtils::syntroAppInit(); m_client = new HAClient(this); m_insteonDriver = new InsteonDriver(); connect(m_insteonDriver, SIGNAL(newSyntroUpdate(QJsonObject)), m_client, SLOT(newSyntroUpdate(QJsonObject))); connect(m_client, SIGNAL(setDeviceLevel(int, int)), m_insteonDriver, SLOT(setDeviceLevel(int, int))); m_client->resumeThread(); m_insteonDriver->resumeThread(); start(); }
SyntroLCamConsole::SyntroLCamConsole(bool daemonMode, QObject *parent) : QThread(parent) { m_daemonMode = daemonMode; m_computedFrameRate = 0.0; m_frameCount = 0; m_frameRateTimer = 0; m_camera = NULL; m_audio = NULL; m_client = NULL; m_width = 0; m_height = 0; m_framerate = 0; #ifndef WIN32 if (m_daemonMode) { registerSigHandler(); if (daemon(1, 1)) { perror("daemon"); return; } } #endif connect((QCoreApplication *)parent, SIGNAL(aboutToQuit()), this, SLOT(aboutToQuit())); SyntroUtils::syntroAppInit(); m_client = new CamClient(this); m_client->resumeThread(); if (!m_daemonMode) { m_frameCount = 0; m_frameRateTimer = startTimer(FRAME_RATE_TIMER_INTERVAL * 1000); } start(); }
int main(int argc, char **argv) { bool isRoot = (getuid() == 0); if (argc == 2 && 0 == strcmp(argv[1], "--help")) { showHelp(argv[0]); exit(0); } for (;;) { int ret; ret = getopt(argc, argv, "b:gcidflst:wz"); if (ret < 0) { break; } switch(ret) { case 'g': if (!isRoot) { fprintf(stderr, "error: tracing GPU power state requires root privileges\n"); exit(1); } g_traceGpuPower = true; break; case 'b': g_traceBufferSizeKB = atoi(optarg); break; case 'c': g_traceOverwrite = true; break; case 'i': g_traceCpuIdle = true; break; case 'l': g_traceGovernorLoad = true; break; case 'd': if (!isRoot) { fprintf(stderr, "error: tracing disk activity requires root privileges\n"); exit(1); } g_traceDisk = true; break; case 'f': g_traceCpuFrequency = true; break; case 's': g_traceSchedSwitch = true; break; case 't': g_traceDurationSeconds = atoi(optarg); break; case 'w': if (!isRoot) { fprintf(stderr, "error: tracing kernel work queues requires root privileges\n"); exit(1); } g_traceWorkqueue = true; break; case 'z': g_compress = true; break; default: fprintf(stderr, "\n"); showHelp(argv[0]); exit(-1); break; } } registerSigHandler(); bool ok = startTrace(isRoot); if (ok) { printf("capturing trace..."); fflush(stdout); // We clear the trace after starting it because tracing gets enabled for // each CPU individually in the kernel. Having the beginning of the trace // contain entries from only one CPU can cause "begin" entries without a // matching "end" entry to show up if a task gets migrated from one CPU to // another. ok = clearTrace(); if (ok) { // Sleep to allow the trace to be captured. struct timespec timeLeft; timeLeft.tv_sec = g_traceDurationSeconds; timeLeft.tv_nsec = 0; do { if (g_traceAborted) { break; } } while (nanosleep(&timeLeft, &timeLeft) == -1 && errno == EINTR); } } // Stop the trace and restore the default settings. stopTrace(isRoot); if (ok) { if (!g_traceAborted) { printf(" done\nTRACE:\n"); fflush(stdout); dumpTrace(); } else { printf("\ntrace aborted.\n"); fflush(stdout); } clearTrace(); } else { fprintf(stderr, "unable to start tracing\n"); } // Reset the trace buffer size to 1. setTraceBufferSizeKB(1); return g_traceAborted ? 1 : 0; }