/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#include "Timer.h"

#include <stdio.h>

SkString HumanizeMs(double ms) {
    if (ms > 60e+3)  return SkStringPrintf("%.3gm", ms/60e+3);
    if (ms >  1e+3)  return SkStringPrintf("%.3gs",  ms/1e+3);
    if (ms <  1e-3)  return SkStringPrintf("%.3gns", ms*1e+6);
#ifdef SK_BUILD_FOR_WIN
    if (ms < 1)      return SkStringPrintf("%.3gus", ms*1e+3);
#else
    if (ms < 1)      return SkStringPrintf("%.3gµs", ms*1e+3);
#endif
    return SkStringPrintf("%.3gms", ms);
}

int HumanizeMs(char* s, int len, double ms) {
    if (ms > 60e+3)  return snprintf(s, len, "%.3gm", ms / 60e+3);
    if (ms >  1e+3)  return snprintf(s, len, "%.3gs", ms / 1e+3);
    if (ms <  1e-3)  return snprintf(s, len, "%.3gns", ms*1e+6);
#ifdef SK_BUILD_FOR_WIN
    if (ms < 1)      return snprintf(s, len, "%.3gus", ms*1e+3);
#else
    if (ms < 1)      return snprintf(s, len, "%.3gµs", ms*1e+3);
#endif
    return snprintf(s, len, "%.3gms", ms);
}
