diff options
13 files changed, 71 insertions, 62 deletions
diff --git a/Android.bp b/Android.bp index 9426a9c503ed..3dd8a0a66b14 100644 --- a/Android.bp +++ b/Android.bp @@ -253,6 +253,8 @@ filegroup { ":libcamera_client_aidl", ":libcamera_client_framework_aidl", ":libupdate_engine_aidl", + // TODO: this needs to be removed when statsd-framework.jar is separated out + ":statsd_aidl", ":storaged_aidl", ":vold_aidl", @@ -413,18 +415,6 @@ filegroup { } filegroup { - name: "statsd_aidl", - srcs: [ - "core/java/android/os/IPullAtomCallback.aidl", - "core/java/android/os/IPullAtomResultReceiver.aidl", - "core/java/android/os/IStatsCompanionService.aidl", - "core/java/android/os/IStatsManager.aidl", - "core/java/android/os/IStatsPullerCallback.aidl", - ], - path: "core/java", -} - -filegroup { name: "libvibrator_aidl", srcs: [ "core/java/android/os/IExternalVibrationController.aidl", diff --git a/apex/statsd/aidl/Android.bp b/apex/statsd/aidl/Android.bp new file mode 100644 index 000000000000..e6ca544c04be --- /dev/null +++ b/apex/statsd/aidl/Android.bp @@ -0,0 +1,35 @@ +// +// 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. +// + +// TODO(b/145815909): move StatsDimensionsValue.aidl and StatsLogEventWrapper.aidl here +filegroup { + name: "statsd_aidl", + srcs: ["**/*.aidl"], +} + +// This library is currently unused +aidl_interface { + name: "stats-event-parcel-aidl", + srcs: ["android/util/StatsEventParcel.aidl"], + backend: { + java: { + sdk_version: "28", + }, + cpp: { + enabled: false, + } + } +} diff --git a/core/java/android/os/IPullAtomCallback.aidl b/apex/statsd/aidl/android/os/IPullAtomCallback.aidl index 88d3c3e46ff5..88d3c3e46ff5 100644 --- a/core/java/android/os/IPullAtomCallback.aidl +++ b/apex/statsd/aidl/android/os/IPullAtomCallback.aidl diff --git a/core/java/android/os/IPullAtomResultReceiver.aidl b/apex/statsd/aidl/android/os/IPullAtomResultReceiver.aidl index bfb35ff0c9d1..00d026e25df3 100644 --- a/core/java/android/os/IPullAtomResultReceiver.aidl +++ b/apex/statsd/aidl/android/os/IPullAtomResultReceiver.aidl @@ -16,7 +16,7 @@ package android.os; -import android.util.StatsEvent; +import android.util.StatsEventParcel; /** * Binder interface to pull atoms for the stats service. @@ -27,6 +27,6 @@ interface IPullAtomResultReceiver { /** * Indicate that a pull request for an atom is complete. */ - oneway void pullFinished(int atomTag, boolean success, in StatsEvent[] output); + oneway void pullFinished(int atomTag, boolean success, in StatsEventParcel[] output); } diff --git a/core/java/android/os/IStatsCompanionService.aidl b/apex/statsd/aidl/android/os/IStatsCompanionService.aidl index 22a25374e064..22a25374e064 100644 --- a/core/java/android/os/IStatsCompanionService.aidl +++ b/apex/statsd/aidl/android/os/IStatsCompanionService.aidl diff --git a/core/java/android/os/IStatsManager.aidl b/apex/statsd/aidl/android/os/IStatsManager.aidl index 5ebb9f2e4e90..5ebb9f2e4e90 100644 --- a/core/java/android/os/IStatsManager.aidl +++ b/apex/statsd/aidl/android/os/IStatsManager.aidl diff --git a/core/java/android/os/IStatsPullerCallback.aidl b/apex/statsd/aidl/android/os/IStatsPullerCallback.aidl index c3e1e55dde06..c3e1e55dde06 100644 --- a/core/java/android/os/IStatsPullerCallback.aidl +++ b/apex/statsd/aidl/android/os/IStatsPullerCallback.aidl diff --git a/apex/statsd/aidl/android/util/StatsEventParcel.aidl b/apex/statsd/aidl/android/util/StatsEventParcel.aidl new file mode 100644 index 000000000000..add8bfb47b1a --- /dev/null +++ b/apex/statsd/aidl/android/util/StatsEventParcel.aidl @@ -0,0 +1,8 @@ +package android.util; + +/** + * @hide + */ +parcelable StatsEventParcel { + byte[] buffer; +} diff --git a/cmds/statsd/src/external/PullResultReceiver.cpp b/cmds/statsd/src/external/PullResultReceiver.cpp index 6bd05452f3b0..6b6fe7d9617f 100644 --- a/cmds/statsd/src/external/PullResultReceiver.cpp +++ b/cmds/statsd/src/external/PullResultReceiver.cpp @@ -25,12 +25,13 @@ namespace os { namespace statsd { PullResultReceiver::PullResultReceiver( - std::function<void(int32_t, bool, const vector<android::util::StatsEvent>&)> pullFinishCb) + std::function<void(int32_t, bool, const vector<android::util::StatsEventParcel>&)> + pullFinishCb) : pullFinishCallback(std::move(pullFinishCb)) { } Status PullResultReceiver::pullFinished(int32_t atomTag, bool success, - const vector<StatsEvent>& output) { + const vector<StatsEventParcel>& output) { pullFinishCallback(atomTag, success, output); return Status::ok(); } @@ -40,4 +41,4 @@ PullResultReceiver::~PullResultReceiver() { } // namespace statsd } // namespace os -} // namespace android
\ No newline at end of file +} // namespace android diff --git a/cmds/statsd/src/external/PullResultReceiver.h b/cmds/statsd/src/external/PullResultReceiver.h index f731f778a337..17d06e4ff4db 100644 --- a/cmds/statsd/src/external/PullResultReceiver.h +++ b/cmds/statsd/src/external/PullResultReceiver.h @@ -24,7 +24,7 @@ namespace statsd { class PullResultReceiver : public BnPullAtomResultReceiver { public: - PullResultReceiver(function<void(int32_t, bool, const vector<android::util::StatsEvent>&)> + PullResultReceiver(function<void(int32_t, bool, const vector<android::util::StatsEventParcel>&)> pullFinishCallback); ~PullResultReceiver(); @@ -32,10 +32,11 @@ public: * Binder call for finishing a pull. */ binder::Status pullFinished(int32_t atomTag, bool success, - const vector<android::util::StatsEvent>& output) override; + const vector<android::util::StatsEventParcel>& output) override; private: - function<void(int32_t, bool, const vector<android::util::StatsEvent>&)> pullFinishCallback; + function<void(int32_t, bool, const vector<android::util::StatsEventParcel>&)> + pullFinishCallback; }; } // namespace statsd diff --git a/cmds/statsd/src/external/StatsCallbackPuller.cpp b/cmds/statsd/src/external/StatsCallbackPuller.cpp index 92db68477dbd..f5b1e7f78736 100644 --- a/cmds/statsd/src/external/StatsCallbackPuller.cpp +++ b/cmds/statsd/src/external/StatsCallbackPuller.cpp @@ -20,7 +20,7 @@ #include "StatsCallbackPuller.h" #include <android/os/IPullAtomCallback.h> -#include <android/util/StatsEvent.h> +#include <android/util/StatsEventParcel.h> #include "PullResultReceiver.h" #include "StatsPullerManager.h" @@ -57,13 +57,19 @@ bool StatsCallbackPuller::PullInternal(vector<shared_ptr<LogEvent>>* data) { sp<PullResultReceiver> resultReceiver = new PullResultReceiver( [cv_mutex, cv, pullFinish, pullSuccess, sharedData]( - int32_t atomTag, bool success, const vector<StatsEvent>& output) { + int32_t atomTag, bool success, const vector<StatsEventParcel>& output) { // This is the result of the pull, executing in a statsd binder thread. // The pull could have taken a long time, and we should only modify // data (the output param) if the pointer is in scope and the pull did not time out. { lock_guard<mutex> lk(*cv_mutex); - // TODO: fill the shared vector of LogEvents once StatsEvent is complete. + for (const StatsEventParcel& parcel: output) { + shared_ptr<LogEvent> event = + make_shared<LogEvent>(const_cast<uint8_t*>(parcel.buffer.data()), + parcel.buffer.size(), + /*uid=*/ -1); + sharedData->push_back(event); + } *pullSuccess = success; *pullFinish = true; } diff --git a/core/java/android/app/StatsManager.java b/core/java/android/app/StatsManager.java index 2ef05105825a..90cd51f8649f 100644 --- a/core/java/android/app/StatsManager.java +++ b/core/java/android/app/StatsManager.java @@ -34,6 +34,7 @@ import android.os.ServiceManager; import android.util.AndroidException; import android.util.Slog; import android.util.StatsEvent; +import android.util.StatsEventParcel; import com.android.internal.annotations.GuardedBy; @@ -540,10 +541,12 @@ public final class StatsManager { mExecutor.execute(() -> { List<StatsEvent> data = new ArrayList<>(); boolean success = mCallback.onPullAtom(atomTag, data); - StatsEvent[] arr = new StatsEvent[data.size()]; - arr = data.toArray(arr); + StatsEventParcel[] parcels = new StatsEventParcel[data.size()]; + for (int i = 0; i < data.size(); i++) { + parcels[i].buffer = data.get(i).getBytes(); + } try { - resultReceiver.pullFinished(atomTag, success, arr); + resultReceiver.pullFinished(atomTag, success, parcels); } catch (RemoteException e) { Slog.w(TAG, "StatsPullResultReceiver failed for tag " + mAtomId); } diff --git a/core/java/android/util/StatsEvent.java b/core/java/android/util/StatsEvent.java index 0a4069d15706..7e7164042781 100644 --- a/core/java/android/util/StatsEvent.java +++ b/core/java/android/util/StatsEvent.java @@ -20,8 +20,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import android.annotation.NonNull; import android.annotation.Nullable; -import android.os.Parcel; -import android.os.Parcelable; import android.os.SystemClock; import com.android.internal.annotations.GuardedBy; @@ -44,7 +42,7 @@ import com.android.internal.annotations.VisibleForTesting; * </pre> * @hide **/ -public final class StatsEvent implements Parcelable { +public final class StatsEvent { // Type Ids. /** * @hide @@ -265,39 +263,6 @@ public final class StatsEvent implements Parcelable { } /** - * Boilerplate for Parcel. - */ - public static final @NonNull Parcelable.Creator<StatsEvent> CREATOR = - new Parcelable.Creator<StatsEvent>() { - public StatsEvent createFromParcel(Parcel in) { - // Purposefully leaving this method not implemented. - throw new RuntimeException("Not implemented"); - } - - public StatsEvent[] newArray(int size) { - // Purposefully leaving this method not implemented. - throw new RuntimeException("Not implemented"); - } - }; - - /** - * Boilerplate for Parcel. - */ - public void writeToParcel(Parcel out, int flags) { - out.writeInt(mAtomId); - out.writeInt(getNumBytes()); - out.writeByteArray(getBytes()); - } - - /** - * Boilerplate for Parcel. - */ - public int describeContents() { - return 0; - } - - - /** * Builder for constructing a StatsEvent object. * * <p>This class defines and encapsulates the socket encoding for the buffer. |