Revert "[res] Better modification time resolution in Idmap"

This reverts commit fff1d48f432741160019a9266728097f10bd2189.

Reason for revert: <Potential culprit for b/365676142  - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.>

Change-Id: I6b0a0bd67a14e4738a8cd64be2214840d02eee3f
diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp
index 5955915..e618245 100644
--- a/libs/androidfw/AssetManager.cpp
+++ b/libs/androidfw/AssetManager.cpp
@@ -1420,20 +1420,18 @@
 Mutex AssetManager::SharedZip::gLock;
 DefaultKeyedVector<String8, wp<AssetManager::SharedZip> > AssetManager::SharedZip::gOpen;
 
-AssetManager::SharedZip::SharedZip(const String8& path, ModDate modWhen)
-    : mPath(path),
-      mZipFile(NULL),
-      mModWhen(modWhen),
-      mResourceTableAsset(NULL),
-      mResourceTable(NULL) {
-  if (kIsDebug) {
-    ALOGI("Creating SharedZip %p %s\n", this, mPath.c_str());
-  }
-  ALOGV("+++ opening zip '%s'\n", mPath.c_str());
-  mZipFile = ZipFileRO::open(mPath.c_str());
-  if (mZipFile == NULL) {
-    ALOGD("failed to open Zip archive '%s'\n", mPath.c_str());
-  }
+AssetManager::SharedZip::SharedZip(const String8& path, time_t modWhen)
+    : mPath(path), mZipFile(NULL), mModWhen(modWhen),
+      mResourceTableAsset(NULL), mResourceTable(NULL)
+{
+    if (kIsDebug) {
+        ALOGI("Creating SharedZip %p %s\n", this, mPath.c_str());
+    }
+    ALOGV("+++ opening zip '%s'\n", mPath.c_str());
+    mZipFile = ZipFileRO::open(mPath.c_str());
+    if (mZipFile == NULL) {
+        ALOGD("failed to open Zip archive '%s'\n", mPath.c_str());
+    }
 }
 
 AssetManager::SharedZip::SharedZip(int fd, const String8& path)
@@ -1455,7 +1453,7 @@
         bool createIfNotPresent)
 {
     AutoMutex _l(gLock);
-    auto modWhen = getFileModDate(path.c_str());
+    time_t modWhen = getFileModDate(path.c_str());
     sp<SharedZip> zip = gOpen.valueFor(path).promote();
     if (zip != NULL && zip->mModWhen == modWhen) {
         return zip;
@@ -1522,8 +1520,8 @@
 
 bool AssetManager::SharedZip::isUpToDate()
 {
-  auto modWhen = getFileModDate(mPath.c_str());
-  return mModWhen == modWhen;
+    time_t modWhen = getFileModDate(mPath.c_str());
+    return mModWhen == modWhen;
 }
 
 void AssetManager::SharedZip::addOverlay(const asset_path& ap)
diff --git a/libs/androidfw/include/androidfw/AssetManager.h b/libs/androidfw/include/androidfw/AssetManager.h
index 376c881..ce0985b 100644
--- a/libs/androidfw/include/androidfw/AssetManager.h
+++ b/libs/androidfw/include/androidfw/AssetManager.h
@@ -280,21 +280,21 @@
         ~SharedZip();
 
     private:
-     SharedZip(const String8& path, ModDate modWhen);
-     SharedZip(int fd, const String8& path);
-     SharedZip();  // <-- not implemented
+        SharedZip(const String8& path, time_t modWhen);
+        SharedZip(int fd, const String8& path);
+        SharedZip(); // <-- not implemented
 
-     String8 mPath;
-     ZipFileRO* mZipFile;
-     ModDate mModWhen;
+        String8 mPath;
+        ZipFileRO* mZipFile;
+        time_t mModWhen;
 
-     Asset* mResourceTableAsset;
-     ResTable* mResourceTable;
+        Asset* mResourceTableAsset;
+        ResTable* mResourceTable;
 
-     Vector<asset_path> mOverlays;
+        Vector<asset_path> mOverlays;
 
-     static Mutex gLock;
-     static DefaultKeyedVector<String8, wp<SharedZip> > gOpen;
+        static Mutex gLock;
+        static DefaultKeyedVector<String8, wp<SharedZip> > gOpen;
     };
 
     /*
diff --git a/libs/androidfw/include/androidfw/Idmap.h b/libs/androidfw/include/androidfw/Idmap.h
index 98f1aa8..64b1f0c 100644
--- a/libs/androidfw/include/androidfw/Idmap.h
+++ b/libs/androidfw/include/androidfw/Idmap.h
@@ -25,9 +25,8 @@
 #include "android-base/macros.h"
 #include "android-base/unique_fd.h"
 #include "androidfw/ConfigDescription.h"
-#include "androidfw/ResourceTypes.h"
 #include "androidfw/StringPiece.h"
-#include "androidfw/misc.h"
+#include "androidfw/ResourceTypes.h"
 #include "utils/ByteOrder.h"
 
 namespace android {
@@ -203,7 +202,7 @@
   android::base::unique_fd idmap_fd_;
   std::string_view overlay_apk_path_;
   std::string_view target_apk_path_;
-  ModDate idmap_last_mod_time_;
+  time_t idmap_last_mod_time_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(LoadedIdmap);
diff --git a/libs/androidfw/include/androidfw/misc.h b/libs/androidfw/include/androidfw/misc.h
index 09ae40c..077609d 100644
--- a/libs/androidfw/include/androidfw/misc.h
+++ b/libs/androidfw/include/androidfw/misc.h
@@ -13,13 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#pragma once
 
-#include <time.h>
+#include <sys/types.h>
 
 //
 // Handy utility functions and portability code.
 //
+#ifndef _LIBS_ANDROID_FW_MISC_H
+#define _LIBS_ANDROID_FW_MISC_H
 
 namespace android {
 
@@ -40,35 +41,15 @@
 } FileType;
 /* get the file's type; follows symlinks */
 FileType getFileType(const char* fileName);
-
-// MinGW doesn't support nanosecond resolution in stat() modification time, and given
-// that it only matters on the device it's ok to keep it at the second level there.
-#ifdef _WIN32
-using ModDate = time_t;
-inline constexpr ModDate kInvalidModDate = ModDate(-1);
-inline constexpr unsigned long long kModDateResolutionNs = 1ull * 1000 * 1000 * 1000;
-inline time_t toTimeT(ModDate m) {
-  return m;
-}
-#else
-using ModDate = timespec;
-inline constexpr ModDate kInvalidModDate = {-1, -1};
-inline constexpr unsigned long long kModDateResolutionNs = 1;
-inline time_t toTimeT(ModDate m) {
-  return m.tv_sec;
-}
-#endif
-
-/* get the file's modification date; returns kInvalidModDate w/errno set on failure */
-ModDate getFileModDate(const char* fileName);
+/* get the file's modification date; returns -1 w/errno set on failure */
+time_t getFileModDate(const char* fileName);
 /* same, but also returns -1 if the file has already been deleted */
-ModDate getFileModDate(int fd);
+time_t getFileModDate(int fd);
 
 // Check if |path| or |fd| resides on a readonly filesystem.
 bool isReadonlyFilesystem(const char* path);
 bool isReadonlyFilesystem(int fd);
 
-}  // namespace android
+}; // namespace android
 
-// Whoever uses getFileModDate() will need this as well
-bool operator==(const timespec& l, const timespec& r);
+#endif // _LIBS_ANDROID_FW_MISC_H
diff --git a/libs/androidfw/misc.cpp b/libs/androidfw/misc.cpp
index 9bdaf18a..93dcaf5 100644
--- a/libs/androidfw/misc.cpp
+++ b/libs/androidfw/misc.cpp
@@ -28,13 +28,11 @@
 #include <sys/vfs.h>
 #endif  // __linux__
 
+#include <cstring>
+#include <cstdio>
 #include <errno.h>
 #include <sys/stat.h>
 
-#include <cstdio>
-#include <cstring>
-#include <tuple>
-
 namespace android {
 
 /*
@@ -75,32 +73,27 @@
     }
 }
 
-static ModDate getModDate(const struct stat& st) {
-#ifdef _WIN32
-  return st.st_mtime;
-#else
-  return st.st_mtim;
-#endif
+/*
+ * Get a file's modification date.
+ */
+time_t getFileModDate(const char* fileName) {
+    struct stat sb;
+    if (stat(fileName, &sb) < 0) {
+        return (time_t)-1;
+    }
+    return sb.st_mtime;
 }
 
-ModDate getFileModDate(const char* fileName) {
-  struct stat sb;
-  if (stat(fileName, &sb) < 0) {
-    return kInvalidModDate;
-  }
-  return getModDate(sb);
-}
-
-ModDate getFileModDate(int fd) {
-  struct stat sb;
-  if (fstat(fd, &sb) < 0) {
-    return kInvalidModDate;
-  }
-  if (sb.st_nlink <= 0) {
-    errno = ENOENT;
-    return kInvalidModDate;
-  }
-  return getModDate(sb);
+time_t getFileModDate(int fd) {
+    struct stat sb;
+    if (fstat(fd, &sb) < 0) {
+        return (time_t)-1;
+    }
+    if (sb.st_nlink <= 0) {
+        errno = ENOENT;
+        return (time_t)-1;
+    }
+    return sb.st_mtime;
 }
 
 #ifndef __linux__
@@ -131,8 +124,4 @@
 }
 #endif  // __linux__
 
-}  // namespace android
-
-bool operator==(const timespec& l, const timespec& r) {
-  return std::tie(l.tv_sec, l.tv_nsec) == std::tie(r.tv_sec, l.tv_nsec);
-}
+}; // namespace android
diff --git a/libs/androidfw/tests/Idmap_test.cpp b/libs/androidfw/tests/Idmap_test.cpp
index cb2e56f..60aa7d8 100644
--- a/libs/androidfw/tests/Idmap_test.cpp
+++ b/libs/androidfw/tests/Idmap_test.cpp
@@ -14,9 +14,6 @@
  * limitations under the License.
  */
 
-#include <chrono>
-#include <thread>
-
 #include "android-base/file.h"
 #include "androidfw/ApkAssets.h"
 #include "androidfw/AssetManager2.h"
@@ -30,7 +27,6 @@
 #include "data/overlayable/R.h"
 #include "data/system/R.h"
 
-using namespace std::chrono_literals;
 using ::testing::NotNull;
 
 namespace overlay = com::android::overlay;
@@ -222,13 +218,10 @@
 
   unlink(temp_file.path);
   ASSERT_FALSE(apk_assets->IsUpToDate());
-
-  const auto sleep_duration =
-      std::chrono::nanoseconds(std::max(kModDateResolutionNs, 1'000'000ull));
-  std::this_thread::sleep_for(sleep_duration);
+  sleep(2);
 
   base::WriteStringToFile("hello", temp_file.path);
-  std::this_thread::sleep_for(sleep_duration);
+  sleep(2);
 
   ASSERT_FALSE(apk_assets->IsUpToDate());
 }