Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 582028f6 authored by Yurii Zubrytskyi's avatar Yurii Zubrytskyi Committed by Android (Google) Code Review
Browse files

Merge "[res] Start using ftl::SmallVector<> where it's most useful" into main

parents 0bdc6903 c4dadee1
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ AssetManager2::AssetManager2(ApkAssetsList apk_assets, const ResTable_config& co
}

AssetManager2::AssetManager2() {
  configurations_.resize(1);
  configurations_.emplace_back();
}

bool AssetManager2::SetApkAssets(ApkAssetsList apk_assets, bool invalidate_caches) {
@@ -438,7 +438,7 @@ bool AssetManager2::ContainsAllocatedTable() const {
  return false;
}

void AssetManager2::SetConfigurations(std::vector<ResTable_config> configurations,
void AssetManager2::SetConfigurations(std::span<const ResTable_config> configurations,
                                      bool force_refresh) {
  int diff = 0;
  if (force_refresh) {
@@ -452,8 +452,10 @@ void AssetManager2::SetConfigurations(std::vector<ResTable_config> configuration
      }
    }
  }
  configurations_ = std::move(configurations);

  configurations_.clear();
  for (auto&& config : configurations) {
    configurations_.emplace_back(config);
  }
  if (diff) {
    RebuildFilterList();
    InvalidateCaches(static_cast<uint32_t>(diff));
+7 −5
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
#include "androidfw/AssetManager.h"
#include "androidfw/ResourceTypes.h"
#include "androidfw/Util.h"
#include "ftl/small_vector.h"

namespace android {

@@ -159,9 +160,10 @@ class AssetManager2 {

  // Sets/resets the configuration for this AssetManager. This will cause all
  // caches that are related to the configuration change to be invalidated.
  void SetConfigurations(std::vector<ResTable_config> configurations, bool force_refresh = false);
  void SetConfigurations(std::span<const ResTable_config> configurations,
                         bool force_refresh = false);

  inline const std::vector<ResTable_config>& GetConfigurations() const {
  std::span<const ResTable_config> GetConfigurations() const {
    return configurations_;
  }

@@ -470,13 +472,13 @@ class AssetManager2 {

  // An array mapping package ID to index into package_groups. This keeps the lookup fast
  // without taking too much memory.
  std::array<uint8_t, std::numeric_limits<uint8_t>::max() + 1> package_ids_;
  std::array<uint8_t, std::numeric_limits<uint8_t>::max() + 1> package_ids_ = {};

  uint32_t default_locale_;
  uint32_t default_locale_ = 0;

  // The current configurations set for this AssetManager. When this changes, cached resources
  // may need to be purged.
  std::vector<ResTable_config> configurations_;
  ftl::SmallVector<ResTable_config, 1> configurations_;

  // Cached set of bags. These are cached because they can inherit keys from parent bags,
  // which involves some calculation.
+10 −10
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ TEST_F(AssetManager2Test, FindsResourceFromSingleApkAssets) {
  desired_config.language[1] = 'e';

  AssetManager2 assetmanager;
  assetmanager.SetConfigurations({desired_config});
  assetmanager.SetConfigurations({{desired_config}});
  assetmanager.SetApkAssets({basic_assets_});

  auto value = assetmanager.GetResource(basic::R::string::test1);
@@ -137,7 +137,7 @@ TEST_F(AssetManager2Test, FindsResourceFromMultipleApkAssets) {
  desired_config.language[1] = 'e';

  AssetManager2 assetmanager;
  assetmanager.SetConfigurations({desired_config});
  assetmanager.SetConfigurations({{desired_config}});
  assetmanager.SetApkAssets({basic_assets_, basic_de_fr_assets_});

  auto value = assetmanager.GetResource(basic::R::string::test1);
@@ -466,10 +466,10 @@ TEST_F(AssetManager2Test, ResolveDeepIdReference) {
TEST_F(AssetManager2Test, DensityOverride) {
  AssetManager2 assetmanager;
  assetmanager.SetApkAssets({basic_assets_, basic_xhdpi_assets_, basic_xxhdpi_assets_});
  assetmanager.SetConfigurations({{
  assetmanager.SetConfigurations({{{
    .density = ResTable_config::DENSITY_XHIGH,
    .sdkVersion = 21,
  }});
  }}});

  auto value = assetmanager.GetResource(basic::R::string::density, false /*may_be_bag*/);
  ASSERT_TRUE(value.has_value());
@@ -721,7 +721,7 @@ TEST_F(AssetManager2Test, GetLastPathWithoutEnablingReturnsEmpty) {
  ResTable_config desired_config;

  AssetManager2 assetmanager;
  assetmanager.SetConfigurations({desired_config});
  assetmanager.SetConfigurations({{desired_config}});
  assetmanager.SetApkAssets({basic_assets_});
  assetmanager.SetResourceResolutionLoggingEnabled(false);

@@ -736,7 +736,7 @@ TEST_F(AssetManager2Test, GetLastPathWithoutResolutionReturnsEmpty) {
  ResTable_config desired_config;

  AssetManager2 assetmanager;
  assetmanager.SetConfigurations({desired_config});
  assetmanager.SetConfigurations({{desired_config}});
  assetmanager.SetApkAssets({basic_assets_});

  auto result = assetmanager.GetLastResourceResolution();
@@ -751,7 +751,7 @@ TEST_F(AssetManager2Test, GetLastPathWithSingleApkAssets) {

  AssetManager2 assetmanager;
  assetmanager.SetResourceResolutionLoggingEnabled(true);
  assetmanager.SetConfigurations({desired_config});
  assetmanager.SetConfigurations({{desired_config}});
  assetmanager.SetApkAssets({basic_assets_});

  auto value = assetmanager.GetResource(basic::R::string::test1);
@@ -774,7 +774,7 @@ TEST_F(AssetManager2Test, GetLastPathWithMultipleApkAssets) {

  AssetManager2 assetmanager;
  assetmanager.SetResourceResolutionLoggingEnabled(true);
  assetmanager.SetConfigurations({desired_config});
  assetmanager.SetConfigurations({{desired_config}});
  assetmanager.SetApkAssets({basic_assets_, basic_de_fr_assets_});

  auto value = assetmanager.GetResource(basic::R::string::test1);
@@ -796,7 +796,7 @@ TEST_F(AssetManager2Test, GetLastPathAfterDisablingReturnsEmpty) {

  AssetManager2 assetmanager;
  assetmanager.SetResourceResolutionLoggingEnabled(true);
  assetmanager.SetConfigurations({desired_config});
  assetmanager.SetConfigurations({{desired_config}});
  assetmanager.SetApkAssets({basic_assets_});

  auto value = assetmanager.GetResource(basic::R::string::test1);
@@ -817,7 +817,7 @@ TEST_F(AssetManager2Test, GetOverlayablesToString) {

  AssetManager2 assetmanager;
  assetmanager.SetResourceResolutionLoggingEnabled(true);
  assetmanager.SetConfigurations({desired_config});
  assetmanager.SetConfigurations({{desired_config}});
  assetmanager.SetApkAssets({overlayable_assets_});

  const auto map = assetmanager.GetOverlayableMapForPackage(0x7f);
+1 −1
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@ void GetResourceBenchmark(const std::vector<std::string>& paths, const ResTable_
  AssetManager2 assetmanager;
  assetmanager.SetApkAssets(apk_assets);
  if (config != nullptr) {
    assetmanager.SetConfigurations({*config});
    assetmanager.SetConfigurations({{{*config}}});
  }

  while (state.KeepRunning()) {
+1 −1
Original line number Diff line number Diff line
@@ -260,7 +260,7 @@ TEST_F(ThemeTest, ThemeRebase) {
  ResTable_config night{};
  night.uiMode = ResTable_config::UI_MODE_NIGHT_YES;
  night.version = 8u;
  am_night.SetConfigurations({night});
  am_night.SetConfigurations({{night}});

  auto theme = am.NewTheme();
  {