)]}'
{
  "commit": "e3cd2f0e3c3d976ae9c65c8a731003a5aaf71986",
  "tree": "e6f2bd0e62c7bd72753499140a854a1c4e5a976a",
  "parents": [
    "1d9314c989114f330297d52dae3fe0cd4848b183"
  ],
  "author": {
    "name": "Ian Rogers",
    "email": "irogers@google.com",
    "time": "Fri May 24 15:32:56 2013 -0700"
  },
  "committer": {
    "name": "Ian Rogers",
    "email": "irogers@google.com",
    "time": "Fri May 24 18:19:28 2013 -0700"
  },
  "message": "Enable devirtualization for abstract and sub-class methods.\n\nIf we know the type of a receiver in the verifier we record devirtualization\ndata. Currently we only use this data to avoid virtual method dispatch when\nwe know the receiver of a method isn\u0027t a sub-class. This change allows\ndevirtualization of virtual and interface methods when we know the receiver\u0027s\ntype and the method the we\u0027d find via dispatch is either known within boot or\nhas a reference from the current dex file.\n\nPass the receiver through to the method resolution trampoline as\ndevirtualization may mean the dex method index needs to be made more accurate\nfor the receiver.\n\nTidy up method devirtualization and related statistics.\n\nPush the devirtualization map lookup into a less common case to avoid\ntaking its lock.\n\nMake MethodReference a struct rather than a typedef of a pair, so the members\ncan have more meaningful names than first and second.\n\nRough statistics show that we devirtualize using this change around 2.5% of\nthe time, whilst some apps like GMS core devirtualize over 3.4% of the time.\n\nChange-Id: Ieed3471dbedfc4cc881d652631b67176bb37d394\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9f61d73d6b6a6be1fe82ac7012d986a4a3bfdeba",
      "old_mode": 33188,
      "old_path": "src/compiler/dex/mir_dataflow.cc",
      "new_id": "f65c9ae55af562ead8b4630a6f8b005df71b957c",
      "new_mode": 33188,
      "new_path": "src/compiler/dex/mir_dataflow.cc"
    },
    {
      "type": "modify",
      "old_id": "afcd9efb7d677ea97f9f0da6f608a119f3d65cce",
      "old_mode": 33188,
      "old_path": "src/compiler/dex/quick/gen_invoke.cc",
      "new_id": "f44272a6416ef494efd505126877cb6e5ea8437f",
      "new_mode": 33188,
      "new_path": "src/compiler/dex/quick/gen_invoke.cc"
    },
    {
      "type": "modify",
      "old_id": "21a0aacc13e074c06b9a53afd766c268a14ca8f2",
      "old_mode": 33188,
      "old_path": "src/compiler/dex/quick/mir_to_lir.h",
      "new_id": "9a4f5d0ae4c965d2deeb3690da07277e7c6e00b9",
      "new_mode": 33188,
      "new_path": "src/compiler/dex/quick/mir_to_lir.h"
    },
    {
      "type": "modify",
      "old_id": "698517277fedbcac27f1db4e8d3300f0a54a51e4",
      "old_mode": 33188,
      "old_path": "src/compiler/driver/compiler_driver.cc",
      "new_id": "bf8bb8acb21520bf27340a7a5da7af4a286aa331",
      "new_mode": 33188,
      "new_path": "src/compiler/driver/compiler_driver.cc"
    },
    {
      "type": "modify",
      "old_id": "75d276d5b1fa6bc25d954ba979d8137c92bbef04",
      "old_mode": 33188,
      "old_path": "src/compiler/driver/compiler_driver.h",
      "new_id": "250532b920034eec8a594330c53e9d989ec6002f",
      "new_mode": 33188,
      "new_path": "src/compiler/driver/compiler_driver.h"
    },
    {
      "type": "modify",
      "old_id": "99c8fd5ca73a17989071268c14e130ff8d2e807a",
      "old_mode": 33188,
      "old_path": "src/compiler/llvm/gbc_expander.cc",
      "new_id": "bdf9aca68f43b314685c17f6fd285473c495efa9",
      "new_mode": 33188,
      "new_path": "src/compiler/llvm/gbc_expander.cc"
    },
    {
      "type": "modify",
      "old_id": "3578ba0d1693e97f8b14f8fa263923d908fc0f65",
      "old_mode": 33188,
      "old_path": "src/oat/runtime/arm/runtime_support_arm.S",
      "new_id": "b8d2265226ebafb5c73cf69577ad3081a8d7742b",
      "new_mode": 33188,
      "new_path": "src/oat/runtime/arm/runtime_support_arm.S"
    },
    {
      "type": "modify",
      "old_id": "2144e349ba24a608316da1cba1fc9bac9ee1d02e",
      "old_mode": 33188,
      "old_path": "src/oat/runtime/mips/runtime_support_mips.S",
      "new_id": "2eeb662e35181ee9e97b155837ce36df22b20c55",
      "new_mode": 33188,
      "new_path": "src/oat/runtime/mips/runtime_support_mips.S"
    },
    {
      "type": "modify",
      "old_id": "df2dda2174ccc66a0f4127e72895b6480f7a5de9",
      "old_mode": 33188,
      "old_path": "src/oat/runtime/support_stubs.cc",
      "new_id": "97d5f66079d918f5346d1f494bfd3092aae5c048",
      "new_mode": 33188,
      "new_path": "src/oat/runtime/support_stubs.cc"
    },
    {
      "type": "modify",
      "old_id": "d3a1fb73ffa0b453452ceb93c3eda73f41678da3",
      "old_mode": 33188,
      "old_path": "src/oat/runtime/x86/runtime_support_x86.S",
      "new_id": "734aad1e3d4d0aab82d7a6c1e008e87b3ee3ad31",
      "new_mode": 33188,
      "new_path": "src/oat/runtime/x86/runtime_support_x86.S"
    },
    {
      "type": "modify",
      "old_id": "90f5b417edbd555468f99facb0b0e9984aa66e25",
      "old_mode": 33188,
      "old_path": "src/verifier/method_verifier.cc",
      "new_id": "1b2d9f35bf80531fea952b08d526e915230e4543",
      "new_mode": 33188,
      "new_path": "src/verifier/method_verifier.cc"
    },
    {
      "type": "modify",
      "old_id": "ab7e3cc8dc88a508d7488691c0b6dbbdd3172ff5",
      "old_mode": 33188,
      "old_path": "src/verifier/method_verifier.h",
      "new_id": "755d089bd6143bb924299d67b30d8921840de056",
      "new_mode": 33188,
      "new_path": "src/verifier/method_verifier.h"
    }
  ]
}
