dlog_logger: reuse clock readings 03/193103/1
authorMichal Bloch <m.bloch@samsung.com>
Wed, 14 Nov 2018 14:29:33 +0000 (15:29 +0100)
committerMichal Bloch <m.bloch@samsung.com>
Wed, 14 Nov 2018 14:29:56 +0000 (15:29 +0100)
No need for every reader to read the same value on its own.

Change-Id: I91f0e81306061607cb848911bafaf69554b15229
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
src/logger/logger.c

index 82cda46..7c903f0 100644 (file)
@@ -186,6 +186,7 @@ struct logger {
        struct log_buffer*  buffers[LOG_ID_MAX];
        struct buf_params   buf_params;
        int                 exiting;
+       struct timespec     now;
 };
 
 struct socket_config_data {
@@ -752,7 +753,7 @@ int reader_ms_since(const struct reader *reader, struct timespec *ts)
        return (ts->tv_sec - reader->last_read_time.tv_sec) * 1000 + (ts->tv_nsec - reader->last_read_time.tv_nsec) / 1000000;
 }
 
-int reader_should_buffer(struct reader *reader, const struct buf_params *buf_params)
+int reader_should_buffer(struct reader *reader, const struct buf_params *buf_params, struct timespec now)
 {
        assert(reader);
        assert(buf_params);
@@ -760,9 +761,6 @@ int reader_should_buffer(struct reader *reader, const struct buf_params *buf_par
        if (!reader_is_bufferable(reader))
                return 0;
 
-       struct timespec now;
-       clock_gettime(CLOCK_MONOTONIC, &now);
-
        if (reader_buffered_space(reader) < (uint64_t)buf_params->bytes && reader_ms_since(reader, &now) < (buf_params->time * 1000))
                return 1;
 
@@ -1596,7 +1594,7 @@ static int cond_service_reader(void *ptr, void *user_data)
        struct reader *reader = (struct reader *)ptr;
        struct logger *logger = (struct logger *)user_data;
 
-       if (!logger->exiting && reader_should_buffer(reader, &logger->buf_params))
+       if (!logger->exiting && reader_should_buffer(reader, &logger->buf_params, logger->now))
                return FALSE;
 
        assert(reader->service_reader);
@@ -1919,6 +1917,8 @@ static int do_logger(struct logger* server)
        if (r < 0)
                return r;
        while (g_logger_run) {
+               clock_gettime(CLOCK_MONOTONIC, &server->now);
+
                ensure_epoll_size(&events, &events_size, server->epollcnt);
 
                int nfds = epoll_wait(server->epollfd, events, events_size, 1000);