Add logic for recording dex files use on disk

Add PackageDexUsage to handle the I/O operations of dex usage data. It
is responsible to encode, save and load dex

Test: runtest -x .../PackageDexUsageTests.java

Bug: 32871170
Change-Id: I2acc5430080a7e937c798513d8959ab631decfd9
diff --git a/services/core/java/com/android/server/pm/AbstractStatsBase.java b/services/core/java/com/android/server/pm/AbstractStatsBase.java
index 612c476..0053f58 100644
--- a/services/core/java/com/android/server/pm/AbstractStatsBase.java
+++ b/services/core/java/com/android/server/pm/AbstractStatsBase.java
@@ -60,12 +60,12 @@
         return new AtomicFile(fname);
     }
 
-    void writeNow(final T data) {
+    protected void writeNow(final T data) {
         writeImpl(data);
         mLastTimeWritten.set(SystemClock.elapsedRealtime());
     }
 
-    boolean maybeWriteAsync(final T data) {
+    protected boolean maybeWriteAsync(final T data) {
         if (SystemClock.elapsedRealtime() - mLastTimeWritten.get() < WRITE_INTERVAL_MS
             && !PackageManagerService.DEBUG_DEXOPT) {
             return false;
@@ -105,7 +105,7 @@
 
     protected abstract void writeInternal(T data);
 
-    void read(T data) {
+    protected void read(T data) {
         if (mLock) {
             synchronized (data) {
                 synchronized (mFileLock) {