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

Commit cc3d37c0 authored by Yao Chen's avatar Yao Chen Committed by android-build-merger
Browse files

Merge "Add a function to allow statslog failure."

am: ed673c96

Change-Id: I60f2175ebc964457279671042d7bb9807e0d49ef
parents 401e23e0 ed673c96
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ extern "C" {
#endif
void reset_log_context(android_log_context ctx);
int write_to_logger(android_log_context context, log_id_t id);
void note_log_drop();

#ifdef __cplusplus
}
+4 −0
Original line number Diff line number Diff line
@@ -119,6 +119,10 @@ int write_to_logger(android_log_context ctx, log_id_t id) {
    return retValue;
}

void note_log_drop() {
    statsdLoggerWrite.noteDrop();
}

/* log_init_lock assumed */
static int __write_to_statsd_initialize_locked() {
    if (!statsdLoggerWrite.open || ((*statsdLoggerWrite.open)() < 0)) {
+13 −9
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#define min(x, y) ((y) ^ (((x) ^ (y)) & -((x) < (y))))

static pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER;
static atomic_int dropped = 0;

void statsd_writer_init_lock() {
    /*
@@ -59,6 +60,7 @@ static int statsdAvailable();
static int statsdOpen();
static void statsdClose();
static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr);
static void statsdNoteDrop();

struct android_log_transport_write statsdLoggerWrite = {
        .name = "statsd",
@@ -67,6 +69,7 @@ struct android_log_transport_write statsdLoggerWrite = {
        .open = statsdOpen,
        .close = statsdClose,
        .write = statsdWrite,
        .noteDrop = statsdNoteDrop,
};

/* log_init_lock assumed */
@@ -131,6 +134,10 @@ static int statsdAvailable() {
    return 1;
}

static void statsdNoteDrop() {
    atomic_fetch_add_explicit(&dropped, 1, memory_order_relaxed);
}

static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) {
    ssize_t ret;
    int sock;
@@ -138,7 +145,6 @@ static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) {
    struct iovec newVec[nr + headerLength];
    android_log_header_t header;
    size_t i, payloadSize;
    static atomic_int dropped;

    sock = atomic_load(&statsdLoggerWrite.sock);
    if (sock < 0) switch (sock) {
@@ -252,8 +258,6 @@ static int statsdWrite(struct timespec* ts, struct iovec* vec, size_t nr) {

    if (ret > (ssize_t)sizeof(header)) {
        ret -= sizeof(header);
    } else if (ret == -EAGAIN) {
        atomic_fetch_add_explicit(&dropped, 1, memory_order_relaxed);
    }

    return ret;
+2 −0
Original line number Diff line number Diff line
@@ -38,6 +38,8 @@ struct android_log_transport_write {
    void (*close)();    /* free up resources */
    /* write log to transport, returns number of bytes propagated, or -errno */
    int (*write)(struct timespec* ts, struct iovec* vec, size_t nr);
    /* note one log drop */
    void (*noteDrop)();
};

#endif  // ANDROID_STATS_LOG_STATS_WRITER_H