From 1481fe142d36d5f0b36eeebc358d5a8aef7bf28a Mon Sep 17 00:00:00 2001 From: David Chen Date: Mon, 16 Oct 2017 13:16:34 -0700 Subject: Changes pulled data to use Parcel objects. Previously, pulled data was returned as a string. We instead return the data as an array of StatsLogEventWrapper, which encodes using the binary-encoded format liblog uses. StatsD uses the same parsing as for pushed events to convert these. This CL also fixes the parsing of log_msg since the strings were previously emptied before we had a chance to read the values. Note that the cpp-aidl can't support List of Parcelable, so we have to return the results as an array. Test: Manual using the new command in StatsService to print results. Also created a new unit-test by creating a dummy pull code of -1, but this test is deleted since it required creating a fake output in StatsCompanionService. Change-Id: I1cfb9ea081a59292a60e934e8527adc40982ed80 --- libs/services/Android.mk | 3 +- .../include/android/os/StatsLogEventWrapper.h | 47 ++++++++++++++++++++++ libs/services/src/os/StatsLogEventWrapper.cpp | 45 +++++++++++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 libs/services/include/android/os/StatsLogEventWrapper.h create mode 100644 libs/services/src/os/StatsLogEventWrapper.cpp (limited to 'libs') diff --git a/libs/services/Android.mk b/libs/services/Android.mk index cbfd4b3f9f10..d72059aad93f 100644 --- a/libs/services/Android.mk +++ b/libs/services/Android.mk @@ -21,7 +21,8 @@ include $(CLEAR_VARS) LOCAL_MODULE := libservices LOCAL_SRC_FILES := \ ../../core/java/com/android/internal/os/IDropBoxManagerService.aidl \ - src/os/DropBoxManager.cpp + src/os/DropBoxManager.cpp \ + src/os/StatsLogEventWrapper.cpp LOCAL_AIDL_INCLUDES := \ $(LOCAL_PATH)/../../core/java diff --git a/libs/services/include/android/os/StatsLogEventWrapper.h b/libs/services/include/android/os/StatsLogEventWrapper.h new file mode 100644 index 000000000000..255619c6226c --- /dev/null +++ b/libs/services/include/android/os/StatsLogEventWrapper.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2017 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 STATS_LOG_EVENT_WRAPPER_H +#define STATS_LOG_EVENT_WRAPPER_H + +#include +#include +#include +#include +#include + +namespace android { +namespace os { + +// Represents a parcelable object. Only used to send data from Android OS to statsd. +class StatsLogEventWrapper : public android::Parcelable { + public: + StatsLogEventWrapper(); + + StatsLogEventWrapper(StatsLogEventWrapper&& in) = default; + + android::status_t writeToParcel(android::Parcel* out) const; + + android::status_t readFromParcel(const android::Parcel* in); + + // These are public for ease of conversion. + std::vector bytes; +}; +} // Namespace os +} // Namespace android + + +#endif // STATS_LOG_EVENT_WRAPPER_H + diff --git a/libs/services/src/os/StatsLogEventWrapper.cpp b/libs/services/src/os/StatsLogEventWrapper.cpp new file mode 100644 index 000000000000..8b3aa9ab4257 --- /dev/null +++ b/libs/services/src/os/StatsLogEventWrapper.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2017 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 + +#include +#include +#include +#include +#include + +using android::Parcel; +using android::Parcelable; +using android::status_t; +using std::vector; + +namespace android { +namespace os { + +StatsLogEventWrapper::StatsLogEventWrapper(){}; + +status_t StatsLogEventWrapper::writeToParcel(Parcel* out) const { + out->writeByteVector(bytes); + return ::android::NO_ERROR; +}; + +status_t StatsLogEventWrapper::readFromParcel(const Parcel* in) { + in->readByteVector(&bytes); + return ::android::NO_ERROR; +}; + +} // Namespace os +} // Namespace android -- cgit v1.2.3-59-g8ed1b