diff options
| author | Chenjie Yu <cjyu@google.com> | 2018-11-28 19:10:30 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-11-28 19:10:30 +0000 |
| commit | fbc5842d164cdcac704e6ed4262597b9039c86b4 (patch) | |
| tree | 962215ea4ece1a8a06d24f64f6a39e27f46d53a5 /core/java/android | |
| parent | 7bde4e9abefefa6d129fde142334a79e6870be27 (diff) | |
| parent | ce8e4dce609541f90c444f27250a6a341b3f1d23 (diff) | |
Merge "support work chain in pulled atoms"
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/os/StatsLogEventWrapper.java | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/core/java/android/os/StatsLogEventWrapper.java b/core/java/android/os/StatsLogEventWrapper.java index 866bd9a17f41..acb9eac3572c 100644 --- a/core/java/android/os/StatsLogEventWrapper.java +++ b/core/java/android/os/StatsLogEventWrapper.java @@ -43,6 +43,7 @@ public final class StatsLogEventWrapper implements Parcelable { int mTag; long mElapsedTimeNs; long mWallClockTimeNs; + WorkSource mWorkSource = null; public StatsLogEventWrapper(int tag, long elapsedTimeNs, long wallClockTimeNs) { this.mTag = tag; @@ -71,6 +72,17 @@ public final class StatsLogEventWrapper implements Parcelable { }; /** + * Set work source if any. + */ + public void setWorkSource(WorkSource ws) { + if (ws.getWorkChains() == null || ws.getWorkChains().size() == 0) { + Slog.w(TAG, "Empty worksource!"); + return; + } + mWorkSource = ws; + } + + /** * Write a int value. */ public void writeInt(int val) { @@ -119,11 +131,6 @@ public final class StatsLogEventWrapper implements Parcelable { mValues.add(val ? 1 : 0); } - /** - * Writes the stored fields to a byte array. Will first write a new-line character to denote - * END_LIST before writing contents to byte array. - */ - public void writeToParcel(Parcel out, int flags) { if (DEBUG) { Slog.d(TAG, @@ -133,6 +140,34 @@ public final class StatsLogEventWrapper implements Parcelable { out.writeInt(mTag); out.writeLong(mElapsedTimeNs); out.writeLong(mWallClockTimeNs); + if (mWorkSource != null) { + ArrayList<android.os.WorkSource.WorkChain> workChains = mWorkSource.getWorkChains(); + // number of chains + out.writeInt(workChains.size()); + for (int i = 0; i < workChains.size(); i++) { + android.os.WorkSource.WorkChain wc = workChains.get(i); + if (wc.getSize() == 0) { + Slog.w(TAG, "Empty work chain."); + out.writeInt(0); + continue; + } + if (wc.getUids().length != wc.getTags().length + || wc.getUids().length != wc.getSize()) { + Slog.w(TAG, "Malformated work chain."); + out.writeInt(0); + continue; + } + // number of nodes + out.writeInt(wc.getSize()); + for (int j = 0; j < wc.getSize(); j++) { + out.writeInt(wc.getUids()[j]); + out.writeString(wc.getTags()[j] == null ? "" : wc.getTags()[j]); + } + } + } else { + // no chains + out.writeInt(0); + } out.writeInt(mTypes.size()); for (int i = 0; i < mTypes.size(); i++) { out.writeInt(mTypes.get(i)); |
