diff options
| author | 2019-02-14 06:33:01 +0000 | |
|---|---|---|
| committer | 2019-02-14 06:33:01 +0000 | |
| commit | 6ec9efb5e0fcd18782be51a7e53da35619c67210 (patch) | |
| tree | a09ded51e4d27d26009684e4eb1a3380cb70b033 | |
| parent | 3a3ec343d14cb5ff3e50dc8ca77036490c3e1a3e (diff) | |
| parent | 97dbb206de46b5a8aee1542a40937da5357f8b7d (diff) | |
Merge "TrainInfo persist onto disk"
| -rw-r--r-- | cmds/statsd/Android.bp | 1 | ||||
| -rw-r--r-- | cmds/statsd/src/StatsService.cpp | 7 | ||||
| -rw-r--r-- | cmds/statsd/src/external/StatsPullerManager.cpp | 7 | ||||
| -rw-r--r-- | cmds/statsd/src/external/TrainInfoPuller.cpp | 53 | ||||
| -rw-r--r-- | cmds/statsd/src/external/TrainInfoPuller.h | 38 | ||||
| -rw-r--r-- | cmds/statsd/src/logd/LogEvent.cpp | 10 | ||||
| -rw-r--r-- | cmds/statsd/src/logd/LogEvent.h | 8 | ||||
| -rw-r--r-- | cmds/statsd/src/storage/StorageManager.cpp | 2 | ||||
| -rw-r--r-- | cmds/statsd/src/storage/StorageManager.h | 2 | ||||
| -rw-r--r-- | cmds/statsd/tests/storage/StorageManager_test.cpp | 4 | 
10 files changed, 121 insertions, 11 deletions
diff --git a/cmds/statsd/Android.bp b/cmds/statsd/Android.bp index 04ab59218af2..f4086557870d 100644 --- a/cmds/statsd/Android.bp +++ b/cmds/statsd/Android.bp @@ -76,6 +76,7 @@ cc_defaults {          "src/external/SubsystemSleepStatePuller.cpp",          "src/external/PowerStatsPuller.cpp",          "src/external/ResourceHealthManagerPuller.cpp", +        "src/external/TrainInfoPuller.cpp",          "src/external/StatsPullerManager.cpp",          "src/external/puller_util.cpp",          "src/logd/LogEvent.cpp", diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index d23fc62cf816..fb603b9ce163 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -55,9 +55,6 @@ namespace android {  namespace os {  namespace statsd { -const int FIELD_ID_EXPERIMENT_ID = 1; -const int FIELD_ID_EXPERIMENT_ID_MSG = 7; -  constexpr const char* kPermissionDump = "android.permission.DUMP";  constexpr const char* kPermissionUsage = "android.permission.PACKAGE_USAGE_STATS"; @@ -67,6 +64,8 @@ constexpr const char* kOpUsage = "android:get_usage_stats";  // for StatsDataDumpProto  const int FIELD_ID_REPORTS_LIST = 1; +// for TrainInfo experiment id serialization +const int FIELD_ID_EXPERIMENT_ID = 1;  static binder::Status ok() {      return binder::Status::ok(); @@ -1200,12 +1199,10 @@ Status StatsService::sendBinaryPushStateChangedAtom(const android::String16& tra      bool requiresLowLatencyMonitor = options | IStatsManager::FLAG_REQUIRE_LOW_LATENCY_MONITOR;      ProtoOutputStream proto; -    uint64_t protoToken = proto.start(FIELD_TYPE_MESSAGE | FIELD_ID_EXPERIMENT_ID_MSG);      for (const auto& expId : experimentIds) {          proto.write(FIELD_TYPE_INT64 | FIELD_COUNT_REPEATED | FIELD_ID_EXPERIMENT_ID,                      (long long)expId);      } -    proto.end(protoToken);      vector<uint8_t> buffer;      buffer.resize(proto.size()); diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index ed72b2914a34..98f810fd9a2c 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -29,10 +29,11 @@  #include "../statscompanion_util.h"  #include "PowerStatsPuller.h"  #include "ResourceHealthManagerPuller.h" -#include "StatsCompanionServicePuller.h"  #include "StatsCallbackPuller.h" +#include "StatsCompanionServicePuller.h"  #include "StatsPullerManager.h"  #include "SubsystemSleepStatePuller.h" +#include "TrainInfoPuller.h"  #include "statslog.h"  #include <iostream> @@ -152,7 +153,7 @@ std::map<int, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = {                    new StatsCompanionServicePuller(android::util::PROCESS_MEMORY_HIGH_WATER_MARK)}},          // temperature          {android::util::TEMPERATURE, -          {.puller = new StatsCompanionServicePuller(android::util::TEMPERATURE)}}, +         {.puller = new StatsCompanionServicePuller(android::util::TEMPERATURE)}},          // binder_calls          {android::util::BINDER_CALLS,           {.additiveFields = {4, 5, 6, 8, 12}, @@ -231,6 +232,8 @@ std::map<int, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = {          // PermissionState.          {android::util::DANGEROUS_PERMISSION_STATE,           {.puller = new StatsCompanionServicePuller(android::util::DANGEROUS_PERMISSION_STATE)}}, +        // TrainInfo. +        {android::util::TRAIN_INFO, {.puller = new TrainInfoPuller()}},  };  StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) { diff --git a/cmds/statsd/src/external/TrainInfoPuller.cpp b/cmds/statsd/src/external/TrainInfoPuller.cpp new file mode 100644 index 000000000000..9d0924297912 --- /dev/null +++ b/cmds/statsd/src/external/TrainInfoPuller.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 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. + */ + +#define DEBUG false  // STOPSHIP if true +#include "Log.h" + +#include "external/StatsPuller.h" + +#include "TrainInfoPuller.h" +#include "logd/LogEvent.h" +#include "stats_log_util.h" +#include "statslog.h" +#include "storage/StorageManager.h" + +using std::make_shared; +using std::shared_ptr; + +namespace android { +namespace os { +namespace statsd { + +TrainInfoPuller::TrainInfoPuller() : +    StatsPuller(android::util::TRAIN_INFO) { +} + +bool TrainInfoPuller::PullInternal(vector<shared_ptr<LogEvent>>* data) { +    InstallTrainInfo trainInfo; +    bool ret = StorageManager::readTrainInfo(trainInfo); +    if (!ret) { +        ALOGW("Failed to read train info."); +        return false; +    } +    auto event = make_shared<LogEvent>(getWallClockNs(), getElapsedRealtimeNs(), trainInfo); +    data->push_back(event); +    return true; +} + +}  // namespace statsd +}  // namespace os +}  // namespace android diff --git a/cmds/statsd/src/external/TrainInfoPuller.h b/cmds/statsd/src/external/TrainInfoPuller.h new file mode 100644 index 000000000000..615d02351fd3 --- /dev/null +++ b/cmds/statsd/src/external/TrainInfoPuller.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2019 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. + */ + +#pragma once + +#include "StatsPuller.h" + +namespace android { +namespace os { +namespace statsd { + +/** + * Reads train info from disk. + */ +class TrainInfoPuller : public StatsPuller { + public: +  TrainInfoPuller(); + + private: +  bool PullInternal(vector<std::shared_ptr<LogEvent>>* data) override; +}; + +}  // namespace statsd +}  // namespace os +}  // namespace android diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp index 99ebc965f5a8..dec36b54a1ce 100644 --- a/cmds/statsd/src/logd/LogEvent.cpp +++ b/cmds/statsd/src/logd/LogEvent.cpp @@ -361,6 +361,16 @@ LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,      }  } +LogEvent::LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, +                   const InstallTrainInfo& trainInfo) { +    mLogdTimestampNs = wallClockTimestampNs; +    mElapsedTimestampNs = elapsedTimestampNs; +    mTagId = android::util::TRAIN_INFO; +    mValues.push_back( +            FieldValue(Field(mTagId, getSimpleField(1)), Value(trainInfo.trainVersionCode))); +    mValues.push_back(FieldValue(Field(mTagId, getSimpleField(2)), Value(trainInfo.experimentIds))); +} +  LogEvent::LogEvent(int32_t tagId, int64_t timestampNs) : LogEvent(tagId, timestampNs, 0) {}  LogEvent::LogEvent(int32_t tagId, int64_t timestampNs, int32_t uid) { diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h index 6b5fa56d4c8b..111a619760df 100644 --- a/cmds/statsd/src/logd/LogEvent.h +++ b/cmds/statsd/src/logd/LogEvent.h @@ -55,6 +55,11 @@ struct AttributionNodeInternal {      int32_t mUid;      std::string mTag;  }; + +struct InstallTrainInfo { +    int64_t trainVersionCode; +    std::vector<uint8_t> experimentIds; +};  /**   * Wrapper for the log_msg structure.   */ @@ -132,6 +137,9 @@ public:      explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs,                        const VendorAtom& vendorAtom); +    explicit LogEvent(int64_t wallClockTimestampNs, int64_t elapsedTimestampNs, +                      const InstallTrainInfo& installTrainInfo); +      ~LogEvent();      /** diff --git a/cmds/statsd/src/storage/StorageManager.cpp b/cmds/statsd/src/storage/StorageManager.cpp index fe465cefd0f4..165e57c73743 100644 --- a/cmds/statsd/src/storage/StorageManager.cpp +++ b/cmds/statsd/src/storage/StorageManager.cpp @@ -127,7 +127,7 @@ bool StorageManager::writeTrainInfo(int64_t trainVersionCode,      return true;  } -bool StorageManager::readTrainInfo(TrainInfo& trainInfo) { +bool StorageManager::readTrainInfo(InstallTrainInfo& trainInfo) {      std::lock_guard<std::mutex> lock(sTrainInfoMutex);      unique_ptr<DIR, decltype(&closedir)> dir(opendir(TRAIN_INFO_DIR), closedir); diff --git a/cmds/statsd/src/storage/StorageManager.h b/cmds/statsd/src/storage/StorageManager.h index d9eca9f5cdc2..d6df8674e59b 100644 --- a/cmds/statsd/src/storage/StorageManager.h +++ b/cmds/statsd/src/storage/StorageManager.h @@ -49,7 +49,7 @@ public:      /**       * Reads train info.       */ -    static bool readTrainInfo(TrainInfo& trainInfo); +    static bool readTrainInfo(InstallTrainInfo& trainInfo);      /**       * Reads the file content to the buffer. diff --git a/cmds/statsd/tests/storage/StorageManager_test.cpp b/cmds/statsd/tests/storage/StorageManager_test.cpp index ce957a3ec771..f66de0518f80 100644 --- a/cmds/statsd/tests/storage/StorageManager_test.cpp +++ b/cmds/statsd/tests/storage/StorageManager_test.cpp @@ -30,14 +30,14 @@ using std::vector;  using testing::Contains;  TEST(StorageManagerTest, TrainInfoReadWriteTest) { -    TrainInfo trainInfo; +    InstallTrainInfo trainInfo;      trainInfo.trainVersionCode = 12345;      const char* expIds = "test_ids";      trainInfo.experimentIds.assign(expIds, expIds + strlen(expIds));      StorageManager::writeTrainInfo(trainInfo.trainVersionCode, trainInfo.experimentIds); -    TrainInfo result; +    InstallTrainInfo result;      StorageManager::readTrainInfo(result);      EXPECT_EQ(trainInfo.trainVersionCode, result.trainVersionCode);      EXPECT_EQ(trainInfo.experimentIds.size(), result.experimentIds.size());  |