)]}'
{
  "log": [
    {
      "commit": "a732f014c5743af0dbb7eb2e63474a7147576f9d",
      "tree": "c478bd770bfdb2b2ef402deeb2417b37bbabdd99",
      "parents": [
        "560d5f851e9f77bb03c6e9faa21183fb69d35614"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Oct 26 17:26:53 2017 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 22 22:07:06 2017 +0000"
      },
      "message": "The job scheduler now backs off jobs based on standby bucketing\n\nThe default parameters here translate to roughly this rate limiting:\n\n  ACTIVE:   run jobs whenever\n  WORKING:  ~ hourly\n  FREQUENT: ~ every 6 hours\n  RARE:     ~ daily\n\nBug: 63527785\nTest: cts \u0026 manual (WIP)\n      atest CtsJobSchedulerTestCases\nChange-Id: I58f8e53e5bdf40601823e5a10a9f2383a6f67ae5\n"
    },
    {
      "commit": "a0ef1ca2b2e3750c9c1d24797411b4527d45865e",
      "tree": "e33280bb8555e41b54966aa1511c3638c44e85be",
      "parents": [
        "0afe0849656ebc854821fcf287577347f8123679"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Nov 20 09:43:56 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Nov 20 09:43:56 2017 -0800"
      },
      "message": "Cleanup old idle variables\n\nSwitch to using the new bucket thresholds and\nremove the previous idle thresholds.\n\nBug: 63527785\nTest: atest AppStandbyControllerTests\n      atest AppIdleHistoryTests\n\nChange-Id: Ica3fd10fe172faa5b4e712b08273b77357fdae14\n"
    },
    {
      "commit": "301e94a9ef8bebfbe76ba92ef4756969c65a0073",
      "tree": "ea87b2a21bbd9e80f4c0f4cba3c0563bed97c119",
      "parents": [
        "efe5f129ad2f0c8dbdbadf68a219169e423413cf"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Nov 17 16:35:44 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Nov 17 16:35:44 2017 -0800"
      },
      "message": "Shorter thresholds for app standby\n\nStart off with slightly more aggressive timeouts to\nswitch between buckets. 12Hrs, 24Hrs and 48Hrs.\n\nBug: 63527785\nTest: atest AppStandbyControllerTests\nChange-Id: I4aa0cc38ef91538192eda0f48dd3840217aa49c4\n"
    },
    {
      "commit": "803eab6906427517b22c7fd42b21dbf57456eb72",
      "tree": "e47f1174a660b5c0960c78258295a048a0ba8f9f",
      "parents": [
        "c8e3c7c816a4d9de42579df11d9302e117070ea1"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Nov 09 17:47:04 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Nov 16 09:15:03 2017 -0800"
      },
      "message": "Add a new usage event type for seen notification\n\nOn a notification becoming visible, NOTIFICATION_SEEN event is\ndispatched. This will only bump up the app\u0027s bucket to WORKING_SET and\nno higher. Same goes for sync adapters associated with a content\nprovider. Only move them to WORKING_SET.\n\nUpdated NotificationManagerService to report event to usagestats on\nvisibility changes.\n\nBug: 63527785\nTest: runtest -x\nframeworks/base/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java\natest NotificationManagerServiceTest\nChange-Id: I5b132e1fc1f70e2126473b43b9b1979fbc523b85\n"
    },
    {
      "commit": "84cd7b7a9e5ad6a604c075bc620f6bd9ab6b1486",
      "tree": "390384df5fe3d1c8dd90f2b829eb90026cfa2afe",
      "parents": [
        "da71266f6ca9511a928ced0492277e4c0ae48df2"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Nov 07 13:59:37 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 08 15:06:10 2017 -0800"
      },
      "message": "Allow standby timeouts to occur after usage\n\nAnd inform listeners when the bucket changes, not just when\ngoing in and out of RARE bucket.\nAvoid redundant callbacks when informing listeners.\n\nBug: 63527785\nTest: runtest -x\nframeworks/base/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java\nChange-Id: Icd98d59f597147fbf8ea4bf44edf4b3b3d5c8e14\n"
    },
    {
      "commit": "c81983a0c3d7bfe8384dbf48909f4bcf300e36d2",
      "tree": "5bde759ec82eb5330ff0f79f277d137b9efb1be4",
      "parents": [
        "8664028d4f0642ea44c83f87a85184813ac39972"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Oct 20 16:16:32 2017 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Oct 25 12:19:26 2017 -0700"
      },
      "message": "Start removing remaining pm code to package manager\n\nEverything is now moved out of the pm command except for\nthe various install commands.  I am going to hold of on\nthose since they require doing some resolution with the\ncurrent implementations in the package manager to make\nsure they match and behave identically to the implementations\ncurrently in the pm command.  But other than that, everything\nin pm is now just redirecting over to \"cmd package\".\n\nAlso fix up some of the dumpsys output of a few other sevices\nwhen asking to print the data for a particular package, so\nthe \"pm dump\" command gives a little more sane result.\n\nTest: manual\n\nChange-Id: I139e06e560203b72243d7eea9543c2240db0f8f8\n"
    },
    {
      "commit": "17fffee4908f11038ba9cc5a672d15cb25be3dfe",
      "tree": "4777a31456f8d8d30b0a8d59bef0ada54145dffe",
      "parents": [
        "22910ada9abbda61346d3a28470be2176364f77e"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Sep 29 13:17:43 2017 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Oct 24 19:24:15 2017 -0700"
      },
      "message": "App Bucketing for Standby\n\nManage the standby bucket in AppStandbyController\n\nDefault implementation of bucketing based on simple timeout:\n ACTIVE, if recently used\n 12 hrs to move to WORKING_SET\n 2 days to move to FREQUENT\n 7 days to move to RARE\n (subject to change)\n\nRARE bucket equates to the old \"idle\" or \"inactive\" state for\nan app.\n\nBug: 63527785\nTest: AppStandbyControllerTests.java\nChange-Id: I970d7afcdf47c31a9413da8fd4852066a13676a2\n"
    },
    {
      "commit": "7e528f3fda504959843a2addcecf9a286865b11f",
      "tree": "850990d59022ff8419dbdd0b424ab867fd47d9ef",
      "parents": [
        "52c0e916dda8f5580319288367c5449de21f56a3"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Oct 05 16:06:16 2017 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Oct 05 17:30:37 2017 -0700"
      },
      "message": "Refactor App Standby code\n\nMove the App Standby code out of UsageStatsService into\nan AppStandbyController class. This doesn\u0027t change any\nbehavior. Also, it doesn\u0027t change the entry points, which\nare still in UsageStatsManager. The binder APIs are still\nin UsageStatsService and are forwarded to\nAppStandbyController.\n\nThis change is in preparation for switching to app standby\nbuckets instead of a boolean state.\n\nBug: 63527785\nTest: adb shell dumpsys usagestats\n      adb shell am set-inactive \u003cpackagename\u003e true\n      // Ensure state changes are persisted\n\nChange-Id: Ic94357bdc891d1defae37bb29d533b6153a09967\n"
    },
    {
      "commit": "3e99f654fbf56d3b7ef7130658b8ef83d2d0cdbd",
      "tree": "63e6e0c675b054bd7cf99db591802ee2ffd62e66",
      "parents": [
        "f490ae3e5961a8dfdbd779f0c764b7d44d9d1221"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 05 16:33:56 2017 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jul 10 17:24:20 2017 +0100"
      },
      "message": "Fix issue #34471029: Don\u0027t allow audio use from background apps.\n\nThis is becoming a common pattern (keeping track of which processes\nare cached and not allowing them to do stuff in that state), so I\nam turning this in to a general mechanism for monitoring this state\nthrough the activity manager\u0027s IUidObserver.  Now we can just have\nAudoService implement its own IUidObserver to get this state and\nupdate which uids it is blocking.\n\nThis required making some changes to uid change reports so that\nthe integer is now a bit mask instead of an enumerations, but that\nis what it was already turning in to anyway.  (This gets rid of\nthe crazy GONE_IDLE constant that we\u0027d needed to add before because\nit wasn\u0027t a bit mask).\n\nEventually the power manager should be changed to be told about\nthese changes to cached state instead of listening to every proc\nstate change, but we\u0027ll do that later, it is more disruption than\nI want to take for now.  However, while working on this, I noticed\nthat the power manager had regressed in the cached uids it would\nactually block, because the activity manager was no longer telling\nit about all uids that are idle.  (I think this happened when I had\nto change the default idle state of UidRecord to true.)  So I am\nadding a bit of new code to keep track of what idle state we last\nreported to observers, to make sure we tell it about newly created\nuids that are idle but have never actually become active.\n\nTest: runtest -c com.android.server.am.ActivityManagerServiceTest frameworks-services\n\nChange-Id: I7bfd46bacadd4cab2a69f40e6e52afb4e67b456a\n"
    },
    {
      "commit": "c8b29ac6f0340bd0c3c9eb388c4be2d446de9a59",
      "tree": "b2ff4065fd6ba77a11b38fd8a6e8a36bf32028a4",
      "parents": [
        "4f5adb9801e08f34731cfe22be3c197a5dd09ba4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jul 06 11:29:06 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jul 06 11:29:10 2017 -0600"
      },
      "message": "Change storage migration to use quota APIs.\n\nNew quota APIs are much faster than trying to measure manually, and\nremoving this last user of calculateDirectorySize() means we can\nremove it once and for all.\n\nBug: 36056324\nTest: builds, boots\nChange-Id: Ibdf1ee4e8885680e106df6a9269b6309ddc61af8\n"
    },
    {
      "commit": "35e46d297255363a20ccde62af3c58c4ce3c13c5",
      "tree": "6a082247418b5cc02d46e4a351a4d3f930ce779c",
      "parents": [
        "9620595965bc7ffb74518eee19bbd63702c57121"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jun 09 10:01:20 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 12 14:27:23 2017 -0600"
      },
      "message": "Active camera apps can defy reserved cache space.\n\nWe normally prevent apps from allocating into the \"reserved\" cache\nspace, but this change makes an exception for an active camera app,\nsince the user is probably trying to capture an important memory.\n\nThis change only lets the active camera app clear up to half of the\nreserved space, since we don\u0027t want to completely destroy the\nexperience of all other apps.\n\nTest: manual app before/during/after active camera session\nBug: 38267830\nChange-Id: Ie9e63884fb2638ca881e10b894629eea84601648\n"
    },
    {
      "commit": "ddff807b762a8a455287abc97aea8f97b98fb104",
      "tree": "9f5dc24ea84eb9d64e575d7210b99718ff318fd3",
      "parents": [
        "1399d3abf51265915a3d6cbd2b04be2a3142c609"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 26 13:10:46 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue May 30 22:17:23 2017 -0600"
      },
      "message": "Consistent \"low storage\" behavior.\n\nWhen answering the question \"how much space is free\", use the same\nlogic for Settings UI and StorageManager.getAllocatableBytes().  That\nis, the reported free space is usable bytes plus any cached data the\nsystem is willing to delete automatically.\n\nThis does *not* include any reserved cache space, since we don\u0027t want\nabusive apps to penalize other well-behaved apps that are storing\ntheir data in cache locations.  Callers freeing cached data need to\nnow explicitly request defiance of the reserved cache space.  (Most\ncallers are already doing this by using FLAG_ALLOCATE_AGGRESSIVE.)\n\nRewrite the core logic of DeviceStorageMonitorService to understand\nthis new \"reserved\" cache space, and to be easier to understand.  It\nalso now handles cached data on adopted storage volumes, which had\nbeen ignored until now.  Also fix bug where we had skipped \"low\"\nbroadcasts when the device skipped directly from/to \"full\" state.\n\nBug: 38008706\nTest: cts-tradefed run commandAndExit cts-dev -m CtsJobSchedulerTestCases -t android.jobscheduler.cts.StorageConstraintTest\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nChange-Id: Icbdcf3b52775f7ada1ceaeff2f96094c8d8052f9\n"
    },
    {
      "commit": "1de10d6602df4ab2a7769b69a57e472920ba7fee",
      "tree": "7ef92c3671854a29d2f1764a3f184ef6599ea1f4",
      "parents": [
        "131eaa7865edeead0373e339c51ce65b5f51cd15",
        "3051caac52729c8c059eb538805f4d274a9945a5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 24 20:38:51 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 24 20:38:56 2017 +0000"
      },
      "message": "Merge \"System installed launcher can see instant apps\" into oc-dev"
    },
    {
      "commit": "3051caac52729c8c059eb538805f4d274a9945a5",
      "tree": "71398994494ba033969da2a70e05aab29b121b87",
      "parents": [
        "d7a2c1c23bdd6547aa864e325792cd89ffde0c5e"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Tue May 23 15:54:18 2017 -0700"
      },
      "committer": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Wed May 24 07:34:55 2017 -0700"
      },
      "message": "System installed launcher can see instant apps\n\nChange-Id: I97f791b61f9b4f7ed33305345bf3d92394b40ae4\nFixes: 38202759\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.EphemeralTest\nTest: Manual. Create sample app that replaces the launcher to test ability to see ephemeral apps.\n"
    },
    {
      "commit": "303e4157ebe90d5ea51a98df2658930f6504b06e",
      "tree": "47f75106a8969a915d4709551c4e857bb57286df",
      "parents": [
        "a239ed1c79a55f5dc650a528a21fb696752c8049"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri May 19 10:31:52 2017 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri May 19 10:31:52 2017 -0700"
      },
      "message": "Fix NPE in usage stats manager (recent regression)\n\nChange-Id: I305bb64b11c9240dc0df5d7b08a9a970660157c8\nFix: 38430177\nTest: build and boot\n"
    },
    {
      "commit": "ad623015a119efe9b63f594af9c4703f40a0c27b",
      "tree": "c155e3ae4f41ce3f5798ad3117925c2e83195487",
      "parents": [
        "28f0fd7a2d5b26a728d72984a8cf69ac0fcc4400"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Mon May 15 09:29:34 2017 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue May 16 12:33:43 2017 -0700"
      },
      "message": "Restrict access to instant app data in usage stats\n\n- Events are obfuscated based on whether the app was instant or not at\nthe time each event was logged.\n\n- UsageStats are obfuscated based on whether each app is instant or\nnot at the moment.\n\nBug 38202133\nTest: Manual test using UsageStatsTest and instant apps\n\nChange-Id: I3c74309196b88d010d317cb0dd6749bf4624e876\n"
    },
    {
      "commit": "06823d4c2e0fc7d64bff5d3e155d690302e0ab80",
      "tree": "d36c58bd4302fbb1526c5982e0570a7b022d2034",
      "parents": [
        "00487cf9368df10aab90c5a194667ce56acb49e4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue May 09 16:55:29 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue May 09 16:55:31 2017 -0600"
      },
      "message": "Use \"real\" free space; refresh on large changes.\n\nFor volumes where the OS manages cached data, use the \"free space\" as\nreported by StorageStatsManager, which is the same value shown in\nthe Settings app and other UI elements.\n\nAlso, when the storage space changes significantly, invalidate anyone\nwho was holding a cached \"free space\" value.\n\nTest: builds, boots\nBug: 38146029\nChange-Id: I4b3a484a8bf32cd137a83f1ea441beca6dc6719a\n"
    },
    {
      "commit": "5a421ad0ef23675ca3140d3ae9d578c4b8baf0e8",
      "tree": "3582993360df94a9c046f6fdb7b3e0e838f87524",
      "parents": [
        "4566cb575620763d0233abf0eeca405677a5341b",
        "2abd66c4ffdb7905128b1ca245d4ccb97cbda1c8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Sun May 07 17:40:27 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun May 07 17:40:32 2017 +0000"
      },
      "message": "Merge \"Defeat @Nullable String[] with empty list.\" into oc-dev"
    },
    {
      "commit": "2abd66c4ffdb7905128b1ca245d4ccb97cbda1c8",
      "tree": "70d0080c5a63db021d96c416a0a94b49052abd8b",
      "parents": [
        "e44125cd3a5fc25306285bdfcacc00459e01307b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 05 15:26:13 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 05 15:26:25 2017 -0600"
      },
      "message": "Defeat @Nullable String[] with empty list.\n\nTest: builds, boots\nBug: 37577123\nChange-Id: I6bf1af565398c30aecc0939a23846c0f85c13ffe\n"
    },
    {
      "commit": "fd65813157e4dd7fa9f0b7c5dd4c8f536cc6316a",
      "tree": "5e475f046b4815f6b8bdb01eb96550d2608113c7",
      "parents": [
        "e44125cd3a5fc25306285bdfcacc00459e01307b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed May 03 11:38:01 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 05 14:58:47 2017 -0600"
      },
      "message": "Offer to wait until broadcasts have drained.\n\nWe\u0027ve seen evidence of lab devices racing with other apps that are\nusing cache space immediately after tests wipe it clean, which can\ncause test failures.  To mitigate this, try our best to wait for the\ndevice to go \"idle\" by watching for broadcast queues to fully drain.\n\nAlso improve javadocs along the way.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nBug: 37486230, 37566983, 37913442, 37914374\nChange-Id: I4d430db443b6fa6d33a625fe07b90279b5d51c12\n"
    },
    {
      "commit": "a4d34d971c9566a162a53e6b027ba2bc341ae5b4",
      "tree": "69112edf49564387b09dadb878e6f01edcfbb9aa",
      "parents": [
        "dd91a5636bec399be1f9e6af298bc667e0c25b09"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Apr 27 11:21:41 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Apr 27 11:33:39 2017 -0600"
      },
      "message": "Respond to API council feedback.\n\nMove aggressive allocation to @SystemApi, which means we can hide\nthe \"flags\" API variants.\n\nRemove UUID APIs, since we should use existing Serializable APIs.\n\nRelax permission checks to allow apps to ask for their own stats.\n\nImprove docs.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nBug: 37534687, 37534941, 37718184, 37738770\nChange-Id: I6a763fb3ab3169c8d3329765bb31e1ee08d9ced7\n"
    },
    {
      "commit": "0034788844fd053f87beee60092c1dd44c7046e2",
      "tree": "03ee8ec4a14408c8484b5d4b9dee8ec838f7e21a",
      "parents": [
        "2b499e4eba123baeb1ed7ba884c842623970ebd4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 17 16:44:12 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Apr 18 21:00:13 2017 -0600"
      },
      "message": "Fix code accounting bugs, track external app data.\n\nWhen counting code size, don\u0027t include APKs baked into the system.\n\nSettings already accounts external storage used by apps, so they\nneed a way to exclude that from the total space used by external\nstorage; give them new getAppSize() API.\n\nRefine docs to explain that emulated storage might be included in\nmeasured statistics.\n\nResolve symlinks as part of matching getUuidForPath().\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nBug: 35812899, 35844919, 37193650\nChange-Id: Iec3ce8b336b71dc98a7d25fdd30fa78e9ee826dc\n"
    },
    {
      "commit": "789a8fc792725e4988ff43d554b3c8c037c41921",
      "tree": "59122e26916919a481071b7348d5328e62d7d70c",
      "parents": [
        "d8837b6fca23847fcd4dd295ccbb33ef9d4edcec"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 16 13:18:35 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 17 12:19:50 2017 -0600"
      },
      "message": "Storage API polishing.\n\nBased on API council feedback, switch to using real UUID objects\ninstead of Strings.  Since UUID is a general-purpose utility class\nthat will be passed around quite a bit, add it to Parcel and Bundle.\n\nDefine well-known namespaced UUID values for \"default\" and \"primary\nphysical\" storage devices, which will let us annotate a bunch of\nthings with @NonNull.\n\nDefine new extras for MANAGE_STORAGE intent that apps can use to\nsignal where and how much space they\u0027d like the user to free up.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nBug: 37325923, 35812899, 35806020\nChange-Id: I8421b126d680f69141a361c1e77223fe2bf4a325\n"
    },
    {
      "commit": "b28c9d6b2d3b52d7c4ac1ad8c18591be99e92772",
      "tree": "fbd5324f1473544d19e938ef39ab8737377c92f8",
      "parents": [
        "eb93670383aa40ad7ed55861e667c08e8a3682a6"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Mar 30 15:46:01 2017 -0700"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Apr 06 14:32:13 2017 -0700"
      },
      "message": "Fix crash when measuring storage.\n\nIf we are measuring storage and a volume is removed at the same time,\nwe can enter a state where we previously verified the volume existed,\nbut it no longer does. This causes an NPE.\n\nBy adding in a null check, we can avoid this crash.\n\nChange-Id: Ib8dbf05102a122bdf4bb6063374e993a1de68425\nFixes: 36689190\nTest: None\n"
    },
    {
      "commit": "fd463121c64643557af5324a8f480677facab15b",
      "tree": "384675fe9a54b7092e58ef5758f6a64bcd25048c",
      "parents": [
        "e1df48d3a0922f928c0d3270324663c7b7f2fa2a",
        "dafb17e7eb9a15862ed1314dff2b82d29ad23632"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Apr 03 07:37:44 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 03 07:37:49 2017 +0000"
      },
      "message": "Merge \"We really want f_frsize and f_bavail.\" into oc-dev"
    },
    {
      "commit": "dafb17e7eb9a15862ed1314dff2b82d29ad23632",
      "tree": "768124a417e92a6b51f3844967dcc70581d81edc",
      "parents": [
        "21a5edcc24cbca1ae3f0855d71737b22ab81ad6d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 02 23:24:40 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 02 23:33:38 2017 -0600"
      },
      "message": "We really want f_frsize and f_bavail.\n\nIt\u0027s confusing, but f_bsize is not the value you\u0027re looking for; the\nreal block size is f_frsize.  Fix all those bugs.\n\nAlso, the vast majority of clients are interested in the usable\ndisk space, not including reserved space.\n\nTest: builds, boots\nBug: 36840579\nChange-Id: Ib1470389afd49c14cab62282ec1e978ebb2c4791\n"
    },
    {
      "commit": "6df866a8510af2776c48425a361f708ae7f5d7d6",
      "tree": "1e1db7717b7a7dc6e030c2f2eefb6c01ce541893",
      "parents": [
        "fe9a53bc45fd0124a876dc0a49680aaf86641d3e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Mar 31 14:08:23 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 02 22:29:07 2017 -0600"
      },
      "message": "Enforce PACKAGE_USAGE_STATS for usage data.\n\nSome system services are offering package usage data through both\npublic/system APIs and through dump() calls.  In principle, usage\ndata hould always be protected with PACKAGE_USAGE_STATS, so start\nenforcing that.  (Otherwise if a user blocked PACKAGE_USAGE_STATS\naccess to an app, that app could still obtain the data via dump()\nif they held the DUMP permission.)\n\nBottom line, let\u0027s respect the user\u0027s wishes.\n\nProtecting the entire output like this is pretty blunt, but future\nCLs can add more nuance to the output if desired.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsSecurityTestCases -t android.security.cts.ServicePermissionsTest\nBug: 32806790\nChange-Id: I46173562713bea7d89e12a4313c78eb52ea8d77d\n"
    },
    {
      "commit": "fe9a53bc45fd0124a876dc0a49680aaf86641d3e",
      "tree": "56d1ea4b6f0fe98fa628a72f197cefa0fbabcb22",
      "parents": [
        "21a5edcc24cbca1ae3f0855d71737b22ab81ad6d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Mar 31 14:08:23 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 02 22:29:07 2017 -0600"
      },
      "message": "Consistent dump() permission checking.\n\nThis change introduces new methods on DumpUtils that can check if the\ncaller has DUMP and/or PACKAGE_USAGE_STATS access.  It then moves all\nexisting dump() methods to use these checks so that we emit\nconsistent error messages.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsSecurityTestCases -t android.security.cts.ServicePermissionsTest\nBug: 32806790\nChange-Id: Iaff6b9506818ee082b1e169c89ebe1001b3bfeca\n"
    },
    {
      "commit": "2bdf134eff80d264ea57afe398612b56782f443c",
      "tree": "fd50b6d717dfe14646f7f6b0f50b0f98d59c738e",
      "parents": [
        "2858ad3a4b9d6c0a715ce1506eaec257b5d7cebd"
      ],
      "author": {
        "name": "Kang Li",
        "email": "kanlig@google.com",
        "time": "Fri Mar 24 17:29:18 2017 -0700"
      },
      "committer": {
        "name": "Kang Li",
        "email": "kanlig@google.com",
        "time": "Mon Mar 27 08:19:41 2017 -0700"
      },
      "message": "Move retention length of users\u0027 chooser selections to SystemProperties,\nto meet CDD requirement.\n\nbug: 33423136\nTest: manual - shared images in Camera. More CTS and GTS tests to be\nadded.\n\nChange-Id: I0e0c759bec11137e2290f4a43a92be8e97eef022\n"
    },
    {
      "commit": "b5a35b8181fc1fc0d854b69e42d277b89d87ad53",
      "tree": "04569308e86b66cd0d118ac35c663953c60262b2",
      "parents": [
        "20f0d091f72df85fa764b4d04f75e9d3bf42d537"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Mar 22 21:30:19 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Mar 22 21:33:53 2017 -0600"
      },
      "message": "Refactor cache behavior from \"atmoic\" to \"group\".\n\nUsing the word \"atomic\" has too much baggage relating to locking\nguarantees, so move to something softer.\n\nAdd isQuotaSupported() for CTS tests.\n\nMove CacheQuotaStrategy over to using SparseLongArray, which has a\nmore efficient memory footprint inside the system server.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nBug: 35812899, 35684969, 36482620\nChange-Id: I894f53e6f3bc76c77d1bb18c51db14833df14a49\n"
    },
    {
      "commit": "d3b1def2ebe1821212b9f110dff2fb0b15491e1b",
      "tree": "c58b7572953114a8c6fa615a2902cebe04716ec9",
      "parents": [
        "a98767ab7fdf94e2e677c583e931b2868d93f43c",
        "e730ae877a24d44f5b3db096f08b0a2d7399aa2d"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Mar 15 07:16:40 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 15 07:16:43 2017 +0000"
      },
      "message": "Merge \"Enable cache clearing v2 logic, fix bugs.\""
    },
    {
      "commit": "e730ae877a24d44f5b3db096f08b0a2d7399aa2d",
      "tree": "9b4dcc9d2e4ba38726ced0f55012cdc02a56e51f",
      "parents": [
        "b94427d2855c4fc5b62890fdb99ceca140b5034d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 14 23:37:35 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 14 23:39:03 2017 -0600"
      },
      "message": "Enable cache clearing v2 logic, fix bugs.\n\nNow that we have CTS tests to verify the cache clearing v2 logic,\nwe\u0027re ready to enable it!\n\nSwitch storage APIs over to \"usable space\" to match implementation\ndown in installd.  Add a missing clearCallingIdentity(), and offer\nbetter logging for missing appop permission.\n\nLoad quotas from disk right away at device boot instead of waiting.\n\nBug: 35685848, 35684969\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nChange-Id: I8167e0322b4662ca6c975da5c50715e2d71332a7\n"
    },
    {
      "commit": "6bb5d0fabbe9dfce3d1da8ae94bc1de470e01bb0",
      "tree": "b7800697f4af8b47bacd1c787fe0e0755058c1eb",
      "parents": [
        "b94427d2855c4fc5b62890fdb99ceca140b5034d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 14 11:02:33 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 14 11:03:09 2017 -0600"
      },
      "message": "Allow querying for apps on adopted storage.\n\nApps that live on adopted storage devices appear to be uninstalled\nwhile ejected.  They\u0027re technically still valid apps, with allocated\nUIDs, so use MATCH_UNINSTALLED_PACKAGES when querying for their\ndetails.\n\nTest: builds, boots\nBug: 36177795\nChange-Id: Ia7ed5f0462b1f47609ea8e1ace6fa145e0b5602c\n"
    },
    {
      "commit": "f02e97cb25ff7bc4a2bd46dbf271e59a7eafb867",
      "tree": "be88a9dad2a00ddc532ca2c7d5476a387c35449c",
      "parents": [
        "a813413a6e4bc4d0995f994f770bb909369684c3",
        "80fdb0149de107347f59b6badbf7386a166f4a92"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Mon Mar 13 22:08:10 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 13 22:08:13 2017 +0000"
      },
      "message": "Merge \"Hook up the cache quota query.\""
    },
    {
      "commit": "2572b967ba5c2f1d3ac5d9ef56a26fb388c3d940",
      "tree": "f16a1aee2e36534c09840e8e99ecad4f0e3a0710",
      "parents": [
        "51673a50e3198c48dbfc56c7c567c0660f92dafa"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Mar 12 16:25:20 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Mar 12 16:25:23 2017 -0600"
      },
      "message": "Offer flag to force manual calculation.\n\nCan be used to quickly pivot between manual and quota calculations\nwhen running CTS tests.\n\nBug: 35684969, 35441006, 34945234\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nChange-Id: I7500dde597a4f3cde20998df45c5d54a053181fc\n"
    },
    {
      "commit": "51673a50e3198c48dbfc56c7c567c0660f92dafa",
      "tree": "0b210fc128ffaad64c0710789c57b5aea92cd8d1",
      "parents": [
        "2cfdf62ed20016c6f64bba3ce6d7ec1c446c272f",
        "82add8a7145c864ce8a604e145ed6abcaa4640b4"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sun Mar 12 04:56:11 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Mar 12 04:56:16 2017 +0000"
      },
      "message": "Merge \"Fix two storage measurement bugs.\""
    },
    {
      "commit": "82add8a7145c864ce8a604e145ed6abcaa4640b4",
      "tree": "25d65a8fba9d912390a998830a1f264961201fc4",
      "parents": [
        "bd5e5e0d75b6c1dbca0da2d40e96c18f94e07ac4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Mar 11 19:44:16 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Mar 11 19:45:32 2017 -0700"
      },
      "message": "Fix two storage measurement bugs.\n\nFirst, every time installd starts up we need to invalidateMounts()\nto ensure we have valid mappings for quotactl() to work.  (Without\nthis forced invalidation, we were falling back to manual calculation\nafter an installd restart.)\n\nSecond, when calculating the disk space for an app, we need to use\nthe real appId deconstructed from the uid; oops!  (Without this we\nwere always trying to calculate the disk usage for UID 0, which\nforced us back into the slow-path.)\n\nBug: 36032444, 35706513\nTest: runtest -x frameworks/base/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java\nChange-Id: I1ca55e2b7670678ed55798e2e06857d727ce2487\n"
    },
    {
      "commit": "8025580449081ddd21f449f8719bc87d1cc9fc7b",
      "tree": "b698e714cde942bc3cb8235902fd13a2f9ec2fd3",
      "parents": [
        "cac01fea95925b6fb45a31d4ef4e2cb2a52662af"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Sat Mar 04 14:48:53 2017 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Mar 10 16:04:41 2017 -0800"
      },
      "message": "Update IUidObserver.onUidStateChanged to include procStateSeq.\n\nThis procStateSeq is associated with the process state change of\nan uid and will help in identifying if network policy rules have been\nupdated for a process state change.\n\nBug: 27803922\nTest: runtest -c com.android.server.am.ActivityManagerServiceTest\n      frameworks-services\nChange-Id: Iaab8d004f476b96f28d08c886c7b0a6b585b9fef\n"
    },
    {
      "commit": "80fdb0149de107347f59b6badbf7386a166f4a92",
      "tree": "077bb5585b22cad321a64d7e8fcd3439f6daf6e8",
      "parents": [
        "a9767337b09d0c4eb47c0588e754e9cd8c880b3f"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Mar 09 14:30:07 2017 -0800"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Fri Mar 10 12:31:07 2017 -0800"
      },
      "message": "Hook up the cache quota query.\n\nApps should now be able to get the real cache quota\nvalue, instead of a stock 64MB.\n\nBug: 33965858\nTest: Manually verified that an app recevied a non-64MB quota.\nChange-Id: Idba47ecba356ffb592694a0d5a72363f3d0e95d0\n"
    },
    {
      "commit": "045d07b47fdfd180735cd47606f3704e5c4a87bf",
      "tree": "2cf4830b616329ab710eecd23c078c86df2b2921",
      "parents": [
        "eb9e80ad4467e740da8e2d91043b41700ed28e9b",
        "68535229fc934d464baeaf3a12d8a34ab0dbc60e"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Fri Mar 03 21:35:13 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 03 21:35:18 2017 +0000"
      },
      "message": "Merge \"Persist the debug time correction flag.\""
    },
    {
      "commit": "e40da3c1b7d4eb810b6f067075dbbb011d02a379",
      "tree": "e9dedf06c95ab37db42ad3a180cb138c978972fb",
      "parents": [
        "e9f0fe9274cce675e09a117e3593601b9424ea51"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Mon Feb 13 17:19:43 2017 -0800"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Mar 02 14:22:24 2017 -0800"
      },
      "message": "Save/load calculated cache quotas to a file.\n\nThis will prevent us from unnecessarily redoing calculation work\nby loading the last caches on boot and shoving them down to\ninstalld.\n\nBug: 33965858\nTest: Framework services tests\nChange-Id: Ie94e269aa72bceb1ebe87911eaa42e2d826c1123\n"
    },
    {
      "commit": "68535229fc934d464baeaf3a12d8a34ab0dbc60e",
      "tree": "6508feabde3fecbcc49236c605b925cefe5c7e92",
      "parents": [
        "78eed31d2d8da2f6217290da5eee8ca4f5f903ac"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Wed Mar 01 15:24:37 2017 -0800"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Wed Mar 01 15:24:37 2017 -0800"
      },
      "message": "Persist the debug time correction flag.\n\nThis simplifies the QA process significantly more than\nI originally expected.\n\nBug: 34400961\nTest: Manual\nChange-Id: I5d26526e7ea9a7f16a00b7c2281c5b460f6bbbff\n"
    },
    {
      "commit": "19710527d7c3941b0af1815c1883e6a4d7e0f4f7",
      "tree": "9a28b627bde4c70933ffd4e13331b09cfaff9535",
      "parents": [
        "5a7c7b8e532e1a67596e74d0dead6baa63964bdb",
        "9acc4f40c8e31140c2034dc48b75d23dadf7e0c6"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Wed Mar 01 22:16:46 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 01 22:16:48 2017 +0000"
      },
      "message": "Merge \"Add a debug flag to disable time correction.\""
    },
    {
      "commit": "61d5fd7fee3250bdf4b6ddfbccbd6bceae9436c6",
      "tree": "db8b24f056ec037931c11f1f864a2a096e21cb54",
      "parents": [
        "2140cd6431266bdb17024c66bb93cf88ff7cc407"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 24 11:02:07 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 24 14:54:36 2017 -0800"
      },
      "message": "Reduce screen on delay during UsageStats rollover\n\nDecoupled the app idle book-keeping from usage stats lock, by\nintroducing an mAppIdleLock. This is used for all state related\nto app idle. In some cases, the locks will be nested, with\nmLock being acquired first and then mAppIdleLock.\n\nThis should fix the situation where a rollover, which writes to\ndisk and could take several seconds when the system is swamped,\nlike when the device just came out of idle and the screen was\nturned on (like this run-on sentence), causes calls from other\nservices for app-idle status to be blocked. This was resulting\nin a long time to turn on the screen.\n\nAlso fixed a dump indentation issue.\n\nBug: 34627115\nBug: 34961340\nTest: Manual, force into idle, increased rollover frequency,\n      and tested screen on time.\n\nChange-Id: Ie8b44e6f07f82d8a31f1b733a403dd9b6dc310f6\n"
    },
    {
      "commit": "9acc4f40c8e31140c2034dc48b75d23dadf7e0c6",
      "tree": "7893100aa17e28a6028b3d5f25912ac02bc6afcd",
      "parents": [
        "90f096f47508bf81f348f2181d80639747b6d90b"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Feb 23 12:36:03 2017 -0800"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Feb 23 12:36:03 2017 -0800"
      },
      "message": "Add a debug flag to disable time correction.\n\nThis allows manual QA folks to change the datetime to test events\nwhich depend on a large gap between uses of an app.\n\nCurrently, if the system detects a drift of more than 2 seconds,\nit will automatically correct the usage stats. This means that manual\ntime changes will cause the usage stats to update to match, making it\nimpossible to test manually.\n\nBug: 34400961\nTest: Manual\nChange-Id: Iffb92c929872d841d22f089ec71922bf120cc544\n"
    },
    {
      "commit": "6f2c1ea250f957b35c76bcc301d3513433de911f",
      "tree": "0fb9ab8bcdad6fcce6fdf003928265ab767ff6c6",
      "parents": [
        "415da7d2458e8b1819a42ebb8729ea6fe240c770",
        "373d01766f27476e81a174727dcfeee406742417"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Thu Feb 23 03:21:42 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 23 03:21:47 2017 +0000"
      },
      "message": "Merge \"Add queryStatsForPackage() API.\""
    },
    {
      "commit": "373d01766f27476e81a174727dcfeee406742417",
      "tree": "85b6058077b1abfbbafe86e6b12ce1c70e756a19",
      "parents": [
        "53d64fc839ad79be28d783f0f14082310a647dd9"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Feb 22 15:47:27 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Feb 22 15:48:51 2017 -0700"
      },
      "message": "Add queryStatsForPackage() API.\n\nThis gives developers a way to collect package-level stats, even if\nit means we have to use manual calculation for sharedUserId apps.\n\nAlso round size of storage devices to nice power-of-two values so we\ndo a better job of matching retail packaging.\n\nTest: builds, boots\nBug: 35294241\nChange-Id: I24946c443bb9dc4b0411a8149a0656702ac1fd24\n"
    },
    {
      "commit": "0f703e64e3e111048acb7abf5792d589ce1e3eb7",
      "tree": "851d60b4d112cb9b287e86bfdc1e61020932fc9e",
      "parents": [
        "2ce1160ed664515db6003ff4622a57c60c4ab22b"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Tue Feb 21 15:19:27 2017 -0800"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Wed Feb 22 11:24:10 2017 -0800"
      },
      "message": "Add a flag to enable/disable the cache quota calc.\n\nBug: 34770259\nTest: ServicesTests\nChange-Id: I74155203c4802b1a3b89117859002bf40b1ca435\n"
    },
    {
      "commit": "830d4b422db2f2ae4af17403ccd1d34fd6f0bd6f",
      "tree": "6a430df173b9fdc4db1504f3a0870bf5cbb36718",
      "parents": [
        "4a04f0fb91175cff3733b306b330c4205371ef46",
        "d5d5e926eb8ff2541a845d6a5657cee5e5c6e7b6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Tue Feb 21 20:56:56 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 21 20:56:59 2017 +0000"
      },
      "message": "Merge \"Clear cache space when allocating bytes.\""
    },
    {
      "commit": "d5d5e926eb8ff2541a845d6a5657cee5e5c6e7b6",
      "tree": "c0759391680cb107467f8a7626919c35c6727425",
      "parents": [
        "14fd9cebe9903a0199e724bd32977f50ca6d6a6f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Feb 21 10:51:23 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Feb 21 11:50:55 2017 -0700"
      },
      "message": "Clear cache space when allocating bytes.\n\nFleshes out remainder of allocation implementation, where we offer\nto clear cached data to satisfy the allocation request.  To prevent\nabuse, we never let apps allocate into either the minimum cache space\nor low storage space.\n\nClean up quota APIs to require the caller to pass in the path they\u0027re\ninterested in, and we resolve the underlying filesystem for them.\n\nDefines settings that can be used to tweak the minimum cache space.\n\nTest: builds, boots\nBug: 34690590\nChange-Id: I85bc07399f91ee4aa568a8a54c615646bf748ad4\n"
    },
    {
      "commit": "cf9d19e030830fd808d59f1c97edf65e66f675d6",
      "tree": "7d27e4f71ff44e24ce8aa36038dc5e88b4eb8a70",
      "parents": [
        "ceb250424a32ef45549fa728adcd766cb7c35b54"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Mon Jan 23 14:33:42 2017 -0800"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Fri Feb 17 10:26:16 2017 -0800"
      },
      "message": "First pass at adding the cache quota suggestions.\n\nThis currently integrates with installd, but not with\nany framework API to expose this information to apps.\n\nThe first pass, as per the design doc, adds a service\nwhich polls for large changes in the file system free space.\nIf enough spaces changes, it begins a recalculation of the\ncache quotas and pipes the information down to installd.\nThis calculation is done in the updateable ExtServices.\n\nFurther enhancements in later patches include integrating this\nto listen to package install and removal events, caching the\nlast computed quota values into an XML file on disk to load\non boot, and exposing the information to apps.\n\nBug: 33965858\nTest: ExtServices unit test\n\nChange-Id: Ie39f228b73532cb6ce2f98529f7c5df0839202ae\n"
    },
    {
      "commit": "7d5420eda7e3aa4d95ab0c0fdaecf95f2e39d2d7",
      "tree": "c38ef404f2c6eb4574bb8a78052559f6c0430a9b",
      "parents": [
        "470ecb2c6c72826a919d471cd3ae2cfce800f777"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jan 24 15:17:18 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jan 24 15:17:18 2017 -0700"
      },
      "message": "Enable kernel UID state updates.\n\nTest: builds, boots\nBug: 34364961\nChange-Id: Ia20c666063cb2e5cd91b401cc3be48fc83959010\n"
    },
    {
      "commit": "9bed070b0910aad8c5800cec731058911d20c3d3",
      "tree": "5d81d0fb19d0a68e797176448e41cb6c29a21615",
      "parents": [
        "dbb1176b4957857287801bbceef079a6562a3cdf"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 23 20:37:05 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 23 21:02:12 2017 -0700"
      },
      "message": "More APIs for cache status and behavior.\n\nAdd APIs for apps to query their cache usage compared to their\ncurrently allocated quota.  Since an app\u0027s private storage may live\non a different storage volume than the primary shared/external\nstorage, offer APIs to retrieve those values separately.\n\nAdd APIs to control two new cache purging behaviors:\n\n-- setCacheBehaviorAtomic() which causes a marked directory and its\ncontents to be treated as an atomic unit.\n-- setCacheBehaviorTombstone() which causes the OS to truncate\nfiles instead of deleting them.\n\nTest: builds, boots\nBug: 33811826, 33965858, 27948817\nChange-Id: I45de165623775c359f78b4ee544c2b5831b8d483\n"
    },
    {
      "commit": "063c454b07f7d4079731c60cff1ba4bf97d1f7ef",
      "tree": "c5dcec9474cea58952c0db0073582ab449598575",
      "parents": [
        "f96e22429cc5ce90b534581b83dd7c8bd099be13"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jan 19 20:25:03 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jan 19 20:25:06 2017 -0700"
      },
      "message": "Disable kernel UID updates until update lands.\n\nCurrent prebuilt kernel can result in the framework banging its head\nagainst the wall writing the first duplicate update; it does this by\nreturning 0 for write().\n\nWe can revert this or flip the flag once an updated kernel lands.\n\nTest: builds, boots\nBug: 33755020\nChange-Id: Idb3e5ad40e2e6681848b47ce2b29dff9db3d4f6f\n"
    },
    {
      "commit": "24caec2dad02056a2d903837f20ed2d17e9a1a59",
      "tree": "800a8ab38ff1f9406b7ea1b4af81f85b0f3cf55e",
      "parents": [
        "36fb17666f441e51ad76f532905b19181f4061d8",
        "f3b0ef2f40c01473710f5abfed4d2e911cd92372"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Wed Jan 18 04:47:02 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 18 04:47:04 2017 +0000"
      },
      "message": "Merge \"Write bg/fg status updates to kernel for stats.\""
    },
    {
      "commit": "f3b0ef2f40c01473710f5abfed4d2e911cd92372",
      "tree": "ebdc7fbf14cf1caceb55a527e171e9337cf4b74c",
      "parents": [
        "c70e581564c4500019b9f898713af96ec452fb08"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jan 17 18:31:03 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jan 17 18:41:03 2017 -0700"
      },
      "message": "Write bg/fg status updates to kernel for stats.\n\nNew procfs file written by the system_server to communicate fg/bg\nstate of UIDs to switch the statistics counter sets used.\n\nTest: builds, boots, counter sets updated\nBug: 34360629\nChange-Id: I3339a93bce6aec65779a4a4aee52f5328896bb29\n"
    },
    {
      "commit": "7d25fafea7b313cf3eee5bbf4eb959f4986ffce4",
      "tree": "a315ca88c0c1bf79d7eeb11c22d4d28904057229",
      "parents": [
        "eda5d5183e5bc0fc63027b77b7dfd7d407bf22d6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 16 20:58:40 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 16 20:58:43 2017 -0700"
      },
      "message": "Invalidate installd when mounts change.\n\nTest: builds, boots, common operations work\nBug: 34249218\nChange-Id: Ia893b43dd7ff6078d91df50a9e8d644583617982\n"
    },
    {
      "commit": "9fa2a2cd46e11be0ea50ad7be0d3dd2c9273f55a",
      "tree": "3c8c8e2672c3a3801fdf0bc2798688a2ce09e823",
      "parents": [
        "33f78f89ac96b48ff74c9499b2617a77fbeb475a"
      ],
      "author": {
        "name": "Kang Li",
        "email": "kanlig@google.com",
        "time": "Fri Jan 06 13:33:24 2017 -0800"
      },
      "committer": {
        "name": "Kang Li",
        "email": "kanlig@google.com",
        "time": "Fri Jan 13 17:40:44 2017 -0800"
      },
      "message": "Adds annotations to Intent, and enables ChooserActivity to rank apps\naccording to annotations.\n\nTest: Unit tests and manul tests. More unit tests to be added.\nChange-Id: I3cbfd0cc10007290585fa3e7e3c92e1731f1f7b8\n"
    },
    {
      "commit": "f0707fe34a60da70146db0c79738f93f2149c88c",
      "tree": "ebdaa1aa69f8b8b8a3cfc3455b999b984682b0d2",
      "parents": [
        "284d9401ac1dbbb5f2030a2968c15fd79575fda1",
        "d85d85394ef96489e0848edd72b275798281d779"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 13 19:36:44 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 13 19:36:46 2017 +0000"
      },
      "message": "Merge \"Fix a near instant stats permission check false negative.\""
    },
    {
      "commit": "2f0b45ab6021816752c42065991e71e5afadb162",
      "tree": "b33657e0322585d2aa22f482ad2f0df6e4b0b73c",
      "parents": [
        "6f773a0d8717162f81ff21d943baaa539a2d6c7e"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Jan 12 17:19:50 2017 -0800"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Jan 12 17:19:50 2017 -0800"
      },
      "message": "Initialize the Installer in the StorageStatsService.\n\nWithout this, the Installer never connects to the underlying\ninstalld service, which results in NPEs when the service is used.\n\nBug: 34261458\nTest: builds and runs w/o crashing\nChange-Id: I9222c26cf6e411710e07a74f29b019f7c5754316\n"
    },
    {
      "commit": "d85d85394ef96489e0848edd72b275798281d779",
      "tree": "3194acf113b5ba92ecfba24e49459cd6e348a4a9",
      "parents": [
        "6f773a0d8717162f81ff21d943baaa539a2d6c7e"
      ],
      "author": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Jan 12 16:10:57 2017 -0800"
      },
      "committer": {
        "name": "Daniel Nishi",
        "email": "dhnishi@google.com",
        "time": "Thu Jan 12 16:10:57 2017 -0800"
      },
      "message": "Fix a near instant stats permission check false negative.\n\nThe MODE_DEFAULT enforcePermission behavior fell through to\nthe switch default case, even if the calling permission was\ngranted.\n\nBug: 34258237\nTest: Manual\nChange-Id: I823fb4dc3657c15eb1fa3d12d4f4c7e1e9e21cd5\n"
    },
    {
      "commit": "8dedad31f7fa604028ee6d28963bcc564e76c467",
      "tree": "56b0761b6cc37c6e56b639358edde3d7efb6db00",
      "parents": [
        "bd439dcef072fd9a853a6bc9055cfa347ad7c969"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 09 18:21:21 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 09 22:30:58 2017 -0700"
      },
      "message": "Wire up storage stats API to installd.\n\nNow that installd has the implementation details we need, we can wire\nup the public APIs to use them.\n\nShuffle APIs around a bit so that StorageStats can be reused for both\nUID and UserHandle results, and rename StorageSummary to\nExternalStorageStats.  Provide getTotalBytes() and getFreeBytes() as\nfirst-class methods so we can answer those questions quickly without\npaying the cost of measuring external storage details.\n\nCurrent costs on a typical device with a test account after flushing\ndentry caches:\n\nqueryStatsForUid() manual: 6922ms\nqueryStatsForUid() quota: 525ms\n\nqueryStatsForUser() manual: 1686ms\nqueryStatsForUser() quota: 113ms\n\nqueryExternalStatsForUser() manual: 42ms\nqueryExternalStatsForUser() quota: 2ms\n\nFor verification purposes, a new \"fw.verify_storage\" system property\ncan be set to compute both manual and quota statistics, and log any\ndiscrepancies.\n\nTest: builds, boots\nBug: 27948817, 32206268\nChange-Id: I4ea3df3372a7379aa8cf4c20c44120c8f0702c15\n"
    },
    {
      "commit": "e8cece9f2010388e02d8f4b3150f25168f8b7d76",
      "tree": "d71c47bdfd720ca9c7d2bf35a24c82c2c2de9ba0",
      "parents": [
        "c9facc0a1f6f3facb7d67ddae9b8a04af78dad0c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 04 11:33:33 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jan 05 15:39:16 2017 -0700"
      },
      "message": "Initial API shape for storage statistics.\n\nThis API is designed to provide both UID-level stats and overall\nsummary data for a given storage device, as identified by UUID.\n\nThe use of UID-level granularity might appear a bit clunky, but it\nmatches other usage statistics (such as network and battery), and it\nallows us to implement it using an extremely fast quota kernel\nfeature.\n\nA future CL will wire up the implementation to installd.\n\nTest: builds, boots\nBug: 32206268\nChange-Id: I7b51877682d0370c2402c19346f57809f0e7ac53\n"
    },
    {
      "commit": "b431d715a3f266f0ce76453ec42d96b2763f41a1",
      "tree": "9387fabe8944964ea88a1da454fc8643715c3013",
      "parents": [
        "06fd71abdf4c76d5f4ec357146f61280fb5580fa",
        "53b4314ad9b43b1890cbd765b896ccb0f005fdeb"
      ],
      "author": {
        "name": "Kang Li",
        "email": "kanlig@google.com",
        "time": "Wed Dec 14 19:26:30 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 14 19:26:34 2016 +0000"
      },
      "message": "Merge \"Add Sharing Histories to UsageStatsManager.\""
    },
    {
      "commit": "53b4314ad9b43b1890cbd765b896ccb0f005fdeb",
      "tree": "73278aaa1286514a0f990503cd2dab43461b0154",
      "parents": [
        "2c0dc3e09429973f018f771cdecb7d4ecba48833"
      ],
      "author": {
        "name": "Kang Li",
        "email": "kanlig@google.com",
        "time": "Mon Nov 14 14:38:25 2016 -0800"
      },
      "committer": {
        "name": "Kang Li",
        "email": "kanlig@google.com",
        "time": "Tue Dec 13 17:35:38 2016 -0800"
      },
      "message": "Add Sharing Histories to UsageStatsManager.\n\nThis CL is for Android O Smart-Sharing (b/30982298). By this CL, sharing\ncounts are logged with UsageStatsManager.\n\nBug: 30982298\nTest: manual - shared images in Camera and texts in Chrome using a mobile device.\n\nChange-Id: I0b4aa0506f99b3083d140a48f7b4bdd5b1c5afb6\n"
    },
    {
      "commit": "0d1fd8d09163566d2c7eb72037f63b6404ada642",
      "tree": "2ddb1c58add6e3c1cb44ce95541da7c83018eda0",
      "parents": [
        "c1e6a12ab54926a4ef88880766492f18efc86f2c"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Oct 12 14:21:51 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 30 13:24:53 2016 -0800"
      },
      "message": "Secure MATCH_UNINSTALLED_PACKAGES across users\n\nIntroduce a new internal flag MATCH_ANY_USER for genuine uses\nof searching through all apps on the device.\n\nSome temporary accommodations for Launchers that reach across\nto the work profile until we have a new LauncherApps API to do\nthat officially.\n\nBug: 31000380\nTest: CTS tests added\nChange-Id: I2e43dc49d6c2e11814a8f8d1eb07ef557f31af34\n"
    },
    {
      "commit": "dc589ac82b5fe2063f4cfd94c8ae26d43d5420a0",
      "tree": "9021de8b2f115316bfe52185ef0768946e981b45",
      "parents": [
        "8c053ae1f6ffd531fc2b6070094202b59efe3818"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Nov 10 15:30:17 2016 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Mon Nov 14 11:27:12 2016 -0800"
      },
      "message": "Update usage of ActivityManagerNative.\n\n- Remove references to ActivityManagerProxy.\n- Add isSystemReady to ActivityManager.\n\nBug: 30977067\nTest: cts/hostsidetests/services/activityandwindowmanager/util/run-test android.server.cts\n      adb shell am instrument -e class com.android.server.am.ActivityManagerTest,com.android.server.am.TaskStackChangedListenerTest \\\n          -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner\nChange-Id: I07390b6124fb1515821f5c0b37baf6ae74adc8fa\n"
    },
    {
      "commit": "693d869b32b375a6b3812aa56145e334b3a8c219",
      "tree": "95617ce364c556d0ef7a465201740a10ef940777",
      "parents": [
        "1b6e3e48242258e1dafb1709c1f11acd5ee1b1fa"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Sep 13 14:24:01 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Sep 15 13:38:43 2016 -0700"
      },
      "message": "Handle charging state separately from temporary parole\n\nDon\u0027t use the parole state to deal with the plugged-in trigger.\nOtherwise standby apps will only be paroled for a few minutes\nafter plugging in to charge and not the entire duration.\n\nUse a different intent for charging state, since the CHARGING\nintent takes several seconds to be received.\n\nA refactor some time ago changed the charging state behavior\nthat caused this regression.\n\nBug: 31399882\nChange-Id: Ic036de5e136b3151b225473d0c3f440adb3b48e7\n"
    },
    {
      "commit": "f2d87eba750d15093c996c1dbae7b755a7462478",
      "tree": "b009efddccd9452b0680a3c046095269dde887cf",
      "parents": [
        "ee4ff424ea01425e2b647a3017303442e52740aa"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Aug 17 15:21:16 2016 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Aug 17 16:42:46 2016 -0700"
      },
      "message": "AppIdleHistory: Only write screen on durations during regular sync\n\nStop writing to disk every time the display goes off. Only write to\ndisk periodically.\n\nConsequences\n\nPreviously, if the device rebooted after the screen duration was written\nto disk, apps would appear more stale than they actually were.\n\nNow apps will always look fresher, which is a better scenario.\n\nBug:30807864\nChange-Id: Ia69a2e51fc9e397789215b449fae56fa3e29c74a\n"
    },
    {
      "commit": "589fca469f8368fec886c6e6e37605a4b805bee8",
      "tree": "b4b63d2ad48ef058e932abe52c82f7751f0d37f4",
      "parents": [
        "4595bc7f12cadfc0ec7b1f9fe0945fd2e45fb425"
      ],
      "author": {
        "name": "Tony Mak",
        "email": "tonymak@google.com",
        "time": "Thu Jul 14 15:30:18 2016 +0800"
      },
      "committer": {
        "name": "Tony Mak",
        "email": "tonymak@google.com",
        "time": "Fri Jul 15 03:41:41 2016 +0000"
      },
      "message": "Whitelisting device provisioning package from app standby\n\nChange-Id: Ib9cb7a3fdf7aa16a97f22eacbed872880b7f9fbe\nFix: 29892977\n"
    },
    {
      "commit": "ac042501c816fa9a65aed005060ebdcfc0a0f3b2",
      "tree": "cc0dd336476e766ca94289ad056a2530cb02246c",
      "parents": [
        "f6be4c023fbd29d14fdd0b8df6b939b8a46cf553"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri May 20 16:39:42 2016 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Jun 02 15:57:40 2016 -0700"
      },
      "message": "ShortcutManager: Implement usage report API\n\nBug 28536054\n\nChange-Id: I293e8eaad523e3b0d76d562fc381601633451ed3\n"
    },
    {
      "commit": "5fb47f3ed745c27ded5f901966aeefe077d98b3f",
      "tree": "5b3c7563bd3021065d9d99fb5a8b67caa587a309",
      "parents": [
        "d30606575783acd8689cfac604cba51e537b6b77"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 11 13:02:08 2016 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 11 13:02:08 2016 -0700"
      },
      "message": "Fix issue #28118215: Crash during system boot due to null carrier apps\n\nChange-Id: I607ccc4baf769c2fb78b0d745bf9fddc3d240855\n"
    },
    {
      "commit": "ae4cde1ccebd41c9ca1af555c0a1a2580c3d7e1c",
      "tree": "3e75223f97303082ba25af95e283ec727639f1fe",
      "parents": [
        "0fd0f893dd5fc45f14ef1c33f359cd7fcbb52432"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 06 15:21:31 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 06 15:21:31 2016 +0100"
      },
      "message": "Do not update idle apps on OTA\n\nModifies the PackageManagerService.updatePackagesIfNeeded to filter\nout packages which are considered idle by the UsageStatsManager.\n\nBug: 27902702\nChange-Id: I8847dfc283e0246265009effb6394bb774848eb3\n"
    },
    {
      "commit": "bdda1e076eb30bf88749a1a349f9bb6f52434ecd",
      "tree": "7ec46f42d37be538833cb0143ebdda2fb35c5cad",
      "parents": [
        "79936ddda4c8d1709f736cda013070c3ab32db6f"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Mar 14 11:55:38 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Mar 14 11:55:38 2016 -0700"
      },
      "message": "Clear app idle state for removed packages\n\nOn a package being added or removed, remove\napp idle state for the app.\n\nBug: 27570398\nBug: 26182816\nChange-Id: I14bdc1f951bbd99bda8111bea56f8c9dda04148d\n"
    },
    {
      "commit": "c53962d4ede82a03b62f0c8bb86bd0da090a15eb",
      "tree": "fc9880dd6d706cf1f96a6976cbceca17a6d0cd1e",
      "parents": [
        "f7d47f91feeffb75761b339cb14c631cc18d3728"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 01 19:27:23 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 01 19:29:16 2016 -0700"
      },
      "message": "When system server goes down, crash apps more.\n\nApps making calls into the system server may end up persisting\ninternal state or making security decisions based on the perceived\nsuccess or failure of a call, or the default values returned.\n\nThe reality is that if the system process just died, init will be\nalong shortly to kill all running apps, so we should have no problem\nrethrowing the RemoteException as a RuntimeException.\n\nBug: 27364859\nChange-Id: Ife0bcb079636c88d54c44d17eb580409fd79028b\n"
    },
    {
      "commit": "4ec6368f13a53906757283d50a17ed3ed43eccc4",
      "tree": "615cb9e92bb489bb4f8770ffd419348657c2b8d1",
      "parents": [
        "b799d3f127f7410e8d0afe16343032e6115750fc"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 19 12:55:27 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Feb 24 11:30:00 2016 -0800"
      },
      "message": "Optimize calls to TelephonyManager to check for privileged apps\n\nCalling into TelephonyManager each of hundreds of apps to check\nif the app is carrier privileged was very expensive, especially\nwhen there aren\u0027t even any carrier access rules specified. This\nchange fetches all the carrier privileged apps in one call,\nreducing the number of IPC calls to the radio process and checks\nthe package names locally.\n\nIf the carrier rules change or packages are modified, the list\nwill be computed and fetched again.\n\nOther optimizations in Telephony help speed up the individual calls\nto check if a package is privileged, as well.\n\nBug: 27271861\nChange-Id: I5a77b6da4f2cdc603d2a73bd8569c5c38f06b42d\n"
    },
    {
      "commit": "b1e153bcd246f838c336855e1f4c8142625eefed",
      "tree": "cd50bf7adfd1a8baa65a84bcb2617d7d27580707",
      "parents": [
        "0137c3daf4bdd3154b71d9b34536960c424fc422"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Feb 18 11:07:01 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Feb 18 11:22:30 2016 -0800"
      },
      "message": "Reduce locking duration when checking idle states\n\nSynchronize only the methods that need to be, so that\nthe lock is not held for a few hundred milliseconds, blocking\nother usagestats operations.\n\nBug: 27208519\nChange-Id: I43bda0791dd8b2576a8af506bcdc67a09a5830f2\n"
    },
    {
      "commit": "ca5d6d2a814fbe4bceffa01b8c18ac05f70fbba0",
      "tree": "e7d6b85fa3abd3ad4bd30698efbcb57499370633",
      "parents": [
        "e4735a99598bf29847a9f12dd7fae6d7df880bc4"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Feb 16 13:58:46 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Feb 17 13:36:48 2016 -0800"
      },
      "message": "Clean up App Standby code\n\nDon\u0027t continue to check idle states for removed / stopped users.\nNo need to check for uninstalled packages for all users.\n\nBug: 27208519\nChange-Id: I9a3a3bbec560dd380ce90df9fef102d7f62769ca\n"
    },
    {
      "commit": "c170204541d7b424ff04c9420c984c6e0f6165f1",
      "tree": "89e6ae67e07a149dd2173a6bf19571cd5b5ed0f1",
      "parents": [
        "25222f55f28221d49a984db465f94e9716635ad8",
        "e35ae5cce1bcc1841b433ed1c5bef0a5c911cf15"
      ],
      "author": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Sat Feb 06 19:42:14 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Feb 06 19:42:14 2016 +0000"
      },
      "message": "Merge \"UsageStatsBackup Bug Fix\""
    },
    {
      "commit": "a93542f9d341897f3206f775fd5720663b17504f",
      "tree": "9fe0d52848f824b84388a41fcaa891397b1a4e94",
      "parents": [
        "a37278b0a6ce94f06fd403155e17b7d42606741b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Feb 03 18:02:06 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 05 11:38:29 2016 -0800"
      },
      "message": "Rewrite app standby stats\n\nDon\u0027t mix up with usage stats. Keep a separate db and history\nbased on elapsed time and screen on time.\n\nUnit tests for AppIdleHistory class.\n\nBug: 26989006\nChange-Id: If343785b46da1db67f7c1c1263854c2732a232c6\n"
    },
    {
      "commit": "e35ae5cce1bcc1841b433ed1c5bef0a5c911cf15",
      "tree": "1605948cb19a4cb9f575542737fb2743876ab983",
      "parents": [
        "ee081d5bd0fdbe7224382da7ce388b9d21f21c78"
      ],
      "author": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Wed Feb 03 17:06:57 2016 +0000"
      },
      "committer": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Thu Feb 04 11:48:02 2016 +0000"
      },
      "message": "UsageStatsBackup Bug Fix\n\nFixed a bug which caused a null pointer exception on restore\nin deleteDirectoryContents() method.\nAlso made other cosmetic changes.\n\nChange-Id: I75712ec585fdfdbca462c468acf2229a47331b59\n"
    },
    {
      "commit": "538c11cf2175d4e30337e8776401bfede85866be",
      "tree": "b316e0ddf79049891fc34a356e4d69b152e39fe2",
      "parents": [
        "f3e5d1d483231d615f5e77032f787fcd8047488b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 29 10:45:45 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 29 10:46:09 2016 -0700"
      },
      "message": "Hack to get devices booting again.\n\nIf we try scheduling a pass before the system is ready, record a\npending event and dispatch once we\u0027re actually ready.\n\nBug: 26863668\nChange-Id: I028285383c8bbe8b653aeaa7544eefe3d41277bc\n"
    },
    {
      "commit": "63668e8ab04c1eb05b8d63371c3547677129f1b9",
      "tree": "ef1b6c627826da5d21731f04de0ff498c2999d77",
      "parents": [
        "26387474faacc3ba9e1f19fb719db728f1b0a85a",
        "5142a2d5b3f70c2017792ce04d3f254221ab3d21"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 28 11:55:58 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 28 11:55:58 2016 -0800"
      },
      "message": "Merge commit \u00275142a2d5b3f70c2017792ce04d3f254221ab3d21\u0027 into manual_merge_5142a2d5b3\n\nChange-Id: I6681b0e132e95bd7e861e183e7369b4da07738eb\n"
    },
    {
      "commit": "b2d3ffaa208e341b67285e761e58ea39df89f906",
      "tree": "0cb8a2bcb556cf3723b5627d925e35311b208265",
      "parents": [
        "dca8f10031f33c7c85577fa1abcc26d560c90388"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 26 18:18:19 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 27 17:51:47 2016 -0800"
      },
      "message": "Don\u0027t change screen on time on time changes\n\nScreen on time should be measured in elapsed realtime, not wallclock.\n\nCause a checkIdleStates to occur when reloading stats\n(on rollover and on time change).\n\nWhen time changes occur in the negative direction, the new stats file\nwe create can overlap the previous one with regards to its end timestamp.\nUse the begin timestamp to determine which of the latest stats to merge.\n(b/22716352)\n\nBug: 26488100\nChange-Id: If31b29bbbee9e98401205b5e26bce86e181286e7\n"
    },
    {
      "commit": "8a6ce2cb64f4d61ee426240c539dc8b00dac857f",
      "tree": "6aefc2addb2adec4274609aa488c805baf6d92bd",
      "parents": [
        "6cfdf6b67aede52c9fffd98315925d9368943b8b"
      ],
      "author": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Thu Dec 17 17:03:54 2015 +0000"
      },
      "committer": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Tue Jan 26 20:29:15 2016 +0000"
      },
      "message": "Enabled Backup/Restore of Package UsageStatistics\n\nBacking up UsageStatistics using a new API in\nUsageStatsService like the Notifications backup.\nThe backup logic is in the same package as UsageStatsDatabase\nwhile the BackupAgentHelper resides in the android package\nalongside SystemBackupAgent.\n\nBug: 26179323\nChange-Id: I022d85fbcd4abb763230bec6eea50a7e723b5152\n"
    },
    {
      "commit": "9b4716b531a26b2db4eeae307e20a38668ae6a21",
      "tree": "881dbb8ad52daeb33beae204ea32df742fd3ddc4",
      "parents": [
        "1ed9046617480ff6e9cb8c878e4b772a90efc405",
        "375901244c051d85a63d7ca83807e5f1ca7a5d0a"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jan 22 21:49:37 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jan 22 21:49:37 2016 +0000"
      },
      "message": "Check apps idle states on time changes am: c465e71cdc am: d4bd4cb4b1\nam: 375901244c\n\n* commit \u0027375901244c051d85a63d7ca83807e5f1ca7a5d0a\u0027:\n  Check apps idle states on time changes\n"
    },
    {
      "commit": "c465e71cdc401e1565c29a895a5c6d366ba5344c",
      "tree": "1c6e2c858d8fe1efdf2bf55de9f1f736e57a181f",
      "parents": [
        "a6855a1faa898da0f4a4fdc45485dc1f4182497b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jan 22 11:27:16 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jan 22 11:27:16 2016 -0800"
      },
      "message": "Check apps idle states on time changes\n\nAnd ensure that the listeners are informed of app standby transitions\nthat might occur during time changes.\n\nFix for apps that sometimes don\u0027t have network access until reboot.\n\nBug: 26488100\nChange-Id: Ic342c188a6cd19faee88f50b2c6a342a6968cb23\n"
    },
    {
      "commit": "89a697a7e78de121a228b5a8d08a86ee76a40f1c",
      "tree": "68013d25bfbc9dcf8313b4c65f239485b3284f0f",
      "parents": [
        "1121576a6efb593fac7be1380d8d706b02e811f5",
        "6a8c328d7386d19f4590dfbfc71338b1ec208fb7"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 14 01:05:24 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jan 14 01:05:24 2016 +0000"
      },
      "message": "Merge \"UsageStats: Use new settings key idle_duration2 for app idle\" into mnc-dr1.5-dev am: d2e215978b am: a5c7106017\nam: 6a8c328d73\n\n* commit \u00276a8c328d7386d19f4590dfbfc71338b1ec208fb7\u0027:\n  UsageStats: Use new settings key idle_duration2 for app idle\n"
    },
    {
      "commit": "f0ef3c112683e4e04406f0355de34f4f1ac20386",
      "tree": "e722396dc8b10e54f8810d34333879ed0376317b",
      "parents": [
        "a5c53291a8123fa0296c849fe153a7dcf79b4dda"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 13 12:26:07 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 13 12:48:50 2016 -0800"
      },
      "message": "UsageStats: Use new settings key idle_duration2 for app idle\n\nIgnores the old, re-appropriated key \"idle_duration\" which is now\nset to a high value in order to force disable app idle on devices\nwith bug b/26355386\n\nBug:26355386\nChange-Id: Iff9de843ad6e547d29c1583687fc7f7ce7e15090\n"
    },
    {
      "commit": "7856f3c283e6332c22d5cee41d2e673e1dfe09f8",
      "tree": "d47cb46fcf38e6e625b05132067ae0a125d63f05",
      "parents": [
        "4fce66668e45429bbba49b9fb35d3b8d095a466c"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 13 11:03:35 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 13 11:03:35 2016 -0800"
      },
      "message": "UsageStats: Fix issue where initializing data for first time would cause crash\n\nWith the updated rolling window of stats for app idleness, we need to make sure\nit is populated before we initialize some defaults.\n\nNow that we look at older entries to figure out idleness, if those\nentries are in the future (due to time change), set them to the current\nscreen on time.\n\nBug:26504153\nChange-Id: I4c21e8f094a1a6727373368d043f523053280d7d\n"
    },
    {
      "commit": "76e9d76c22fe164f301e85ebbcbdd4cae26fca71",
      "tree": "e6117901a49f9fc7b70a222b4a4b58bc1a06ceff",
      "parents": [
        "d9434699e4ef8c528ce01223ee9ef200bfd693e4"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 12 10:36:09 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 12 16:52:45 2016 -0800"
      },
      "message": "UsageStats: Fix issue where initializing data for first time would cause crash\n\nWith the updated rolling window of stats for app idleness, we need to make sure\nit is populated before we initialize some defaults.\n\nNow that we look at older entries to figure out idleness, if those\nentries are in the future (due to time change), set them to the current\nscreen on time.\nBug:26504153\n\nChange-Id: Ia22add0e8eaf0f137002bbe3e91d747fef5b7d69\n"
    },
    {
      "commit": "881f6f9266ca15e7c6302d659b07d06ecfe40300",
      "tree": "c7f7d65670f09c223c5376ab87a9f112845a3eb9",
      "parents": [
        "de41d3cd5a28cce3ba7f0fa23ba7c41ef93b223d",
        "551fc6823a86e2f038b100f63c02f45bab40fdf4"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 12 16:41:48 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 12 16:41:48 2016 -0800"
      },
      "message": "resolve merge conflicts of 551fc6823a to master.\n\nChange-Id: I2778bf2a364c103fc0d351f2afc4fc73bede2f19\n"
    },
    {
      "commit": "da4a3775735ffc0fa510031f75bc459b764b259d",
      "tree": "d14fbecb3b31f5b58a3ca1c1df37d71c76d7699b",
      "parents": [
        "c2ec3f1bbe7271be2126b48fc94acc42a37f43f2"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 07 18:24:53 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Sat Jan 09 05:58:52 2016 +0000"
      },
      "message": "UsageStatsService: Fix app idle issue at rollover time\n\nApp Idle queries are very frequent and so they only check in memory stats.\nHowever, in memory stats can be missing some entries, especially after a rollover, but also\ndue to a larger bug fixed in master (too risky to take now).\n\nThe fix is to do a deep query (reading older files from disk) and maintain a parallel cache\nof stats for app idle. That way the rolling window of data required to serve app idle queries\nstays in memory.\n\nBug:26355386\nChange-Id: I2dd3946b45d7d893410715bb0534b2b48694ced6\n"
    },
    {
      "commit": "cd65448ccd13c4c2d0fe9e9623fec3a898ab9372",
      "tree": "da60bd6e2d928bfe7119258f8908d8360166f2c0",
      "parents": [
        "629f98466a4c2d778ddd4ce5a9df107e28f9b98a"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 08 17:42:11 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 08 18:35:54 2016 -0700"
      },
      "message": "Even more PackageManager caller triage.\n\nFinish moving all UID/GID callers to single AIDL method that requires\ncallers to provide flags.\n\nTriage AppWidgets and PrintServices, which currently can only live on\ninternal storage; we should revisit that later.\n\nFix two bugs where we\u0027d drop pending install sessions and persisted\nUri grants for apps installed on external storage.\n\nBug: 26471205\nChange-Id: I66fdfc737fda0042050d81ff8839de55c2b4effd\n"
    },
    {
      "commit": "c5967e9862489024c932b0c7fcb84ed0af2a7fd7",
      "tree": "1387b9d38e6591a59022af167cc4d2625c769a31",
      "parents": [
        "f0e4daecc9eccccd7aa2c48b2166f0681381cff9"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jan 07 18:50:29 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 08 16:10:33 2016 -0700"
      },
      "message": "More progress on triaging PackageManager callers.\n\nCatch a bunch of simple cases where the PackageManager flags are\nobvious.  Add the ability to use the MATCH_SYSTEM_ONLY flag on\nPackageInfo and ApplicationInfo queries.\n\nRe-examine recent tasks after a user is unlocked, since some of the\nactivities may now be available and runnable.\n\nBug: 26471205, 26253870\nChange-Id: I989d9f8409070e5cae13202b47e2c7de85bf4a5b\n"
    },
    {
      "commit": "e06b4d1d9f718b9fe02980fea794a36831a16db2",
      "tree": "cfef7d72c17fc71b008f0c9a8f08d49553a30e16",
      "parents": [
        "2a90f673f5819e05ea72f6aba3e75956e0f807dc"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 06 14:51:50 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 06 15:21:06 2016 -0700"
      },
      "message": "Consistent naming for PackageManager methods.\n\nWhen hidden PackageManager methods take a userId argument, they\nshould be named explicitly with the \"AsUser\" suffix.  This fixes\nseveral lagging examples so that we can pave the way to safely\nstart passing flags to new methods without scary overloading.\n\nAlso fix spacing issues in various logging statements.\n\nChange-Id: I1e42f7f66427410275df713bea04f6e0445fba28\n"
    },
    {
      "commit": "8877120173fd62d6701822471f06fe84e992c2ae",
      "tree": "5fc122441d8217fccce2fb7dc8c8a9d337441b04",
      "parents": [
        "c99c41781c69d2cfef411c531cf879e84ca62a74"
      ],
      "author": {
        "name": "Mark Lu",
        "email": "Mark_Lu@htc.com",
        "time": "Fri Nov 06 15:26:15 2015 +0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Dec 18 00:03:16 2015 +0000"
      },
      "message": "Fix system watchdog timeout when reading too many usage events.\n\nSymptom:\nAs issue link:\nhttps://code.google.com/p/android/issues/detail?id\u003d193100\n\nRootCause:\nUsageStatsService.onDisplayChanged executed in system main thread,\nIf calling UsageStatsManager.queryEvents with too many events before it\n(i.e. in daily usage event file,\ntoo many activity resume / pause events or configuration change\nduring monkey test),\nSystem will be blocked then watchdog timeout.\n\nSolution:\nLet display listener executed in background thread handler\n\nBUG: 25355086\n\nChange-Id: Ic894d112612400ed8fb7ba843b3309fdc4f66fe1\n(Cherrypicked from 4e59db328d8b0cc163d2e3eb0f7f3a108f20a58d)\n(cherry picked from commit 7018f60b06fd0c647ebf13225320d7e15d02e075)\n"
    },
    {
      "commit": "ccf7d9e8ce11fd44e5b70b375ce25bed93e7153c",
      "tree": "c82cc47052c38f2e9c785eb4f84c1c24fab01e77",
      "parents": [
        "669692234b095371790af3a8a8054ba4af79b283"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 12:46:02 2015 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 12:53:26 2015 -0800"
      },
      "message": "Use correct lock for reading/writing usage stats files\n\nBug: 25355086\nChange-Id: I65946e5afa841215f161fc25ad70b31a108a33c3\n"
    },
    {
      "commit": "bdb94fe2ce45325f2f569f76a85f8183d0fc7488",
      "tree": "20d668e854334924a9388d63f8dadabf42e10bab",
      "parents": [
        "0fecb5b008c06273fac5b9b6f425476271283b99",
        "f12ffe6d762f281cbda56322be83a1da80b707ea"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 20:45:29 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 11 20:45:29 2015 +0000"
      },
      "message": "Merge \"Fix system watchdog timeout when reading too many usage events.\" am: 10b0bae06f am: b3d48f18a9\nam: f12ffe6d76\n\n* commit \u0027f12ffe6d762f281cbda56322be83a1da80b707ea\u0027:\n  Fix system watchdog timeout when reading too many usage events.\n"
    },
    {
      "commit": "f12ffe6d762f281cbda56322be83a1da80b707ea",
      "tree": "2f783cd0e81d23c2bb533f5f7bb2e29f01d8bedd",
      "parents": [
        "3210b8b4da3c745420d3010028f2bb7071044262",
        "b3d48f18a94c586823462c93fc0f739c83f3db78"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 20:38:15 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 11 20:38:15 2015 +0000"
      },
      "message": "Merge \"Fix system watchdog timeout when reading too many usage events.\" am: 10b0bae06f\nam: b3d48f18a9\n\n* commit \u0027b3d48f18a94c586823462c93fc0f739c83f3db78\u0027:\n  Fix system watchdog timeout when reading too many usage events.\n"
    }
  ],
  "next": "b3d48f18a94c586823462c93fc0f739c83f3db78"
}
