diff --git a/libstats/pull/Android.bp b/libstats/pull/Android.bp index 9772da164..72eb0e969 100644 --- a/libstats/pull/Android.bp +++ b/libstats/pull/Android.bp @@ -19,6 +19,9 @@ // ========================================================== cc_library_shared { name: "libstatspull", + aidl: { + include_dirs: ["frameworks/base/core/java"], + }, srcs: [ ":statsd_aidl", "stats_pull_atom_callback.cpp", diff --git a/libstats/pull/stats_pull_atom_callback.cpp b/libstats/pull/stats_pull_atom_callback.cpp index f61d64627..011ab7698 100644 --- a/libstats/pull/stats_pull_atom_callback.cpp +++ b/libstats/pull/stats_pull_atom_callback.cpp @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include "include/stats_pull_atom_callback.h" @@ -56,9 +56,21 @@ class StatsPullAtomCallbackInternal : public android::os::BnPullAtomCallback { const ::android::sp<::android::os::IPullAtomResultReceiver>& resultReceiver) override { pulled_stats_event_list statsEventList; bool success = (*mCallback)(atomTag, &statsEventList, mCookie); - std::vector output; - // TODO convert stats_event into parcelable stats_event. - resultReceiver->pullFinished(atomTag, success, output); + + // Convert stats_events into StatsEventParcels. + std::vector parcels; + for (int i = 0; i < statsEventList.data.size(); i++) { + size_t size; + uint8_t* buffer = stats_event_get_buffer(statsEventList.data[i], &size); + + android::util::StatsEventParcel p; + // vector.assign() creates a copy, but this is inevitable unless + // stats_event.h/c uses a vector as opposed to a buffer. + p.buffer.assign(buffer, buffer + size); + parcels.push_back(std::move(p)); + } + + resultReceiver->pullFinished(atomTag, success, parcels); for (int i = 0; i < statsEventList.data.size(); i++) { stats_event_release(statsEventList.data[i]); }