int sysfs_write_int(const char path[PATH_MAX], int value)
{
- int ret;
- int fd;
- int len;
char buf[20];
+ int len = snprintf(buf, sizeof(buf), "%d", value);
- len = sprintf(buf, "%d", value);
-
- if (!path[0] || len <= 0) {
+ if (len <= 0) {
ALOGE("Unexpected condition in sysfs_write_int\n");
return -1;
}
- fd = open(path, O_WRONLY);
-
- if (fd == -1) {
- ALOGV("Cannot open %s (%s)\n", path, strerror(errno));
- return -1;
- }
+ return sysfs_write(path, buf, len);
+}
- ret = write(fd, buf, len);
+int sysfs_write_float(const char path[PATH_MAX], float value)
+{
+ char buf[20];
+ int len = snprintf(buf, sizeof(buf), "%g", value);
- if (ret != len) {
- ALOGW("Cannot write %s (%d bytes) to %s (%s)\n", buf, len, path,
- strerror(errno));
+ if (len <= 0) {
+ ALOGE("Unexpected condition in sysfs_write_float\n");
+ return -1;
}
- close(fd);
-
- return ret;
+ return sysfs_write(path, buf, len);
}
}
-int sysfs_write_float(const char path[PATH_MAX], float value)
+int64_t get_timestamp (clockid_t clock_id)
{
- int ret;
- int fd;
- int len;
- char buf[20];
-
- len = snprintf(buf, sizeof(buf), "%g", value);
-
- if (!path[0] || len <= 0) {
- ALOGE("Unexpected condition in sysfs_write_float\n");
- return -1;
- }
-
- fd = open(path, O_WRONLY);
+ struct timespec ts = {0};
- if (fd == -1) {
- ALOGV("Cannot open %s (%s)\n", path, strerror(errno));
+ if (!clock_gettime(clock_id, &ts))
+ return 1000000000LL * ts.tv_sec + ts.tv_nsec;
+ else /* in this case errno is set appropriately */
return -1;
- }
-
- ret = write(fd, buf, len);
-
- if (ret != len) {
- ALOGW("Cannot write %s (%d bytes) to %s (%s)\n", buf, len, path,
- strerror(errno));
- }
-
- close(fd);
-
- return ret;
}
-
int64_t get_timestamp_realtime (void)
{
- struct timespec ts = {0};
- clock_gettime(CLOCK_REALTIME, &ts);
-
- return 1000000000LL * ts.tv_sec + ts.tv_nsec;
+ return get_timestamp(CLOCK_REALTIME);
}
-
int64_t get_timestamp_boot (void)
{
- struct timespec ts = {0};
- clock_gettime(CLOCK_BOOTTIME, &ts);
-
- return 1000000000LL * ts.tv_sec + ts.tv_nsec;
+ return get_timestamp(CLOCK_BOOTTIME);
}
+int64_t get_timestamp_thread (void)
+{
+ return get_timestamp(CLOCK_THREAD_CPUTIME_ID);
+}
int64_t get_timestamp_monotonic (void)
{
- struct timespec ts = {0};
- clock_gettime(CLOCK_MONOTONIC, &ts);
-
- return 1000000000LL * ts.tv_sec + ts.tv_nsec;
+ return get_timestamp(CLOCK_MONOTONIC);
}
-
void set_timestamp (struct timespec *out, int64_t target_ns)
{
out->tv_sec = target_ns / 1000000000LL;