)]}'
{
  "log": [
    {
      "commit": "e7bf377d62141c27508b28513e2091a826ad7b15",
      "tree": "cf4e8be0e9f6cbb8b5987cdc587d98806fb22902",
      "parents": [
        "c8e49491cccfc507edd6f80c683288b650e25a8f"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Tue Jul 17 16:16:24 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Tue Jul 17 16:16:24 2018 -0700"
      },
      "message": "[installd] Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I9dc0c1020993ec3c7e95ab552f7620ea2badf742\n"
    },
    {
      "commit": "d712f0ccc120357e1267a04ac6de9dd732b27e76",
      "tree": "7c022021ac8547cd4c061772552c5cfe9ca34d88",
      "parents": [
        "8bba03d323684abb4e209398019c2540b053b827"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed May 03 11:36:42 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 05 14:57:29 2017 -0600"
      },
      "message": "Clear cached files on external storage.\n\nWhen clearing cached files belonging to an app, include any cached\nfiles on external storage.  Since we need to keep sdcardfs in the\nloop about any file deletions, we always mutate by going through the\nsdcardfs layer instead of behind its back.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nBug: 37486230, 37566983, 37913442, 37914374\nChange-Id: If174bf7eaf682da83cf0ab1b4938fe9a5956d464\n"
    },
    {
      "commit": "ed909ae8db2f44ce7fe7003c6fee457f13669702",
      "tree": "d57c4f275cfa2cc1684abeb9748d0e17098f0f42",
      "parents": [
        "7459281f9e1d999281260ff4bbdf3d3e5e0459f5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Mar 22 21:27:40 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Mar 22 21:27:46 2017 -0600"
      },
      "message": "Follow \"atomic\" to \"group\" refactoring.\n\nRemove noisy logging about UIDs that are relying on default cache\nquota of 64MiB.\n\nMove away from yucky old statfs() and use statvfs() instead.\n\nTest: /data/nativetest/installd_cache_test/installd_cache_test\nBug: 35812899, 35684969, 36482620\nChange-Id: I3d68da97eac2ebcda489bdf9d27061cac5b3f7cc\n"
    },
    {
      "commit": "b26786d647b624498c11405075e5223d1853f30a",
      "tree": "40b71e500d3b204028369159eda244a48e062458",
      "parents": [
        "3e3474eaadc5a1ed345bb866f1469e5a4658327e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Mar 11 19:40:29 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Mar 11 19:40:31 2017 -0700"
      },
      "message": "Finer-grained locking for size operations.\n\nDisk space measurements are read-only and don\u0027t perform mutations,\nso other installd operations shouldn\u0027t block them.\n\nIf there\u0027s an ongoing parallel operation (such as a dexopt) that\ncould race and skew the results, that\u0027s no different than an actively\nrunning app changing it\u0027s disk usage during the measurement.\n\nThis change also allows measurements to happen in parallel, so we can\nno longer rely on getcwd() being stable, which means all fts(3) users\nnow need to use FTS_NOCHDIR.\n\nBug: 36032444, 35706513\nTest: runtest -x frameworks/base/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java\nChange-Id: I67d303d3ecce148052d41444cef67381b1d34ab0\n"
    },
    {
      "commit": "871a8f236ef2a055b9955b47a342b2c44c020ef7",
      "tree": "5a244a3f593ac20f0fd771a8ae8ca37b7fb90aeb",
      "parents": [
        "42714ad63c08899719bc1a6fe7fb3966fd66f0a8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Feb 21 18:30:28 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Feb 22 11:44:00 2017 -0700"
      },
      "message": "Logic for atmoic/tombstone behavior; split mode.\n\nFlesh out logic for cache directories that request new atomic and/or\ntombstone clearing behaviors.  Atomic directories are considered for\ndeletion as a single all-or-nothing unit, and tombstone directories\ntruncate any removed files instead of unlinking them.\n\nSince these behaviors can be mixed together, add local tests that\nquickly verify several different permutations.\n\nReduce memory footprint of CacheItem objects by only storing name\nand pointer to parent (instead of full path).  Fix ordering bug by\nswitching to std::stable_sort.\n\nAdd \"V2_DEFY_QUOTA\" flag so we can split clearing into two distinct\nphases: clearing data for apps above their quotas, and then pushing\ndeeper by clearing data for apps below their quotas.\n\nTest: adb shell /data/nativetest64/installd_cache_test/installd_cache_test\nBug: 34692014, 33811826\nChange-Id: I156897de1d1d1c371b2b837128b2e286bf33d40d\n"
    },
    {
      "commit": "88ddd94834dae9c5862a07a1e4432b171b2f5d9f",
      "tree": "d8a01d399c2d2ba7ab85cb8baa9ff2a554f51e7a",
      "parents": [
        "a693382d9452c3d5c1f3a37422653038b0c38253"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jan 17 18:05:54 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 18 12:19:39 2017 -0700"
      },
      "message": "First pass at updated cache clearing logic.\n\nThe old clearing algorithm is very naive and it sorts all cached files\nglobally by modified time.  This sadly lets apps gamify the system by\nsetting their modified times far in the future, and it\u0027s very\nexpensive because it requires a global filesystem traversal to free\nup even the smallest amount of data.\n\nInstead, this CL introduces a much more fair cache clearing algorithm\nthat deletes files from specific UIDs based on how much cache space\nthat UID is using proportional to the space allocated to them.  This\nnew design has several nice properties:\n\n-- It uses the recently added quotactl() feature to rapidly target\nthe apps that are using the most space.\n-- We only need to traverse the filesystem for UIDs that actively\nenter the crosshairs of the clearing algorithm.\n-- Disciplined apps who stay under their allocated quota will be\nthe last to have their cached data cleared.\n-- This design can be easily adapted to support additional features\nsuch as atomic purging and tombstones.\n\nIn summary, the new algorithm is extremely efficient when freeing up\nthe typical small-to-medium amounts of disk space, and is only\nmoderately less efficient than the old algorithm when forced to clear\nall cached data.\n\nTest: builds, boots, clearing strategy looks sane\nBug: 33965858\nChange-Id: I66f95089cb33f1add3f31fcf1082ab2469870fda\n"
    }
  ]
}
