示例#1
0
文件: Show.cpp 项目: plast-lab/redex
std::string vshow(const DexField* p) {
  if (!p) return "";
  std::ostringstream ss;
  ss << accessibility(p->get_access()) << humanize(show(p->get_type())) << " "
     << humanize(show(p->get_class())) << "." << show(p->get_name());
  if (p->get_anno_set()) {
    ss << "\n  annotations:" << show(p->get_anno_set());
  }
  return ss.str();
}
示例#2
0
文件: Show.cpp 项目: plast-lab/redex
std::string vshow(const DexMethod* p, bool include_annotations /*=true*/) {
  if (!p) return "";
  std::ostringstream ss;
  ss << vshow(p->get_access())
     << vshow(p->get_proto()->get_rtype()) << " "
     << humanize(show(p->get_class())) << "." << show(p->get_name())
     << vshow(p->get_proto(), false);
  if (include_annotations) {
    if (p->get_anno_set()) {
      ss << "\n  annotations:" << show(p->get_anno_set());
    }
    bool first = true;
    if (p->get_param_anno() != nullptr) {
      for (auto const pair : *p->get_param_anno()) {
        if (first) {
          ss << "\n  param annotations:"
             << "\n";
          first = false;
        }
        ss << "    " << pair.first << ": " << show(pair.second) << "\n";
      }
    }
  }
  return ss.str();
}
示例#3
0
static void progress(const char *acc, uint64_t sz,
                     uint64_t srcSz, uint64_t hSrc, char sfSrc, KTime_t date)
{
    if (sz > 0) {
        if (srcSz > 0) {
            uint64_t p = 100 * sz / srcSz;
            char sf = 'B';
            uint64_t fr = 0;
            uint64_t h = humanize(sz, &sf, &fr);
            if (p > 0) {
                if (sfSrc != 'B' && sf != 'B') {
                    if (fr == 0) {
                        if (date == 0) {
                            OUTMSG(("%s %,ld/%,ld %ld%c/%,ld%c %ld%%        \r",
                                    acc, sz, srcSz, h,sf,hSrc,sfSrc,p));
                        }
                        else {
                            OUTMSG(("%s %,ld/%,ld %ld%c/%,ld%c %ld%% %ld    \r",
                                    acc, sz, srcSz, h,sf,hSrc,sfSrc,p,
                                    KTimeStamp() - date));
                        }
                    }
                    else {
                        OUTMSG(("%s %,ld/%,ld %ld.%03ld%c/%,ld%c %ld%%      \r",
                                acc, sz, srcSz,h,fr,sf,hSrc,sfSrc,p));
                    }
                }
                else {
                    OUTMSG(("%s %,ld/%,ld %ld%%                             \r",
                            acc, sz, srcSz, p));
                }
            }
            else {
                if (sfSrc != 'B' && sf != 'B') {
                    if (fr == 0) {
                        OUTMSG((
                                   "%s %,ld/%,ld %ld%c/%ld%c                           \r",
                                   acc, sz,srcSz,h, sf,hSrc,sfSrc));
                    }
                    else {
                        OUTMSG((
                                   "%s %,ld/%,ld %ld.%03ld%c/%ld%c                     \r",
                                   acc, sz,srcSz,h, fr,sf,hSrc,sfSrc));
                    }
                }
                else {
                    OUTMSG(("%s %,ld/%,ld                 \r", acc, sz, srcSz));
                }
            }
        }
        else {
            OUTMSG(("%s %,ld                                     \r", acc, sz));
        }
    }
    else {
        OUTMSG(("                                                \r%s\r", acc));
    }
}
示例#4
0
文件: Show.cpp 项目: plast-lab/redex
std::string vshow(const DexProto* p, bool include_ret_type = true) {
  if (!p) return "";
  std::ostringstream ss;
  ss << "(" << vshow(p->get_args()) << ")";
  if (include_ret_type) {
     ss << humanize(show(p->get_rtype()));
  }
  return ss.str();
}
示例#5
0
文件: Show.cpp 项目: plast-lab/redex
std::string vshow(const DexClass* p) {
  if (!p) return "";
  std::ostringstream ss;
  ss << accessibility(p->get_access()) << humanize(show(p->get_type()))
     << " extends " << humanize(show(p->get_super_class()));
  if (p->get_interfaces()) {
    ss << " implements ";
    bool first = true;
    for (auto const type : p->get_interfaces()->get_type_list()) {
      if (first)
        first = false;
      else
        ss << ", ";
      ss << humanize(show(type));
    }
  }
  if (p->get_anno_set()) {
    ss << "\n  annotations:" << show(p->get_anno_set());
  }
  return ss.str();
}
示例#6
0
文件: Show.cpp 项目: plast-lab/redex
std::string vshow(const DexTypeList* p) {
  if (!p) return "";
  std::ostringstream ss;
  bool first = true;
  for (auto const& type : p->get_type_list()) {
    if (!first) {
      ss << ", ";
    } else {
      first = false;
    }
    ss << humanize(show(type));
  }
  return ss.str();
}
示例#7
0
文件: text.c 项目: MichielPater/dfc
/*
 * Display used, available and total correctly formatted
 * @n: number to print
 * @perct: percentage (useful for finding which color to use)
 * @req_width: required width (used for terminal display, otherwise can be 0)
 */
static void
text_disp_uat(double n, double perct, int req_width)
{
	int i;

	i = 0;

	if (unitflag == 'h')
		i = humanize(&n);

	change_color(perct);
	(void)printf("%*.1f", req_width - 1, n); /* -1 for the unit symbol */
	reset_color();
	print_unit(i, 1);
}
示例#8
0
文件: m.c 项目: ALoay94/os
int main(int argc, char **argv)
{
	if(argc != 3)
	{
		printf("usage: %s block_size tests_count\n", argv[0]);
		return -1;
	}

	size_t bs = atoll(argv[1]);

	switch(argv[1][strlen(argv[1]) - 1])
	{
		case 'g':
		case 'G':
			bs *= 1000000000;
			break;
		case 'm':
		case 'M':
			bs *= 1000000;
			break;
		case 'k':
		case 'K':
			bs *= 1000;
			break;
	}

	unsigned a = atoi(argv[2]), i;
	
	int failed = 0;
	
	for(i = 0; i < a; ++i)
	{
		uint8_t *ptr = malloc(bs);
		*ptr = 'A';
		//memset(ptr, 'A', bs);
		int r = 0;//memcmp(ptr, main, (uint64_t)dum - (uint64_t)main);
		//if(*ptr != 'A') r = 1;
		//if(r) ++failed;
		printf("[%6d] : 0x%016lX (%s)\n", i, ptr, r?"failed":"passed");
		int s = 0;
	}
	
	printf("Memory test %s with %d test(s) [%u %s]\n", failed?"failed":"passed",
			a, humanize(a * bs), size(a * bs));
	//*(char*)(-1) = 5; // break kernel
}
示例#9
0
文件: human.c 项目: ttaylordev/z
int main (int argc, char **argv)
{
    char ch, pow = 0, fac = 0;
    double number = 0;

    /* only switches are use to force factorization */
    while ((ch = getopt(argc, argv, "hbkmgt")) != -1) {
        switch (ch) {
            case 'h': usage(argv[0]); exit(0); break;
            case 't': fac = 'T'; break;
            case 'g': fac = 'G'; break;
            case 'm': fac = 'M'; break;
            case 'k': fac = 'K'; break;
            case 'b': fac = 'B'; break;
        }
    }

    switch (argv[argc - 1][strnlen(argv[argc - 1],32) - 1]) {
        case 'T': pow++;
        case 'G': pow++;
        case 'M': pow++;
        case 'K': pow++;
        case 'B': argv[argc - 1][strnlen(argv[argc - 1],32) - 1] = 0;
    }

    /* get the number and convert it to bytes. If there is none, strtold will return 0 */
    number = strtold(argv[argc - 1], NULL);
    number *= power(1024, pow);

    if (number <= 0) {
        errx(EXIT_FAILURE, "I ain't gonna do that. Deal with it.");
    }

    /* use explicit factorization. otherwise, guess the best one */
    fac = fac > 0 ? fac : factorize(number);

    /* actually print the result, isn't that what we're here for after all ? */
    printf("%.*f%c\n", getscale(), humanize(number, fac), fac == 'B' ? 0 : fac);

    return 0;
}
示例#10
0
文件: html.c 项目: kilobyte/dfc
/*
 * Display available and total correctly formatted
 * @n: number to print
 * @perct: ignored here
 * @req_width: ignored here
 */
static void
html_disp_uat(double n, double perct, int req_width)
{
	int i;

	(void)perct;
	(void)req_width;

	(void)printf("\t  <td style = \"text-align: right;\">");

	if (unitflag == 'h') {
		i = humanize(&n);
		(void)printf(i == 0 ? "%.f" : "%.1f", n);
		print_unit(i, 1);
	} else {
		if (unitflag == 'b' || unitflag == 'k')
			(void)printf("%.f", n);
		else
			(void)printf("%.1f", n);
	}
	(void)puts("</td>");
}
示例#11
0
rc_t run_ascp(const char *path, const char *key,
              const char *src, const char *dest, const AscpOptions *opt)
{
    const char *host = NULL;
    const char *user = NULL;
    const char *maxRate = NULL;
    bool cache_key = false;
    uint64_t heartbeat = 0;
    const char *acc = NULL;
    uint64_t srcSz = 0;
    uint64_t id = 0;
    TProgress *callback = NULL;
    TQuitting *quitting = NULL;
    rc_t rc = 0;
    pid_t nPid = 0;
    int pipeto[2];      /* pipe to feed the exec'ed program input */
    int pipefrom[2];    /* pipe to get the exec'ed program output */
#define ARGV_SZ 64
    char *argv[ARGV_SZ];
    char extraOptions[4096] = "";

    int i = 0;
    int ret = 0;
    i = 0;

    if (opt != NULL) {
        acc = opt->name;
        cache_key = opt->cache_key;
        callback = opt->callback;
        heartbeat = opt->heartbeat;
        host = opt->host;
        id = opt->id;
        quitting = opt->quitting;
        srcSz = opt->src_size;
        user = opt->user;

        if (opt->ascp_options != NULL) {
            size_t s = string_size(opt->ascp_options);
            if (s >= sizeof extraOptions) {
                LOGERR(klogErr,
                       RC(rcExe, rcProcess, rcCreating, rcBuffer, rcInsufficient),
                       "extra ascp options are ignored");

                maxRate = opt->target_rate;
            }
            else {
                string_copy
                (extraOptions, sizeof extraOptions, opt->ascp_options, s);
            }
        }
        else {
            maxRate = opt->target_rate;
        }
    }

    if (acc == NULL) {
        acc = dest;
    }

    if (heartbeat > 0) {
        heartbeat /= 1000;
        if (heartbeat == 0) {
            heartbeat = 1;
        }
    }

    if (pipe(pipeto) != 0) {
        perror("pipe() to");
        rc = RC(rcExe, rcFileDesc, rcCreating, rcFileDesc, rcFailed);
        LOGERR(klogErr, rc, "while pipe");
        return rc;
    }
    if (pipe(pipefrom) != 0) {
        perror("pipe() from");
        rc = RC(rcExe, rcFileDesc, rcCreating, rcFileDesc, rcFailed);
        LOGERR(klogErr, rc, "while pipe");
        return rc;
    }

    argv[i++] = (char*)path;
    argv[i++] = "-i";
    argv[i++] = (char*)key;
    argv[i++] = "-pQTk1";
    if (maxRate != NULL && maxRate[0] != '\0') {
        argv[i++] = "-l";
        argv[i++] = (char*)maxRate;
    }
    if (user != NULL) {
        argv[i++] = "--user";
        argv[i++] = (char*)user;
    }
    if (host != NULL) {
        argv[i++] = "--host";
        argv[i++] = (char*)user;
    }

    if (extraOptions[0] != '\0') {
        bool done = false;
        char *c = extraOptions;
        while (!done) {
            while (true) {
                if (*c == '\0') {
                    break;
                }
                else if (isspace(*c)) {
                    ++c;
                }
                else {
                    break;
                }
            }
            if (*c == '\0') {
                break;
            }
            else {
                argv[i++] = c;
            }
            while (true) {
                if (*c == '\0') {
                    done = true;
                    break;
                }
                else if (isspace(*c)) {
                    *(c++) = '\0';
                    break;
                }
                ++c;
            }
            if (i > ARGV_SZ - 4) {
                LOGERR(klogErr,
                       RC(rcExe, rcProcess, rcCreating, rcBuffer, rcInsufficient),
                       "too mary extra ascp options - some of them are ignored");
                break;
            }
        }
    }

    argv[i++] = (char*)src;
    argv[i++] = (char*)dest;
    argv[i++] = NULL;

    logevp(path, argv);

    if (quitting) {
        rc = quitting();
    }
    if (rc != 0) {
        return rc;
    }

    nPid = fork();
    if (nPid < 0 ) {
        perror("fork() 1");
        rc = RC(rcExe, rcProcess, rcCreating, rcProcess, rcFailed);
        LOGERR(klogErr, rc, "after fork");
        return rc;
    }
    else if (nPid == 0) {
        /* dup pipe read/write to stdin/stdout */
        dup2(pipeto  [0], STDIN_FILENO);
        dup2(pipefrom[1], STDOUT_FILENO);
        dup2(pipefrom[1], STDERR_FILENO);
        close(pipeto[1]);
        ret = execvp(path, argv);
        STSMSG(STS_DBG, ("CHILD: Done %s %s %s = %d", path, src, dest, ret));
        exit(EXIT_FAILURE);
    }
    else {
        bool progressing = false;
        bool writeFailed = false;
        EAscpState state = eStart;
        const char y[] = "y\n";
        const char n[] = "n\n";
        int status = 0;
        int w = 0;
        int fd = pipefrom[0];
        const char *answer = n;
        String line;
        StringInit(&line, NULL, 0, 0);
        if (cache_key) {
            answer = y;
        }

        {
            int flags = fcntl(fd, F_GETFL, 0);
            fcntl(fd, F_SETFL, flags | O_NONBLOCK);
        }

        close(pipeto[0]);
        close(pipefrom[1]);
        assert(sizeof y == sizeof n);

        {
            int hang = 0;
            uint64_t prev = 0;
            KTime_t tPrev = 0;
            char sfSrc = 'B';
            uint64_t hSrc = humanize(srcSz, &sfSrc, NULL);
            int sig = 0;
            uint64_t i = 0;
            KDirectory *dir = NULL;
            rc_t rc = KDirectoryNativeDir(&dir);
            DISP_RC(rc, "KDirectoryNativeDir");
            if (rc != 0) {
                return rc;
            }
            while (w == 0) {
                bool quit = false;
                w = waitpid(nPid, &status, WNOHANG);
                if (w == 0) {
                    bool got = false;
                    rc_t rc = 0;
                    if (quitting) {
                        rc = quitting();
                    }
                    if (rc != 0 || quit) {
                        if (sig == 0) {
                            sig = SIGINT;
                        }
                        else if (sig >= SIGKILL) {
                            break;
                        }
                        else {
                            ++sig;
                        }
                        if (progressing) {
                            OUTMSG(("\n"));
                        }
                        PLOGMSG(klogInfo, (klogInfo, "^C pressed: "
                                           "Senging $(sgn) to ascp", "sgn=%s", sig));
                        kill(nPid, sig);
                    }
                    while (true) {
                        char buf[4096];
                        int s = read(fd, buf, sizeof buf);
                        if (s == 0) {
                            break;
                        }
                        else if (s < 0) {
                            if (errno != EAGAIN) {
                                if (progressing) {
                                    OUTMSG(("\n"));
                                }
                                perror("read(child)");
                            }
                            break;
                        }
                        ascpParse(buf, s, dest, &state, &line);
                        switch (state) {
                        case eKeyEnd:
                            write(pipeto[1], answer, sizeof y - 1);
                            break;
                        case eWriteFailed:
                            writeFailed = true;
                            break;
                        default:
                            break;
                        }
                        got = true;
                    }
                    if (!got) {
                        sleep(1);
                        ++i;
                        if ((heartbeat > 0 && i >= heartbeat) || (i > 99)) {
                            uint64_t size = 0;
                            rc_t rc = KDirectoryFileSize(dir, &size, "%s", dest);
                            if (rc != 0) {
                                size = 0;
                            }
                            else {
                                if (size != prev) {
                                    prev = size;
                                    tPrev = 0;
                                    hang = 0;
                                }
                                else {
                                    KTime_t date = 0;
                                    rc_t rc = KDirectoryDate(dir, &date, "%s", dest);
                                    if (rc == 0) {
                                        tPrev = date;
                                        if ((KTimeStamp() - date) > 60 * 99) {
                                            /* no file update during 99' */
                                            if (hang == 0) {
                                                write(pipeto[1],
                                                      answer, sizeof y - 1);
                                                ++hang;
                                            }
                                            else if (hang < 9) {
                                                ++hang;
                                                sig = 0;
                                            }
                                            else {
                                                if (sig == 0) {
                                                    sig = SIGINT;
                                                }
                                                else {
                                                    ++sig;
                                                }
                                                if (progressing) {
                                                    OUTMSG(("\n"));
                                                }
                                                if (sig > SIGKILL) {
                                                    rc = RC(rcExe,
                                                            rcProcess, rcExecuting,
                                                            rcProcess,rcDetached);
                                                    return rc;
                                                }

                                                PLOGMSG(klogInfo, (klogInfo,
                                                                   "Senging $(sgn) to ascp",
                                                                   "sgn=%s", sig));
                                                kill(nPid, sig);
                                            }
                                        }
                                    }
                                }
                            }
                            if (heartbeat > 0) {
                                if (callback) {
                                    quit = !callback(id,
                                                     eAscpStateRunning, size, 0);
                                }
                                else {
                                    progress(acc, size, srcSz, hSrc, sfSrc,
                                             tPrev);
                                }
                                progressing = true;
                            }
                            i = 0;
                        }
                    }
                }
            }
            RELEASE(KDirectory, dir);
        }

        if (progressing) {
            OUTMSG(("\n"));
        }

        while (1) {
            char buf[4096];
            int s = read(fd, buf, sizeof buf);
            if (s == 0) {
                break;
            }
            else if (s < 0) {
                if (errno != EAGAIN) {
                    perror("read(child)");
                    break;
                }
                continue;
            }
            ascpParse(buf, s, dest, &state, &line);
            if (state == eWriteFailed) {
                writeFailed = true;
            }
        }
        STSMSG(    STS_DBG, ("ascp exited with pid=%d status=%d", w, status));
        if (WIFEXITED(status)) {
            STSMSG(STS_DBG, ("ascp exited with exit status %d",
                             WEXITSTATUS(status)));
        }
        else {
            STSMSG(STS_DBG, ("ascp has not terminated correctly"));
        }
        if (w == -1) {
            perror("waitpid");
            rc = RC(rcExe, rcProcess, rcWaiting, rcProcess, rcFailed);
            LOGERR(klogErr, rc, "after waitpid");
            exit(EXIT_FAILURE);
        }
        if (WIFEXITED(status)) {
            if (WEXITSTATUS(status) == 0) {
                STSMSG(STS_DBG, ("ascp succeed"));
                if (callback) {
                    callback(id, eAscpStateExitSuccess, 0, 0);
                }
            } else if (writeFailed) {
                rc = RC(rcExe, rcProcess, rcExecuting, rcMemory, rcExhausted);
                if (callback) {
                    callback(id, eAscpStateExitWriteFailure, 0, 0);
                }
            }
            else {
                if (rc == 0) {
                    rc = RC(rcExe, rcProcess, rcWaiting, rcProcess, rcFailed);
                }
                PLOGERR(klogErr, (klogErr, rc,
                                  "ascp failed with $(ret)", "ret=%d", WEXITSTATUS(status)));
                if (callback) {
                    callback(id, eAscpStateExitFailure, 0, 0);
                }
            }
        } else if (WIFSIGNALED(status)) {
            if (rc == 0) {
                if (quitting) {
                    rc = quitting();
                    if (rc == 0) {
                        rc = RC(rcExe,
                                rcProcess, rcWaiting, rcProcess, rcFailed);
                    }
                }
            }
            if (rc != SILENT_RC(rcExe, rcProcess, rcExecuting,
                                rcProcess, rcCanceled))
            {
                PLOGERR(klogErr, (klogErr, rc, "ascp killed by signal $(sig)",
                                  "sig=%d", WTERMSIG(status)));
                if (callback) {
                    callback(id, eAscpStateExitFailure, 0, 0);
                }
            }
        }
    }
    return rc;
}
示例#12
0
int tool_main(int argc, char** argv) {
    SetupCrashHandler();
    SkAutoGraphics ag;
    SkCommandLineFlags::Parse(argc, argv);

    const double overhead = estimate_timer_overhead();

    if (FLAGS_verbose) {
        // No header.
    } else if (FLAGS_quiet) {
        SkDebugf("min\tbench\tconfig\n");
    } else {
        SkDebugf("loops\tmin\tmean\tmax\tstddev\tbench\tconfig\n");
    }

    for (const BenchRegistry* r = BenchRegistry::Head(); r != NULL; r = r->next()) {
        SkAutoTDelete<Benchmark> bench(r->factory()(NULL));
        if (SkCommandLineFlags::ShouldSkip(FLAGS_match, bench->getName())) {
            continue;
        }

        SkTDArray<SkSurface*> surfaces;
        SkTDArray<const char*> configs;
        create_surfaces(bench.get(), &surfaces, &configs);

        bench->preDraw();
        for (int j = 0; j < surfaces.count(); j++) {
            SkCanvas* canvas = surfaces[j] ? surfaces[j]->getCanvas() : NULL;
            const char* config = configs[j];

            bench->draw(1, canvas);  // Just paranoid warmup.
            safe_flush(canvas);
            const int loops = guess_loops(overhead, bench.get(), canvas);

            SkAutoTMalloc<double> samples(FLAGS_samples);
            WallTimer timer;
            for (int i = 0; i < FLAGS_samples; i++) {
                timer.start();
                bench->draw(loops, canvas);
                safe_flush(canvas);
                timer.end();
                samples[i] = timer.fWall / loops;
            }

            Stats stats(samples.get(), FLAGS_samples);

            if (FLAGS_verbose) {
                for (int i = 0; i < FLAGS_samples; i++) {
                    SkDebugf("%s  ", humanize(samples[i]).c_str());
                }
                SkDebugf("%s\n", bench->getName());
            } else if (FLAGS_quiet) {
                if (configs.count() == 1) {
                    config = ""; // Only print the config if we run the same bench on more than one.
                }
                SkDebugf("%s\t%s\t%s\n", humanize(stats.min).c_str(), bench->getName(), config);
            } else {
                const double stddev_percent = 100 * sqrt(stats.var) / stats.mean;
                SkDebugf("%d\t%s\t%s\t%s\t%.0f%%\t%s\t%s\n"
                        , loops
                        , humanize(stats.min).c_str()
                        , humanize(stats.mean).c_str()
                        , humanize(stats.max).c_str()
                        , stddev_percent
                        , bench->getName()
                        , config
                        );
            }
        }
        surfaces.deleteAll();
    }

    return 0;
}
示例#13
0
文件: Show.cpp 项目: plast-lab/redex
std::string vshow(const DexType* t) {
  return humanize(show(t));
}