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

Commit 018a96d0 authored by Mark Salyzyn's avatar Mark Salyzyn Committed by Dan Willemsen
Browse files

liblog: split out transports into separate files

Create config_logger, logger and logger_read to house the log
interfaces. Add fake_logger, logd_logger and pmsg_logger to
house the write and read transports. Allows for an easier and
direct path to add new transports to the library.

SideEffects: None, logger benchmark performance unaffected

Bug: 27176738
Bug: 27405083
Change-Id: I01b38637334a5242905c8c89f6ab0a92e2540008
parent 80b1b188
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -15,20 +15,29 @@
//

liblog_sources = [
    "logd_write.c",
    "log_event_list.c",
    "log_event_write.c",
    "logger_write.c",
    "config_write.c",
    "logger_name.c",
    "logger_lock.c",
]
liblog_host_sources = [
    "fake_log_device.c",
    //"event.logtags",
    "fake_writer.c",
]
liblog_target_sources = [
    "event_tag_map.c",
    "config_read.c",
    "log_time.cpp",
    "log_is_loggable.c",
    "logprint.c",
    "log_read.c",
    "pmsg_reader.c",
    "pmsg_writer.c",
    "logd_reader.c",
    "logd_writer.c",
    "logger_read.c",
]

// Shared and static library for host and device
+6 −2
Original line number Diff line number Diff line
@@ -24,10 +24,14 @@ include $(CLEAR_VARS)
# so make sure we do not regret hard-coding it as follows:
liblog_cflags := -DLIBLOG_LOG_TAG=1005

liblog_sources := logd_write.c log_event_list.c log_event_write.c
liblog_sources := log_event_list.c log_event_write.c logger_write.c
liblog_sources += config_write.c logger_name.c logger_lock.c
liblog_host_sources := $(liblog_sources) fake_log_device.c event.logtags
liblog_host_sources += fake_writer.c
liblog_target_sources := $(liblog_sources) event_tag_map.c
liblog_target_sources += log_time.cpp log_is_loggable.c logprint.c log_read.c
liblog_target_sources += config_read.c log_time.cpp log_is_loggable.c logprint.c
liblog_target_sources += pmsg_reader.c pmsg_writer.c
liblog_target_sources += logd_reader.c logd_writer.c logger_read.c

# Shared and static library for host
# ========================================================

liblog/config_read.c

0 → 100644
+62 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "config_read.h"
#include "logger.h"

LIBLOG_HIDDEN struct listnode __android_log_transport_read =
    { &__android_log_transport_read, &__android_log_transport_read };
LIBLOG_HIDDEN struct listnode __android_log_persist_read =
    { &__android_log_persist_read, &__android_log_persist_read };

static void __android_log_add_transport(
        struct listnode *list, struct android_log_transport_read *transport) {
    size_t i;

    /* Try to keep one functioning transport for each log buffer id */
    for (i = LOG_ID_MIN; i < LOG_ID_MAX; i++) {
        struct android_log_transport_read *transp;

        if (list_empty(list)) {
            if (!transport->available || ((*transport->available)(i) >= 0)) {
                list_add_tail(list, &transport->node);
                return;
            }
        } else {
            read_transport_for_each(transp, list) {
                if (!transp->available) {
                    return;
                }
                if (((*transp->available)(i) < 0) &&
                        (!transport->available ||
                            ((*transport->available)(i) >= 0))) {
                    list_add_tail(list, &transport->node);
                    return;
                }
            }
        }
    }
}

LIBLOG_HIDDEN void __android_log_config_read() {
#if (FAKE_LOG_DEVICE == 0)
    extern struct android_log_transport_read logdLoggerRead;
    extern struct android_log_transport_read pmsgLoggerRead;

    __android_log_add_transport(&__android_log_transport_read, &logdLoggerRead);
    __android_log_add_transport(&__android_log_persist_read, &pmsgLoggerRead);
#endif
}

liblog/config_read.h

0 → 100644
+50 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _LIBLOG_CONFIG_READ_H__
#define _LIBLOG_CONFIG_READ_H__

#include <cutils/list.h>

#include "log_portability.h"

__BEGIN_DECLS

extern LIBLOG_HIDDEN struct listnode __android_log_transport_read;
extern LIBLOG_HIDDEN struct listnode __android_log_persist_read;

#define read_transport_for_each(transp, transports)                         \
    for (transp = node_to_item((transports)->next,                          \
                               struct android_log_transport_read, node);    \
         (transp != node_to_item(transports,                                \
                                 struct android_log_transport_read, node)); \
         transp = node_to_item(transp->node.next,                           \
                               struct android_log_transport_read, node))    \

#define read_transport_for_each_safe(transp, n, transports)                 \
    for (transp = node_to_item((transports)->next,                          \
                               struct android_log_transport_read, node),    \
         n = transp->node.next;                                             \
         (transp != node_to_item(transports,                                \
                                 struct android_log_transport_read, node)); \
         transp = node_to_item(n, struct android_log_transport_read, node), \
         n = transp->node.next)

LIBLOG_HIDDEN void __android_log_config_read();

__END_DECLS

#endif /* _LIBLOG_CONFIG_READ_H__ */

liblog/config_write.c

0 → 100644
+66 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "config_write.h"
#include "logger.h"

LIBLOG_HIDDEN struct listnode __android_log_transport_write =
    { &__android_log_transport_write, &__android_log_transport_write };
LIBLOG_HIDDEN struct listnode __android_log_persist_write =
    { &__android_log_persist_write, &__android_log_persist_write};

static void __android_log_add_transport(
        struct listnode *list, struct android_log_transport_write *transport) {
    size_t i;

    /* Try to keep one functioning transport for each log buffer id */
    for (i = LOG_ID_MIN; i < LOG_ID_MAX; i++) {
        struct android_log_transport_write *transp;

        if (list_empty(list)) {
            if (!transport->available || ((*transport->available)(i) >= 0)) {
                list_add_tail(list, &transport->node);
                return;
            }
        } else {
            write_transport_for_each(transp, list) {
                if (!transp->available) {
                    return;
                }
                if (((*transp->available)(i) < 0) &&
                        (!transport->available ||
                            ((*transport->available)(i) >= 0))) {
                    list_add_tail(list, &transport->node);
                    return;
                }
            }
        }
    }
}

LIBLOG_HIDDEN void __android_log_config_write() {
#if (FAKE_LOG_DEVICE == 0)
    extern struct android_log_transport_write logdLoggerWrite;
    extern struct android_log_transport_write pmsgLoggerWrite;

    __android_log_add_transport(&__android_log_transport_write, &logdLoggerWrite);
    __android_log_add_transport(&__android_log_persist_write, &pmsgLoggerWrite);
#else
    extern struct android_log_transport_write fakeLoggerWrite;

    __android_log_add_transport(&__android_log_transport_write, &fakeLoggerWrite);
#endif
}
Loading