)]}'
{
  "commit": "4babfc4ee6d27318d79c1c628d16c07b0b6cd0b5",
  "tree": "d91018f66a605edd5ddf661803b80c1590465f9b",
  "parents": [
    "20b7ccbd72f8ff8fba254115e4c54fb00c0fd440"
  ],
  "author": {
    "name": "Dominik Laskowski",
    "email": "domlaskowski@google.com",
    "time": "Fri Feb 16 12:28:40 2024 -0500"
  },
  "committer": {
    "name": "Dominik Laskowski",
    "email": "domlaskowski@google.com",
    "time": "Fri Feb 23 11:03:35 2024 -0500"
  },
  "message": "SF: Remove ConnectionHandle concept in Scheduler\n\nThis abstraction never made sense, and only incurs pointless locking and\nhash map lookups. This is a step toward replacing the two EventThreads\nwith a single EventDispatcher.\n\nStart the Scheduler\u0027s timers after initialization. This solves the same\nbug as Ib2617b914145bc4180cc7ca27203c59dbd625c94, which avoided crashes\nwithout fixing the root cause of the race.\n\nIn a few cases, initScheduler indirectly calls Scheduler functions that\nattempt EventThread dispatch before EventThread creation, so skip those\nEventThread accesses using hasEventThreads for now. Further refactoring\nwill untangle circular dependencies and remove hasEventThreads.\n\nBug: 241285191\nBug: 241285945\nTest: presubmit\nChange-Id: I89b93b47540ab24bb5675edc79370f38bc48114f\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6979f0399b3ff0f95fc83959f215edf4bb2527d2",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/Scheduler/Scheduler.cpp",
      "new_id": "e6c58a304eb395965db17217212f451945216760",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/Scheduler/Scheduler.cpp"
    },
    {
      "type": "modify",
      "old_id": "9f29e9f6962813f8686d60bee40c6a5cbfc8a455",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/Scheduler/Scheduler.h",
      "new_id": "71df507a00ccee93064b31a2e1ae53e0cdd56d5f",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/Scheduler/Scheduler.h"
    },
    {
      "type": "modify",
      "old_id": "edba50bde6c009d11824121e4e4a2454c8f05c91",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/SurfaceFlinger.cpp",
      "new_id": "4344494e38f030b7652f71051caa779f0baa3365",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/SurfaceFlinger.cpp"
    },
    {
      "type": "modify",
      "old_id": "be057979f902ec43e1d2080f13cd7d1dcfafcfcf",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/SurfaceFlinger.h",
      "new_id": "b01d1aa0e884e0a260d415a63fa53224c7562938",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/SurfaceFlinger.h"
    },
    {
      "type": "modify",
      "old_id": "b0595257a92d4d21a4f9a2c0edd2552c12d29ea3",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/SchedulerTest.cpp",
      "new_id": "10e2220ece54e1a9ad45283bf9cd1cc4873cc58e",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/SchedulerTest.cpp"
    },
    {
      "type": "modify",
      "old_id": "25a85dfa20607e5a3058f9620a60b589037b07b9",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/TestableScheduler.h",
      "new_id": "1472ebf009a23a3169c5f3b8534470414e735978",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/TestableScheduler.h"
    },
    {
      "type": "modify",
      "old_id": "46a079cfa1c711815446722d064177fe5e0ac89a",
      "old_mode": 33188,
      "old_path": "services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h",
      "new_id": "bce7729d80c40820bf5619b47361539968f1a2cb",
      "new_mode": 33188,
      "new_path": "services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h"
    }
  ]
}
