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

Commit d166b035 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Adding ability to add configs via adb command-line. The input must be...

Merge "Adding ability to add configs via adb command-line. The input must be in serialized binary format. Also fixes small issue in build rule related to proto lib."
parents a959fefc 0656b7a1
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-proto-files-under, src)

LOCAL_PROTOC_FLAGS :=
LOCAL_PROTOC_OPTIMIZE_TYPE := lite
LOCAL_PROTOC_OPTIMIZE_TYPE := lite-static

include $(BUILD_STATIC_LIBRARY)

@@ -86,6 +86,7 @@ LOCAL_SHARED_LIBRARIES := \
        libutils \
        libservices \
        libandroidfw \
        libprotobuf-cpp-lite \

LOCAL_MODULE_CLASS := EXECUTABLES

@@ -131,6 +132,7 @@ LOCAL_SHARED_LIBRARIES := \
    libcutils \
    liblog \
    libselinux \
    libutils
    libutils \
    libprotobuf-cpp-lite \

include $(BUILD_NATIVE_TEST)
+7 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@
#include <log/event_tag_map.h>
#include <log/logprint.h>
#include <utils/Errors.h>

#include <cutils/log.h>
#include <frameworks/base/cmds/statsd/src/stats_log.pb.h>

using namespace android;
@@ -66,3 +66,9 @@ StatsLogProcessor::OnLogEvent(const log_msg& msg)
    }
}

void
StatsLogProcessor::UpdateConfig(const int config_source, StatsdConfig config)
{
    m_configs[config_source] = config;
    ALOGD("Updated configuration for source %i", config_source);
}
 No newline at end of file
+12 −0
Original line number Diff line number Diff line
@@ -19,8 +19,12 @@
#include "LogReader.h"
#include "DropboxWriter.h"

#include <frameworks/base/cmds/statsd/src/statsd_config.pb.h>
#include <log/logprint.h>
#include <stdio.h>
#include <unordered_map>

using android::os::statsd::StatsdConfig;

class StatsLogProcessor : public LogListener
{
@@ -30,6 +34,8 @@ public:

    virtual void OnLogEvent(const log_msg& msg);

    virtual void UpdateConfig(const int config_source, StatsdConfig config);

private:
    /**
     * Numeric to string tag name mapping.
@@ -42,5 +48,11 @@ private:
    AndroidLogFormat* m_format;

    DropboxWriter m_dropbox_writer;

    /**
     * Configs that have been specified, keyed by the source. This allows us to over-ride the config
     * from a source later.
     */
    std::unordered_map<int, StatsdConfig> m_configs;
};
#endif //STATS_LOG_PROCESSOR_H
+32 −0
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@
#include "StatsService.h"
#include "DropboxReader.h"

#include <android-base/file.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
#include <cutils/log.h>
#include <frameworks/base/cmds/statsd/src/statsd_config.pb.h>
#include <private/android_filesystem_config.h>
#include <utils/Looper.h>
#include <utils/String16.h>
@@ -31,6 +33,7 @@
#include <stdlib.h>

using namespace android;
using android::os::statsd::StatsdConfig;

// ================================================================================
StatsService::StatsService(const sp<Looper>& handlerLooper)
@@ -42,6 +45,13 @@ StatsService::~StatsService()
{
}

status_t
StatsService::setProcessor(const sp<StatsLogProcessor>& main_processor) {
    m_processor = main_processor;
    ALOGD("stats service set to processor %p", m_processor.get());
    return NO_ERROR;
}

// Implement our own because the default binder implementation isn't
// properly handling SHELL_COMMAND_TRANSACTION
status_t
@@ -124,12 +134,33 @@ StatsService::command(FILE* in, FILE* out, FILE* err, Vector<String8>& args)
        if (!args[0].compare(String8("print-stats-log")) && args.size() > 1) {
            return doPrintStatsLog(out, args);
        }
        if (!args[0].compare(String8("config"))) {
            return doLoadConfig(in);
        }
    }

    printCmdHelp(out);
    return NO_ERROR;
}

status_t
StatsService::doLoadConfig(FILE* in)
{
    string content;
    if (!android::base::ReadFdToString(fileno(in), &content)) {
        return UNKNOWN_ERROR;
    }
    StatsdConfig config;
    if (config.ParseFromString(content)) {
        ALOGD("Config parsed from command line: %s", config.SerializeAsString().c_str());
        m_processor->UpdateConfig(0, config);
        return NO_ERROR;
    } else {
        ALOGD("Config failed to be parsed");
        return UNKNOWN_ERROR;
    }
}

Status
StatsService::systemRunning()
{
@@ -158,4 +189,5 @@ void
StatsService::printCmdHelp(FILE* out) {
    fprintf(out, "Usage:\n");
    fprintf(out, "\t print-stats-log [tag_required] [timestamp_nsec_optional]\n");
    fprintf(out, "\t config\t Loads a new config from command-line (must be proto in wire-encoded format).\n");
}
+8 −1
Original line number Diff line number Diff line
@@ -17,9 +17,12 @@
#ifndef STATS_SERVICE_H
#define STATS_SERVICE_H

#include "StatsLogProcessor.h"

#include <android/os/BnStatsManager.h>
#include <binder/IResultReceiver.h>
#include <binder/IShellCallback.h>
#include <frameworks/base/cmds/statsd/src/statsd_config.pb.h>
#include <utils/Looper.h>

#include <deque>
@@ -30,7 +33,7 @@ using namespace android::base;
using namespace android::binder;
using namespace android::os;
using namespace std;

using android::os::statsd::StatsdConfig;

// ================================================================================
class StatsService : public BnStatsManager {
@@ -46,9 +49,13 @@ public:

    virtual Status systemRunning();

    virtual status_t setProcessor(const sp<StatsLogProcessor>& main_processor);

private:
    sp<StatsLogProcessor> m_processor; // Reference to the processor for updating configs.
    status_t doPrintStatsLog(FILE* out, const Vector<String8>& args);
    void printCmdHelp(FILE* out);
    status_t doLoadConfig(FILE* in);
};

#endif // STATS_SERVICE_H
Loading