Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 389aee11 authored by Yao Chen's avatar Yao Chen
Browse files

Fix the stats log in lmkd

1. let logs be written to statsd directly like all other stats logs.
   + stats log should not write to logd anymore(b/78239479)
2. fixed the log format
   + need to embed the elapsed real time in the log
3. fixed the log context reuse problem
   +reset the log context buffer and internal state before reuse

Bug: 78603347
Bug: 78239479

Test: tested with alloc_stress, and saw logs written to statsd

performance measurement (memory & cpu):
https://paste.googleplex.com/5508158646648832

Change-Id: I345f0eace8ba1687ff480fb88e9abba1d8533f76
parent 97993180
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ cc_binary {
    ],
    static_libs: [
        "libstatslogc",
        "libstatssocket",
    ],
    local_include_dirs: ["include"],
    cflags: ["-Werror", "-DLMKD_TRACE_KILLS"],
@@ -31,6 +32,7 @@ cc_library_static {
    shared_libs: [
        "liblog",
    ],
    static_libs: ["libstatssocket",],
}

cc_library_static {
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@
#include <log/log.h>

#ifdef LMKD_LOG_STATS
#include <statslog.h>
#include "statslog.h"
#endif

/*
+23 −6
Original line number Diff line number Diff line
@@ -16,8 +16,16 @@

#include <assert.h>
#include <errno.h>
#include <log/log_event_list.h>
#include <log/log_id.h>
#include <stats_event_list.h>
#include <time.h>

static int64_t getElapsedRealTimeNs() {
    struct timespec t;
    t.tv_sec = t.tv_nsec = 0;
    clock_gettime(CLOCK_BOOTTIME, &t);
    return (int64_t)t.tv_sec * 1000000000LL + t.tv_nsec;
}

/**
 * Logs the change in LMKD state which is used as start/stop boundaries for logging
@@ -32,6 +40,12 @@ stats_write_lmk_state_changed(android_log_context ctx, int32_t code, int32_t sta
        return ret;
    }

    reset_log_context(ctx);

    if ((ret = android_log_write_int64(ctx, getElapsedRealTimeNs())) < 0) {
        return ret;
    }

    if ((ret = android_log_write_int32(ctx, code)) < 0) {
        return ret;
    }
@@ -39,7 +53,8 @@ stats_write_lmk_state_changed(android_log_context ctx, int32_t code, int32_t sta
    if ((ret = android_log_write_int32(ctx, state)) < 0) {
        return ret;
    }
    return ret;

    return write_to_logger(ctx, LOG_ID_STATS);
}

/**
@@ -56,6 +71,11 @@ stats_write_lmk_kill_occurred(android_log_context ctx, int32_t code, int32_t uid
    if (!ctx) {
        return ret;
    }
    reset_log_context(ctx);

    if ((ret = android_log_write_int64(ctx, getElapsedRealTimeNs())) < 0) {
        return ret;
    }

    if ((ret = android_log_write_int32(ctx, code)) < 0) {
        return ret;
@@ -93,8 +113,5 @@ stats_write_lmk_kill_occurred(android_log_context ctx, int32_t code, int32_t uid
        return ret;
    }

    if ((ret = android_log_write_list(ctx, LOG_ID_STATS)) < 0) {
        return ret;
    }
    return ret;
    return write_to_logger(ctx, LOG_ID_STATS);
}
+1 −1
Original line number Diff line number Diff line
@@ -18,11 +18,11 @@
#define _STATSLOG_H_

#include <assert.h>
#include <stats_event_list.h>
#include <stdbool.h>
#include <sys/cdefs.h>

#include <cutils/properties.h>
#include <log/log_event_list.h>

__BEGIN_DECLS