)]}'
{
  "log": [
    {
      "commit": "21be43e142a6fcb3283d7b2da14eb39b690cf643",
      "tree": "a2065bc793185d1fc364d740412428e7d8bafe94",
      "parents": [
        "9fde9a250fffc15c6bcdfc985de12c8646a9813c"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Aug 14 10:25:16 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Aug 15 00:36:11 2014 +0000"
      },
      "message": "Fix hwuitask \u0026 RT priorities\n\n Bug: 15993695\n\nChange-Id: Ib6f07237cb834e8d10f3074f8fb206d27f91859a\n"
    },
    {
      "commit": "05f3d6e5111fd08df5cd9aae2c3d28399dc0e7f5",
      "tree": "14df3cad82b02a886b8e3a04fd4ec249e1d403e4",
      "parents": [
        "faecafce62ca39a7693669f7c9eabf2d71c633cf"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 02 16:27:04 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jun 10 01:53:17 2014 +0000"
      },
      "message": "Tessellate on worker threads\n\nTessellate and cache (where possible) shadow and round rect\ntessellation tasks.\n\nChange-Id: I2cfda8e11d83d51ea74af871235cf26e8f831d40"
    },
    {
      "commit": "0a8c51b1d0d66d6060afcec1eab33091d49332ae",
      "tree": "28e92fa12d2a53e6521469cc8ef6c5024b7cc5b2",
      "parents": [
        "627c6fd91377ead85f74a365438e25610ef1e2ee"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 17:35:38 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 17:35:38 2013 -0700"
      },
      "message": "Properly account for created paths in the cache\n\nChange-Id: I47b89b3085cefab6daac9194e7bfd3c140b37fa2\n"
    },
    {
      "commit": "c5cbee7d78513527e89450e6369a30a04b2d5e7a",
      "tree": "a3709dd93124509c4490b889622b277d11fbef30",
      "parents": [
        "9eac52698b18d089e73c7ec2bf73a64a39504733"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 19:15:02 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 19:16:53 2013 -0700"
      },
      "message": "Stop worker threads on memory trim \u0026 fix bad pointer access\n\nChange-Id: I6fe7e31aeb6dd41fa65ab952caed97bc2da510d7\n"
    },
    {
      "commit": "5dc7fa709646799a5207a5d217f70aa02bf4a3aa",
      "tree": "3ebf45fa51bd0373f77aa451868df2d6ae1a8a87",
      "parents": [
        "8818d84a3540de6e53e5d82e2112292102574118"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 11 20:48:31 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 12 15:06:42 2013 -0700"
      },
      "message": "Add TaskManager API\n\nThis API can be used to run arbitrary tasks on a pool of worker\nthreads. The number of threads is calculated based on the number\nof CPU cores available.\n\nThe API is made of 3 classes:\n\nTaskManager\n      Creates and manages the worker threads.\n\nTask\n      Describes the work to be done and the type of the output.\n      A task contains a future used to wait for the worker thread\n      to be done computing the result of the task.\n\nTaskProcessor\n      The processor dispatches tasks to the TaskManager and is\n      responsible for performing the computation required by\n      each task. A processor will only be asked to process tasks\n      sent to the manager through the processor.\n\nA typical use case:\n\nclass MyTask: Task\u003cMyType\u003e\n\nclass MyProcessor: TaskProcessor\u003cMyType\u003e\n\nTaskManager m \u003d new TaskManager();\nMyProcessor p \u003d new MyProcessor(m);\nMyTask t \u003d new MyTask();\np.add(t);\n\n// Waits until the result is available\nMyType result \u003d t-\u003egetResult();\n\nChange-Id: I1fe845ba4c49bb0e1b0627ab147f9a861c8e0749\n"
    }
  ]
}
