From 60644476eec171e94c7ff471809620190d6a93d8 Mon Sep 17 00:00:00 2001
From: Brandon Liu <branliu@google.com>
Date: Thu, 14 Mar 2024 00:58:18 +0000
Subject: [PATCH] Adding more logging in VersionCollapser for better debugging

Bug: b/319844770
Test: Verified affected tests pass
Change-Id: If2cdb1184502e547a3a4890d8aa7c83b20cb0cf8
---
 tools/aapt2/optimize/VersionCollapser.cpp | 23 ++++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/tools/aapt2/optimize/VersionCollapser.cpp b/tools/aapt2/optimize/VersionCollapser.cpp
index cd791bda250b..27fff9a05334 100644
--- a/tools/aapt2/optimize/VersionCollapser.cpp
+++ b/tools/aapt2/optimize/VersionCollapser.cpp
@@ -70,7 +70,7 @@ FilterIterator<Iterator, Pred> make_filter_iterator(Iterator begin,
  * exception is when there is no exact matching resource for the minSdk. The next smallest one will
  * be kept.
  */
-static void CollapseVersions(int min_sdk, ResourceEntry* entry) {
+static void CollapseVersions(IAaptContext* context, int min_sdk, ResourceEntry* entry) {
   // First look for all sdks less than minSdk.
   for (auto iter = entry->values.rbegin(); iter != entry->values.rend();
        ++iter) {
@@ -102,7 +102,14 @@ static void CollapseVersions(int min_sdk, ResourceEntry* entry) {
       auto filter_iter =
           make_filter_iterator(iter + 1, entry->values.rend(), pred);
       while (filter_iter.HasNext()) {
-        filter_iter.Next() = {};
+        auto& next = filter_iter.Next();
+        if (context->IsVerbose()) {
+          context->GetDiagnostics()->Note(android::DiagMessage()
+                                          << "removing configuration " << next->config.to_string()
+                                          << " for entry: " << entry->name
+                                          << ", because its SDK version is smaller than minSdk");
+        }
+        next = {};
       }
     }
   }
@@ -126,6 +133,12 @@ static void CollapseVersions(int min_sdk, ResourceEntry* entry) {
           util::make_unique<ResourceConfigValue>(
               config_value->config.CopyWithoutSdkVersion(),
               config_value->product);
+      if (context->IsVerbose()) {
+        context->GetDiagnostics()->Note(android::DiagMessage()
+                                        << "overriding resource: " << entry->name
+                                        << ", removing SDK version from configuration "
+                                        << config_value->config.to_string());
+      }
       new_value->value = std::move(config_value->value);
       config_value = std::move(new_value);
 
@@ -147,10 +160,14 @@ static void CollapseVersions(int min_sdk, ResourceEntry* entry) {
 bool VersionCollapser::Consume(IAaptContext* context, ResourceTable* table) {
   TRACE_NAME("VersionCollapser::Consume");
   const int min_sdk = context->GetMinSdkVersion();
+  if (context->IsVerbose()) {
+    context->GetDiagnostics()->Note(android::DiagMessage()
+                                    << "Running VersionCollapser with minSdk = " << min_sdk);
+  }
   for (auto& package : table->packages) {
     for (auto& type : package->types) {
       for (auto& entry : type->entries) {
-        CollapseVersions(min_sdk, entry.get());
+        CollapseVersions(context, min_sdk, entry.get());
       }
     }
   }
-- 
GitLab