)]}'
{
  "log": [
    {
      "commit": "dcb3c6559b09ec89771858ec27a787027da9af50",
      "tree": "83aeb141e483ec7d059b7089e00b761ace122662",
      "parents": [
        "262cdf0f2724aaeade73a6c9e7b7466e0adf1007"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 23 12:58:11 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 24 15:19:04 2018 -0800"
      },
      "message": "Replace AssetManager with AssetManager2 implementation\n\nTest: atest CtsContentTestCases:android.content.res.cts\nTest: make libandroidfw_tests\nChange-Id: I572eb13c6a4372c7f656f5912821cececd5bf3d4\n"
    },
    {
      "commit": "7fb38311361390e24d7e43ce1eb220faccd251ff",
      "tree": "c4e6dc480cb292306aa2dc3a481b51df983bbc08",
      "parents": [
        "68d10d00a52be904766d69acda98bc934e768e7f"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 23 03:17:26 2018 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 23 03:17:26 2018 -0800"
      },
      "message": "Revert \"Replace AssetManager with AssetManager2 implementation\"\n\nThis reverts commit b20a0ce59f59cb5ec857748e056cc341dbd13b92.\n"
    },
    {
      "commit": "50706b6ebc224920bceffa66baa30734de5e27ff",
      "tree": "065c1519feb3770513788c6c7144e579b1931132",
      "parents": [
        "ec8c24862ba662b0f6095956e4a12f8e7d643062"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 23 03:16:16 2018 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 23 03:16:16 2018 -0800"
      },
      "message": "Revert \"libandroidfw: Improve performance of AssetManager2\"\n\nThis reverts commit 392132748416719e3df427e6ac8dc11af194342c.\n"
    },
    {
      "commit": "392132748416719e3df427e6ac8dc11af194342c",
      "tree": "fe7baaac50987f36e8ede122694e915cfe7e3093",
      "parents": [
        "62f17129a0c519fe3e591be102b1863024cea3a4"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 08 17:38:30 2018 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 18 10:40:10 2018 -0800"
      },
      "message": "libandroidfw: Improve performance of AssetManager2\n\nAssetManager2 relied on creating a list of configurations\npresent in the resource table so as to avoid copying and\nconverting ResTable_config\u0027s from the APK on every\nresource retrieval.\n\nResTable, however, had a better optimization that pruned\nthe configurations that didn\u0027t match the currently set\nconfiguration. This vastly reduced the number of ResTable_configs\nto test.\n\nIn this CL, AssetManager2 follows suite with this optimization\nand only maintains the filtered ResTable_configs, falling back\nto the slow path when the configuration is overridden.\n\nTest: mma frameworks/base/libs/androidfw\nTest: adb sync system data\nTest: adb shell /data/benchmarktest64/libandroidfw_benchmarks/libandroidfw_benchmarks\nChange-Id: I42d53f703623cf7c3f7cbcf194f5026ff540faf4\n"
    },
    {
      "commit": "b20a0ce59f59cb5ec857748e056cc341dbd13b92",
      "tree": "6e28d25ea0dbe435b9bcc607827b7c1832f7c79f",
      "parents": [
        "d6808dc0c00ba45fd589449647f792daf9fa8126"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 23 12:58:11 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 09 16:28:58 2018 -0800"
      },
      "message": "Replace AssetManager with AssetManager2 implementation\n\nTest: Existing CTS tests pass\nTest: make libandroidfw_tests\nChange-Id: I858f7e1d909c08273b096601136e3f28e15eb5d4\n"
    },
    {
      "commit": "498f6053dad29d715dd532f5272df12dabccf8c8",
      "tree": "b22dbd7d8e182fce137291b348645c7f9195255b",
      "parents": [
        "36f46a87317be9c568649c423011b37e18698013"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Nov 29 13:24:29 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Dec 05 00:29:38 2017 +0000"
      },
      "message": "libandroidfw: Remove pre-verification\n\nThis added more up-front cost to loading an APK and didn\u0027t provide\na significant benefit to resource retrieval.\n\nTest: make libandroidfw_tests\nChange-Id: Idbf993abc433fa8c8950d106c66469b310b66f7f\n"
    },
    {
      "commit": "1c855a0bc88281873b047391de93d0a2b4dbd454",
      "tree": "807e95f64d46feeb41d618029c1f25c0c33d9b8f",
      "parents": [
        "d12e276f6ae35a1e889c6d4de97688903c49001b"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Nov 29 09:59:37 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Nov 29 10:20:26 2017 -0800"
      },
      "message": "libandroidfw: Do not clear last resource id in ResolveReference\n\nIf the value passed to AssetManager::ResolveReference is not a\nreference, the caller may be expecting for the last reference to\nnot be cleared, as a more appropriate value should most likely be\nretained.\n\nThis was causing an issue when a caller was manually resolving\nreferences and expecting the last resource ID resolved to be propagated\nacross calls to ResolveReference.\n\nTest: make libandroidfw_tests\nChange-Id: I5b7f586e2cd541059023eaa9ba23e324a21a9a1e\n"
    },
    {
      "commit": "1a1e9c272459f05c846a03fc15989ff7e492517e",
      "tree": "9d5f5c28c08de8be785e66d849975959982d778f",
      "parents": [
        "30080e2f282f40222bd9cc617e0c11d63c82f829"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Oct 13 15:45:34 2017 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Oct 17 16:03:30 2017 -0700"
      },
      "message": "AssetManager2: Run ApkAssets that have failed verification\n\nApkAssets who have failed verification should still run for\ncompatibility. Not all resources are accessed, and therefore\nerrors in the APK are not necessarily fatal. However, this means\nwe must do bounds checks when retrieving resources, which is\nslower.\n\nTest: make libandroidfw_tests \u0026\u0026 $ANDROID_BUILD_TOP/out/host/\u003chost\u003e/nativetest64/libandroidfw_tests/libandroidfw_tests\nTest: make libandroidfw_benchmarks \u0026\u0026 adb sync system \u0026\u0026 adb sync data \u0026\u0026 /data/benchmarktest64/libandroidfw_benchmarks/libandroidfw_benchmarks\nChange-Id: I4cc926c064bca0491785d82cdac0419d74d7d9b0\n"
    },
    {
      "commit": "30080e2f282f40222bd9cc617e0c11d63c82f829",
      "tree": "d7cd37fc9a3dbd3369e53db221623f3fdf8b0c4d",
      "parents": [
        "8a0f0ed4d84573a2f9eec0753404b5cf44f51827"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Oct 16 16:18:09 2017 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Oct 17 11:37:49 2017 -0700"
      },
      "message": "AssetManager2: Improve Theme performance\n\nThis change brings Theme ApplyStyle down to 2x the original performance\nand Theme attribute retrieval to less than the original performance.\nYay!\n\nBenchmarks ran on marlin-eng\n----------------------------------------------------------------------\nBenchmark                               Time           CPU Iterations\n----------------------------------------------------------------------\nBM_ThemeApplyStyleFramework          8540 ns       8500 ns      82105\nBM_ThemeApplyStyleFrameworkOld       5280 ns       5258 ns     148849\nBM_ThemeGetAttribute                    8 ns          8 ns   88388549\nBM_ThemeGetAttributeOld                11 ns         11 ns   63394463\n\nApplyStyle still takes some time, and the weird thing is that if I\nswitch the data structure of ThemeType to use an\nstd::vector\u003cThemeEntry\u003e, the performance becomes better than the\noriginal implementation! The issue is that std::vector\u003cT\u003e takes up 24\nbytes, which would make Themes take up 8 more bytes per ThemeType, which\nis unacceptable. Still trying to isolate where the performance gain is\ncoming from.\n\nTest: make libandroidfw_tests \u0026\u0026 $ANDROID_BUILD_TOP/out/host/\u003chost\u003e/nativetest64/libandroidfw_tests/libandroidfw_tests\nTest: make libandroidfw_benchmarks \u0026\u0026 adb sync system \u0026\u0026 adb sync data \u0026\u0026 adb shell /data/benchmarktest64/libandroidfw_benchmarks/libandroidfw_benchmarks\nChange-Id: I0e7a756afd44b6aac1521e69c2b907258c262d3e\n"
    },
    {
      "commit": "970bd8d2835b05237c4561bd6c12329e26f136b3",
      "tree": "76004870f6957072dd24267a7a00d9ae6b237aba",
      "parents": [
        "fcf52c6f5e2276c9cf2ca245757a2f0f4b1d7e4e"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Sep 25 13:21:55 2017 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Oct 13 10:23:34 2017 -0700"
      },
      "message": "AssetManager2: Implement IDMAP support\n\nThis enables RRO (runtime resource overlays) with AssetManager2\n\nTest: make libandroidfw_tests\nTest: out/host/\u003cplatform\u003e/nativetest64/libandroidfw_tests/libandroidfw_tests --testdata\u003dframeworks/base/libs/androidfw/tests/data\nChange-Id: Id8079104faefbfaa3f4017d8f7ee1a8968f151a2\n"
    },
    {
      "commit": "03ebac8c68f9925592a172fcfd11d56f48cadaeb",
      "tree": "65f977d44096c415c580614dd43a158d3b96aa23",
      "parents": [
        "6833a07a078af8eeb868aee269bbb1860c01f244"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Sep 25 13:10:14 2017 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Sep 25 18:24:41 2017 -0700"
      },
      "message": "A few fixes to AssetManager2 for compat\n\nTheme copying should behave the way it did with the old AssetManager\n(copy only the framework attributes when copying from a Theme object\nfrom a different AssetManager).\n\nCleanup the dependencies on libziparchive in ApkAssets.\n\nTest: make libandroidfw_tests\nTest: out/host/\u003cplatform\u003e/nativetests64/libandroidfw_tests/libandroidfw_tests --testdata\u003dframeworks/base/libs/androidfw/tests/data\nChange-Id: I973f7e6eb14ce311306e2ec66a623a4790c8d233\n"
    },
    {
      "commit": "09b119fb7d0494e9afd2bf2ec774532fcafe754e",
      "tree": "06908db0ed58bce146052866dbb8d2693368e28d",
      "parents": [
        "6a65b75e479a9de3d6d8a066eeb4d1715b18c03b"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jul 25 15:00:04 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Jul 26 17:39:32 2017 -0700"
      },
      "message": "AssetManager2: Fix a memory leak\n\nCaught by the static analyzer:\n\nframeworks/base/libs/androidfw/AssetManager2.cpp:580:9: warning:\nPotential leak of memory pointed to by \u0027new_bag\u0027\n[clang-analyzer-unix.Malloc]\n\nBug: 27101951\nTest: mma. Memory leak warning is gone.\nChange-Id: I532585d4dd376cec1abf4358f26d23f5ae3231cf\n"
    },
    {
      "commit": "d1ecd7af687bcad0f87c37fe33515ff6c5ea0f1d",
      "tree": "63822987507c52532481ca86333751e4fb329953",
      "parents": [
        "c535d122c6a58a152ff2581f936070c2695c45ba"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 23 12:58:11 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Feb 15 10:50:23 2017 -0800"
      },
      "message": "AssetManager2: Various fixes\n\n- Use FileMaps to open Assets (prevents closing of ApkAssets underlying\nzip)\n- Implement OpenDir and List methods\n- Fix issue where DynamicRefTable wasn\u0027t properly constructed\n\nTest: make libandroidfw_tests\nChange-Id: Ib21a84e1114d028120744aa3bc1c6eb9d9399fa8\n"
    },
    {
      "commit": "929d6517dfd338f0d481dbe6587643d5aef27ec6",
      "tree": "b80a93b93946bd4e982b9f4abd97a4c3aa43feb3",
      "parents": [
        "c270de85cc0c398d9ce165592908d2740219a708"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jan 16 19:11:19 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Feb 08 06:04:52 2017 -0800"
      },
      "message": "AssetManager2: Add GetResourceId\n\nAdd ability to lookup a resource by name.\n\nTest: make libandroidfw_tests\nChange-Id: I262ba5ce4c9892458226fbdb44cf21f9877fb92d\n"
    },
    {
      "commit": "0c40524953f3d36a880f91183302a2ea5c722930",
      "tree": "eb7a15ddd974e1263864902f9f3dd019a47343fc",
      "parents": [
        "a9285db08883dbbe7b5eb9276cb52b7e01b42aa3"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jan 13 20:47:26 2017 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 31 16:20:29 2017 -0800"
      },
      "message": "AssetManager2: Add other support methods\n\n- Add GetResourceConfigurations()\n- Add GetResourceLocales()\n- Add ResolveReference()\n- Add stub for GetResourceId()\n- Change LoadedArsc and ApkAssets factory method to return const\n\nTest: make libandroidfw_tests\nChange-Id: Ia797dc9381a523b1a3e7029048a413e544730379\n"
    },
    {
      "commit": "da431a22da38f9c4085b5d71ed9a9c6122c6a5a6",
      "tree": "7fc684c1ec3c653ff98bdc8eff50addc081a02e1",
      "parents": [
        "7ad1110ecd6a840fcd2895c62668828a1ca029c6"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Dec 29 16:08:16 2016 -0500"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 11 17:20:36 2017 -0800"
      },
      "message": "libandroidfw: Add new support for shared libraries\n\nThis adds support for shared resource libraries in the new\nResTable/AssetManager implementation.\n\nThe dynamic package map encoded in resources.arsc is parsed\nand stored with LoadedArsc, and combined to form a resolved table\nin AssetManager2.\n\nBenchmarks show that this implementation is an order of magnitude\nfaster on angler-userdebug (make libandroidfw_benchmarks).\n\nTest: libandroidfw_tests\nChange-Id: I57c80248728b63b162bf8269ac9495b53c3e7fa0\n"
    },
    {
      "commit": "7ad1110ecd6a840fcd2895c62668828a1ca029c6",
      "tree": "f9f11b0849333b1bbcb37b76170787414c92ddbc",
      "parents": [
        "e2489c67e1f17938556a29197eeff9221caddd35"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Oct 28 16:39:15 2016 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 11 13:30:57 2017 -0800"
      },
      "message": "New implementation of AssetManager/ResTable\n\nThe multiwindow model and Resources-per-activity\nmodel that came in N puts greater demands on AssetManagers.\nThey are created whenever window dimensions change, which\ncan be frequently. There is a need to be able to cheaply\ncreate a new AssetManager for each Activity, which shares\na lot of underlying state.\n\nIn order to make the creation of AssetManagers cheap,\nwe need a new implementation of the native AssetManager\nand ResTable to support immutable representations of\nAPKs. This new data structure/class is ApkAssets.\n\nApkAssets have the same functionality of an AssetManager, except\nthat they operate on a single APK, and they do not do any caching.\nOnce loaded, they are immutable.\n\nApkAssets will be exposed as a Java object, with its implementation in\nnative code. The existing Java StringBlock will be owned by ApkAssets,\nwhich means that Strings can be shared across AssetManagers.\n\nApkAssets can be cached by the ResourcesManager. Creating an AssetManager\nrequires only a list of ApkAssets and a configuration.\n\nAssetManager2 (named with the suffix \u00272\u0027 for now while transitioning\nto the new implementation) caches bags that are accessed.\n\nSince ApkAssets are expected to be kept around longer, they do more validation\nof the resource table, which cause slower load times. Measured on an angler-userdebug,\nloading the framework assets takes 11ms with ApkAssets, and 2ms with the old\nAssetManager implementation.\n\nThe tradeoff is that there does not need to be any security checks once an ApkAssets\nis loaded, and regular resource retrieval is faster. Measured on an angler-userdebug,\naccessing resource (android:string/ok) with many locales takes 18us with AssetManager2,\nand 19us with AssetManager (this is per resource, so these add up).\n\nTest: make libandroidfw_tests\nChange-Id: Id0e57ee828f17008891fe3741935a9be8830b01d\n"
    }
  ]
}
